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/forge/ForgeXzDownload.cpp | 44 ++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 4 deletions(-) (limited to 'api/logic/minecraft/forge/ForgeXzDownload.cpp') diff --git a/api/logic/minecraft/forge/ForgeXzDownload.cpp b/api/logic/minecraft/forge/ForgeXzDownload.cpp index adf96552..8b762866 100644 --- a/api/logic/minecraft/forge/ForgeXzDownload.cpp +++ b/api/logic/minecraft/forge/ForgeXzDownload.cpp @@ -35,6 +35,12 @@ ForgeXzDownload::ForgeXzDownload(QString relative_path, MetaEntryPtr entry) : Ne void ForgeXzDownload::start() { + if(m_status == Job_Aborted) + { + qWarning() << "Attempt to start an aborted Download:" << m_url.toString(); + emit aborted(m_index_within_job); + return; + } m_status = Job_InProgress; if (!m_entry->isStale()) { @@ -76,9 +82,17 @@ void ForgeXzDownload::downloadProgress(qint64 bytesReceived, qint64 bytesTotal) void ForgeXzDownload::downloadError(QNetworkReply::NetworkError error) { - // error happened during download. - // TODO: log the reason why - m_status = Job_Failed; + if(error == QNetworkReply::OperationCanceledError) + { + qCritical() << "Aborted " << m_url.toString(); + m_status = Job_Aborted; + } + else + { + // error happened during download. + qCritical() << "Failed " << m_url.toString() << " with reason " << error; + m_status = Job_Failed; + } } void ForgeXzDownload::failAndTryNextMirror() @@ -90,7 +104,7 @@ void ForgeXzDownload::failAndTryNextMirror() void ForgeXzDownload::downloadFinished() { // if the download succeeded - if (m_status != Job_Failed) + if (m_status != Job_Failed && m_status != Job_Aborted) { // nothing went wrong... m_status = Job_Finished; @@ -110,6 +124,14 @@ void ForgeXzDownload::downloadFinished() return; } } + else if(m_status == Job_Aborted) + { + m_pack200_xz_file.remove(); + m_reply.reset(); + emit failed(m_index_within_job); + emit aborted(m_index_within_job); + return; + } // else the download failed else { @@ -147,6 +169,7 @@ void ForgeXzDownload::downloadReadyRead() const size_t buffer_size = 8196; +// NOTE: once this gets here, it can't be aborted anymore. we don't care. void ForgeXzDownload::decompressAndInstall() { // rewind the downloaded temp file @@ -356,3 +379,16 @@ void ForgeXzDownload::decompressAndInstall() m_reply.reset(); emit succeeded(m_index_within_job); } + +bool ForgeXzDownload::abort() +{ + if(m_reply) + m_reply->abort(); + m_status = Job_Aborted; + return true; +} + +bool ForgeXzDownload::canAbort() +{ + return true; +} -- cgit v1.2.3