GH-352 Make OneSix instance update downloads cancellable

This commit is contained in:
Petr Mrázek
2016-08-14 02:33:31 +02:00
parent 2f0441b3c1
commit 042f3ef55c
32 changed files with 796 additions and 360 deletions

View File

@ -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;
}