summaryrefslogtreecommitdiffstats
path: root/api/logic/minecraft/MinecraftVersionList.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'api/logic/minecraft/MinecraftVersionList.cpp')
-rw-r--r--api/logic/minecraft/MinecraftVersionList.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/api/logic/minecraft/MinecraftVersionList.cpp b/api/logic/minecraft/MinecraftVersionList.cpp
index 4e4eafbc..e3f416d9 100644
--- a/api/logic/minecraft/MinecraftVersionList.cpp
+++ b/api/logic/minecraft/MinecraftVersionList.cpp
@@ -61,6 +61,10 @@ public:
explicit MCVListVersionUpdateTask(MinecraftVersionList *vlist, std::shared_ptr<MinecraftVersion> updatedVersion);
virtual ~MCVListVersionUpdateTask() override{};
virtual void executeTask() override;
+ bool canAbort() const override;
+
+public slots:
+ bool abort() override;
protected
slots:
@@ -71,6 +75,7 @@ protected:
QByteArray versionIndexData;
std::shared_ptr<MinecraftVersion> updatedVersion;
MinecraftVersionList *m_list;
+ bool m_aborted = false;
};
class ListLoadError : public Exception
@@ -410,6 +415,11 @@ MCVListVersionUpdateTask::MCVListVersionUpdateTask(MinecraftVersionList *vlist,
void MCVListVersionUpdateTask::executeTask()
{
+ if(m_aborted)
+ {
+ emitFailed(tr("Task aborted."));
+ return;
+ }
auto job = new NetJob("Version index");
job->addNetAction(Net::Download::makeByteArray(QUrl(updatedVersion->getUrl()), &versionIndexData));
specificVersionDownloadJob.reset(job);
@@ -419,6 +429,21 @@ void MCVListVersionUpdateTask::executeTask()
specificVersionDownloadJob->start();
}
+bool MCVListVersionUpdateTask::canAbort() const
+{
+ return true;
+}
+
+bool MCVListVersionUpdateTask::abort()
+{
+ m_aborted = true;
+ if(specificVersionDownloadJob)
+ {
+ return specificVersionDownloadJob->abort();
+ }
+ return true;
+}
+
void MCVListVersionUpdateTask::json_downloaded()
{
specificVersionDownloadJob.reset();