From 042f3ef55c0b469f438542152c4eb02b0789ea3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sun, 14 Aug 2016 02:33:31 +0200 Subject: GH-352 Make OneSix instance update downloads cancellable --- api/logic/minecraft/MinecraftVersionList.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'api/logic/minecraft/MinecraftVersionList.cpp') 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 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 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(); -- cgit v1.2.3