diff options
author | Petr Mrázek <peterix@gmail.com> | 2016-08-14 02:33:31 +0200 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2016-08-14 23:22:54 +0200 |
commit | 042f3ef55c0b469f438542152c4eb02b0789ea3c (patch) | |
tree | 03e0c15b200786558babd0fe58edac88ed1bfd1e /api/logic/net/Download.cpp | |
parent | 2f0441b3c1cd9fc3bcb176d2852da8f92a6e6777 (diff) | |
download | PrismLauncher-042f3ef55c0b469f438542152c4eb02b0789ea3c.tar.gz PrismLauncher-042f3ef55c0b469f438542152c4eb02b0789ea3c.tar.bz2 PrismLauncher-042f3ef55c0b469f438542152c4eb02b0789ea3c.zip |
GH-352 Make OneSix instance update downloads cancellable
Diffstat (limited to 'api/logic/net/Download.cpp')
-rw-r--r-- | api/logic/net/Download.cpp | 48 |
1 files changed, 45 insertions, 3 deletions
diff --git a/api/logic/net/Download.cpp b/api/logic/net/Download.cpp index 70fe7608..7610cae3 100644 --- a/api/logic/net/Download.cpp +++ b/api/logic/net/Download.cpp @@ -65,6 +65,12 @@ void Download::addValidator(Validator * v) void Download::start() { + if(m_status == Job_Aborted) + { + qWarning() << "Attempt to start an aborted Download:" << m_url.toString(); + emit aborted(m_index_within_job); + return; + } QNetworkRequest request(m_url); m_status = m_sink->init(request); switch(m_status) @@ -80,6 +86,8 @@ void Download::start() case Job_Failed: emit failed(m_index_within_job); return; + case Job_Aborted: + return; } request.setHeader(QNetworkRequest::UserAgentHeader, "MultiMC/5.0"); @@ -103,9 +111,17 @@ void Download::downloadProgress(qint64 bytesReceived, qint64 bytesTotal) void Download::downloadError(QNetworkReply::NetworkError error) { - // error happened during download. - qCritical() << "Failed " << m_url.toString() << " with reason " << error; - 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; + } } bool Download::handleRedirect() @@ -154,6 +170,14 @@ void Download::downloadFinished() emit failed(m_index_within_job); return; } + else if(m_status == Job_Aborted) + { + qDebug() << "Download aborted in previous step:" << m_url.toString(); + m_sink->abort(); + m_reply.reset(); + emit aborted(m_index_within_job); + return; + } // make sure we got all the remaining data, if any auto data = m_reply->readAll(); @@ -197,3 +221,21 @@ void Download::downloadReadyRead() } } + +bool Net::Download::abort() +{ + if(m_reply) + { + m_reply->abort(); + } + else + { + m_status = Job_Aborted; + } + return true; +} + +bool Net::Download::canAbort() +{ + return true; +} |