NOISSUE remove StandardTask
This commit is contained in:
parent
57b75dfcf7
commit
dde35a0eb8
@ -203,8 +203,6 @@ set(LOGIC_SOURCES
|
|||||||
tasks/ThreadTask.cpp
|
tasks/ThreadTask.cpp
|
||||||
tasks/SequentialTask.h
|
tasks/SequentialTask.h
|
||||||
tasks/SequentialTask.cpp
|
tasks/SequentialTask.cpp
|
||||||
tasks/StandardTask.h
|
|
||||||
tasks/StandardTask.cpp
|
|
||||||
|
|
||||||
# Settings
|
# Settings
|
||||||
settings/INIFile.cpp
|
settings/INIFile.cpp
|
||||||
|
@ -1,120 +0,0 @@
|
|||||||
// Licensed under the Apache-2.0 license. See README.md for details.
|
|
||||||
|
|
||||||
#include "StandardTask.h"
|
|
||||||
|
|
||||||
#include <QEventLoop>
|
|
||||||
#include <QProcess>
|
|
||||||
|
|
||||||
#include "net/CacheDownload.h"
|
|
||||||
#include "net/ByteArrayDownload.h"
|
|
||||||
#include "net/NetJob.h"
|
|
||||||
#include "FileSystem.h"
|
|
||||||
#include "Exception.h"
|
|
||||||
#include "Env.h"
|
|
||||||
|
|
||||||
StandardTask::StandardTask(QObject *parent)
|
|
||||||
: Task(parent)
|
|
||||||
{
|
|
||||||
m_loop = new QEventLoop(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StandardTask::runTask(QObjectPtr<Task> other)
|
|
||||||
{
|
|
||||||
connect(other.get(), &Task::succeeded, m_loop, &QEventLoop::quit);
|
|
||||||
connect(other.get(), &Task::failed, m_loop, &QEventLoop::quit);
|
|
||||||
connect(other.get(), &Task::progress, this, [this](qint64 current, qint64 total){setProgress(current / total);});
|
|
||||||
connect(other.get(), &Task::status, this, &StandardTask::setStatus);
|
|
||||||
if (!other->isRunning())
|
|
||||||
{
|
|
||||||
other->start();
|
|
||||||
}
|
|
||||||
if (other->isRunning())
|
|
||||||
{
|
|
||||||
m_loop->exec();
|
|
||||||
}
|
|
||||||
disconnect(other.get(), 0, m_loop, 0);
|
|
||||||
disconnect(other.get(), 0, this, 0);
|
|
||||||
other->deleteLater();
|
|
||||||
if (!other->successful())
|
|
||||||
{
|
|
||||||
throw Exception(other->failReason());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void StandardTask::runTaskNonBlocking(QObjectPtr<Task> other)
|
|
||||||
{
|
|
||||||
if (!other)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
m_pendingTasks.append(other.get());
|
|
||||||
m_pendingTaskPtrs.append(other);
|
|
||||||
other->start();
|
|
||||||
}
|
|
||||||
QByteArray StandardTask::networkGet(const QUrl &url)
|
|
||||||
{
|
|
||||||
ByteArrayDownloadPtr task = ByteArrayDownload::make(url);
|
|
||||||
runTask(wrapDownload("", task));
|
|
||||||
return task->m_data;
|
|
||||||
}
|
|
||||||
QByteArray StandardTask::networkGetCached(const QString &name, const QString &base, const QString &path, const QUrl &url, const bool alwaysRefetch,
|
|
||||||
INetworkValidator *validator)
|
|
||||||
{
|
|
||||||
MetaEntryPtr entry = ENV.metacache()->resolveEntry(base, path);
|
|
||||||
if (!alwaysRefetch && !entry->stale)
|
|
||||||
{
|
|
||||||
if (validator) { delete validator; }
|
|
||||||
return FS::read(entry->getFullPath());
|
|
||||||
}
|
|
||||||
else if (alwaysRefetch)
|
|
||||||
{
|
|
||||||
entry->stale = true;
|
|
||||||
}
|
|
||||||
CacheDownloadPtr task = CacheDownload::make(url, entry);
|
|
||||||
task->setValidator(validator);
|
|
||||||
runTask(wrapDownload(name, task));
|
|
||||||
return FS::read(entry->getFullPath());
|
|
||||||
}
|
|
||||||
QByteArray StandardTask::networkGetCached(const QString &name, const QString &base, const QString &path, const QUrl &url, const QMap<QString, QString> &headers,
|
|
||||||
INetworkValidator *validator)
|
|
||||||
{
|
|
||||||
MetaEntryPtr entry = ENV.metacache()->resolveEntry(base, path);
|
|
||||||
if (!entry->stale)
|
|
||||||
{
|
|
||||||
if (validator) { delete validator; }
|
|
||||||
return FS::read(entry->getFullPath());
|
|
||||||
}
|
|
||||||
CacheDownloadPtr task = CacheDownload::make(url, entry);
|
|
||||||
//task->setHeaders(headers);
|
|
||||||
task->setValidator(validator);
|
|
||||||
runTask(wrapDownload(name, task));
|
|
||||||
return FS::read(entry->getFullPath());
|
|
||||||
}
|
|
||||||
void StandardTask::networkGetCachedNonBlocking(const QString &name, const QString &base, const QString &path, const QUrl &url, const bool alwaysRefetch,
|
|
||||||
INetworkValidator *validator)
|
|
||||||
{
|
|
||||||
MetaEntryPtr entry = ENV.metacache()->resolveEntry(base, path);
|
|
||||||
if (!alwaysRefetch && !entry->stale)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
CacheDownloadPtr dl = CacheDownload::make(url, entry);
|
|
||||||
dl->setValidator(validator);
|
|
||||||
runTaskNonBlocking(wrapDownload(name, dl));
|
|
||||||
}
|
|
||||||
void StandardTask::waitOnPending()
|
|
||||||
{
|
|
||||||
for (int i = 0; i < m_pendingTasks.size(); ++i)
|
|
||||||
{
|
|
||||||
if (m_pendingTasks.at(i) && m_pendingTasks.at(i)->isRunning())
|
|
||||||
{
|
|
||||||
runTask(m_pendingTaskPtrs.at(i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QObjectPtr<NetJob> StandardTask::wrapDownload(const QString &name, std::shared_ptr<NetAction> action)
|
|
||||||
{
|
|
||||||
NetJobPtr task = NetJobPtr(new NetJob(name));
|
|
||||||
task->addNetAction(action);
|
|
||||||
return task;
|
|
||||||
}
|
|
@ -1,43 +0,0 @@
|
|||||||
// Licensed under the Apache-2.0 license. See README.md for details.
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include "Task.h"
|
|
||||||
|
|
||||||
#include <QPointer>
|
|
||||||
#include <memory>
|
|
||||||
|
|
||||||
#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<Task> other);
|
|
||||||
void runTaskNonBlocking(QObjectPtr<Task> 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<QString, QString> &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<QPointer<Task>> m_pendingTasks; // only used to check if the object was deleted
|
|
||||||
QList<QObjectPtr<Task>> m_pendingTaskPtrs;
|
|
||||||
|
|
||||||
QObjectPtr<NetJob> wrapDownload(const QString &name, std::shared_ptr<NetAction> action);
|
|
||||||
};
|
|
Loading…
Reference in New Issue
Block a user