// Licensed under the Apache-2.0 license. See README.md for details. #pragma once #include "Task.h" #include #include #include "QObjectPtr.h" class QEventLoop; class QDir; class NetAction; class NetJob; class INetworkValidator; class StandardTask : public Task { Q_OBJECT public: explicit StandardTask(QObject *parent = nullptr); protected: // TODO: switch to a future-based system void runTask(QObjectPtr other); void runTaskNonBlocking(QObjectPtr other); QByteArray networkGet(const QUrl &url); QByteArray networkGetCached(const QString &name, const QString &base, const QString &path, const QUrl &url, const bool alwaysRefetch = false, INetworkValidator *validator = nullptr); QByteArray networkGetCached(const QString &name, const QString &base, const QString &path, const QUrl &url, const QMap &headers, INetworkValidator *validator = nullptr); void networkGetCachedNonBlocking(const QString &name, const QString &base, const QString &path, const QUrl &url, const bool alwaysRefetch = false, INetworkValidator *validator = nullptr); void waitOnPending(); private: QEventLoop *m_loop; QList> m_pendingTasks; // only used to check if the object was deleted QList> m_pendingTaskPtrs; QObjectPtr wrapDownload(const QString &name, std::shared_ptr action); };