5#ifndef TASKING_TASKTREERUNNER_H
6#define TASKING_TASKTREERUNNER_H
22#include <QtCore/QObject>
42 const SetupHandler &setupHandler = {},
43 const DoneHandler &doneHandler = {});
56 std::unique_ptr<TaskTree> m_taskTree;
void setupDownload(NetworkQuery *query, const QString &progressText)
QDir m_preferredLocalDownloadDir
void setLocalDownloadDir(const QDir &dir)
void setProgress(int progressValue, int progressMaximum, const QString &progressText)
QUrl m_offlineAssetsFilePath
AssetDownloaderPrivate(AssetDownloader *q)
void clearProgress(const QString &progressText)
QStringList m_networkErrors
TaskTreeRunner m_taskTreeRunner
QString m_lastProgressText
void updateProgress(int progressValue, int progressMaximum)
std::unique_ptr< QNetworkAccessManager > m_manager
std::unique_ptr< QTemporaryDir > m_temporaryDir
void progressChanged(int progressValue, int progressMaximum, const QString &progressText)
void localDownloadDirChanged(const QUrl &url)
void setOfflineAssetsFilePath(const QUrl &offlineAssetsFilePath)
QUrl preferredLocalDownloadDir() const
QUrl downloadBase() const
virtual QUrl resolvedUrl(const QUrl &url) const
void setJsonFileName(const QString &jsonFileName)
void jsonFileNameChanged(const QString &)
void downloadBaseChanged(const QUrl &)
void setPreferredLocalDownloadDir(const QUrl &localDir)
void offlineAssetsFilePathChanged(const QUrl &)
QString jsonFileName() const
QUrl offlineAssetsFilePath() const
void setDownloadBase(const QUrl &downloadBase)
QString zipFileName() const
void setZipFileName(const QString &zipFileName)
void finished(bool success)
QUrl localDownloadDir() const
void zipFileNameChanged(const QString &)
void preferredLocalDownloadDirChanged(const QUrl &url)
void start() final
This method is called by the running TaskTree for starting the Task instance.
~ConcurrentCallTaskAdapter()
void setThreadPool(QThreadPool *pool)
QFuture< ResultType > future() const
QList< ResultType > results() const
ResultType result() const
void setConcurrentCallData(Function &&function, Args &&...args)
typename Adapter::TaskType Task
typename Adapter::DeleterType Deleter
std::function< SetupResult(Task &)> TaskSetupHandler
CustomTask(SetupHandler &&setup=TaskSetupHandler(), DoneHandler &&done=TaskDoneHandler(), CallDoneIf callDoneIf=CallDoneIf::SuccessOrError)
\typealias Tasking::CustomTask::Task
Do(std::initializer_list< GroupItem > children)
Do(const GroupItems &children)
\inheaderfile solutions/tasking/tasktree.h \inmodule TaskingSolution
Group withCancel(SenderSignalPairGetter &&getter, std::initializer_list< GroupItem > postCancelRecipe={}) const
ExecutableItem(const TaskHandler &handler)
Group withLog(const QString &logName) const
Attaches a custom debug printout to a copy of this ExecutableItem, issued on task startup and after t...
Group withTimeout(std::chrono::milliseconds timeout, const std::function< void()> &handler={}) const
Attaches TimeoutTask to a copy of this ExecutableItem, elapsing after timeout in milliseconds,...
Group withAccept(SenderSignalPairGetter &&getter) const
Forever(const GroupItems &children)
Forever(std::initializer_list< GroupItem > children)
\typealias Tasking::GroupItems
GroupItem(const Loop &loop)
GroupItem(std::initializer_list< GroupItem > children)
GroupItem(const TaskHandler &handler)
GroupItem(const GroupData &data)
GroupItem(const GroupItems &children)
Constructs a GroupItem element with a given list of items.
GroupItem(const Storage< StorageStruct > &storage)
Constructs a GroupItem element holding the storage object.
static GroupItem groupHandler(const GroupHandler &handler)
void addChildren(const GroupItems &children)
static constexpr bool isInvocable()
\inheaderfile solutions/tasking/tasktree.h \inmodule TaskingSolution
static GroupItem onGroupSetup(Handler &&handler)
static GroupItem onGroupDone(Handler &&handler, CallDoneIf callDoneIf=CallDoneIf::SuccessOrError)
Group(const GroupItems &children)
Constructs a group with a given list of children.
Group(std::initializer_list< GroupItem > children)
Constructs a group from std::initializer_list given by children.
const T & operator*() const
LoopList(const QList< T > &list)
const T * operator->() const
LoopUntil(const Condition &condition)
Loop(int count, const ValueGetter &valueGetter={})
Loop(const Condition &condition)
const void * valuePtr() const
QNetworkReply * reply() const
void setNetworkAccessManager(QNetworkAccessManager *manager)
void setOperation(NetworkOperation operation)
void done(DoneResult result)
void downloadProgress(qint64 bytesReceived, qint64 bytesTotal)
void setRequest(const QNetworkRequest &request)
void setWriteData(const QByteArray &data)
void start() final
This method is called by the running TaskTree for starting the Task instance.
friend bool operator==(const StorageBase &first, const StorageBase &second)
friend size_t qHash(const StorageBase &storage, uint seed=0)
friend bool operator!=(const StorageBase &first, const StorageBase &second)
StorageStruct * operator->() const noexcept
Returns a pointer to the active StorageStruct object, created by the running task tree.
StorageStruct & operator*() const noexcept
Returns a reference to the active StorageStruct object, created by the running task tree.
Storage()
Creates a storage for the given StorageStruct type.
StorageStruct * activeStorage() const
Returns a pointer to the active StorageStruct object, created by the running task tree.
Storage(const Args &...args)
Sync(Handler &&handler)
Constructs an element that executes a passed handler synchronously.
\inheaderfile solutions/tasking/tasktree.h \inmodule TaskingSolution
const Task * task() const
\inheaderfile solutions/tasking/tasktree.h \inmodule TaskingSolution
virtual void start()=0
This method is called by the running TaskTree for starting the Task instance.
void done(DoneWith result)
void start(const Group &recipe, const SetupHandler &setupHandler={}, const DoneHandler &doneHandler={})
void start() final
This method is called by the running TaskTree for starting the Task instance.
void done(DoneWith result)
This signal is emitted when the task tree finished, passing the final result of the execution.
DoneWith runBlocking(const QFuture< void > &future)
int progressMaximum() const
Returns the maximum progressValue().
TaskTree()
Constructs an empty task tree.
int taskCount() const
Returns the number of asynchronous tasks contained in the stored recipe.
void cancel()
Cancels the execution of the running task tree.
void start()
Starts the task tree.
void onStorageSetup(const Storage< StorageStruct > &storage, Handler &&handler)
Installs a storage setup handler for the storage to pass the initial data dynamically to the running ...
~TaskTree()
Destroys the task tree.
bool isRunning() const
Returns true if the task tree is currently running; otherwise returns false.
void onStorageDone(const Storage< StorageStruct > &storage, Handler &&handler)
Installs a storage done handler for the storage to retrieve the final data dynamically from the runni...
void setRecipe(const Group &recipe)
Sets a given recipe for the task tree.
void asyncCountChanged(int count)
This signal is emitted when the running task tree is about to return control to the caller's event lo...
TaskTree(const Group &recipe)
This is an overloaded member function, provided for convenience. It differs from the above function o...
int progressValue() const
Returns the current progress value, which is between the 0 and progressMaximum().
DoneWith runBlocking()
Executes a local event loop with QEventLoop::ExcludeUserInputEvents and starts the task tree.
static DoneWith runBlocking(const Group &recipe)
Constructs a temporary task tree using the passed recipe and runs it blocking.
void progressValueChanged(int value)
This signal is emitted when the running task tree finished, canceled, or skipped some tasks.
int asyncCount() const
Returns the current real count of asynchronous chains of invocations.
static DoneWith runBlocking(const Group &recipe, const QFuture< void > &future)
void start() final
This method is called by the running TaskTree for starting the Task instance.
TASKING_EXPORT friend Group operator>>(const When &whenItem, const Do &doItem)
static void unzip(QPromise< void > &promise, const QByteArray &content, const QDir &directory, const QString &fileName)
static bool sameFileContent(const QFileInfo &first, const QFileInfo &second)
static void writeAsset(QPromise< void > &promise, const QByteArray &content, const QString &filePath)
static void precheckLocalFile(const QUrl &url)
static QDir baseLocalDir(const QDir &preferredLocalDir)
static QString pathFromUrl(const QUrl &url)
static bool allAssetsPresent(const QList< QUrl > &assetFiles, const QDir &expectedDir)
static void copyAndCheck(QPromise< void > &promise, const QString &sourcePath, const QString &destPath)
static bool canBeALocalBaseDir(const QDir &dir)
static QList< QUrl > filterDownloadableAssets(const QList< QUrl > &assetFiles, const QDir &expectedDir)
static void readAssetsFileContent(QPromise< DownloadableAssets > &promise, const QByteArray &content)
static bool createDirectory(const QDir &dir)
static bool isWritableDir(const QDir &dir)
\inmodule TaskingSolution
const ExecutableItem successItem
const GroupItem sequential
GroupItem parallelLimit(int limit)
Constructs a group's element describing the \l{Execution Mode}{execution mode}.
Group operator||(const ExecutableItem &first, const ExecutableItem &second)
CustomTask< ConcurrentCallTaskAdapter< T > > ConcurrentCallTask
const GroupItem continueOnSuccess
const GroupItem stopOnError
const GroupItem finishAllAndError
const ExecutableItem errorItem
CustomTask< SimpleTaskAdapter< Task > > SimpleCustomTask
CustomTask< TimeoutTaskAdapter > TimeoutTask
const GroupItem finishAllAndSuccess
Group operator||(const ExecutableItem &item, DoneResult result)
DoneResult toDoneResult(bool success)
const GroupItem parallelIdealThreadCountLimit
ExecutableItem timeoutTask(const std::chrono::milliseconds &timeout, DoneResult result)
CustomTask< TaskTreeTaskAdapter > TaskTreeTask
const GroupItem stopOnSuccessOrError
Group operator&&(const ExecutableItem &item, DoneResult result)
Group operator&&(const ExecutableItem &first, const ExecutableItem &second)
static GroupItem onGroupSetup(Handler &&handler)
\typealias Tasking::GroupItem::GroupSetupHandler
Group operator>>(const For &forItem, const Do &doItem)
Group operator!(const ExecutableItem &item)
const GroupItem continueOnError
GroupItem workflowPolicy(WorkflowPolicy policy)
Constructs a group's \l {Workflow Policy} {workflow policy} element for a given policy.
const GroupItem stopOnSuccess
static GroupItem onGroupDone(Handler &&handler, CallDoneIf callDoneIf=CallDoneIf::SuccessOrError)
Constructs a group's element holding the group done handler.
GroupHandler m_groupHandler
std::optional< WorkflowPolicy > m_workflowPolicy
std::optional< int > m_parallelLimit
std::optional< Loop > m_loop
GroupDoneHandler m_doneHandler
GroupSetupHandler m_setupHandler
InterfaceSetupHandler m_setupHandler
InterfaceCreateHandler m_createHandler
InterfaceDoneHandler m_doneHandler