diff --git a/src/plugins/studiowelcome/examplecheckout.cpp b/src/plugins/studiowelcome/examplecheckout.cpp index da19fd7c5f4..7ed1ff674fe 100644 --- a/src/plugins/studiowelcome/examplecheckout.cpp +++ b/src/plugins/studiowelcome/examplecheckout.cpp @@ -76,13 +76,13 @@ void FileDownloader::start() auto request = QNetworkRequest(m_url); request.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::UserVerifiedRedirectPolicy); - QNetworkReply *reply = Utils::NetworkAccessManager::instance()->get(request); + m_reply = Utils::NetworkAccessManager::instance()->get(request); - QNetworkReply::connect(reply, &QNetworkReply::readyRead, this, [this, reply]() { - m_tempFile.write(reply->readAll()); + QNetworkReply::connect(m_reply, &QNetworkReply::readyRead, this, [this]() { + m_tempFile.write(m_reply->readAll()); }); - QNetworkReply::connect(reply, + QNetworkReply::connect(m_reply, &QNetworkReply::downloadProgress, this, [this](qint64 current, qint64 max) { @@ -93,16 +93,21 @@ void FileDownloader::start() emit progressChanged(); }); - QNetworkReply::connect(reply, &QNetworkReply::redirected, [reply](const QUrl &) { - emit reply->redirectAllowed(); + QNetworkReply::connect(m_reply, &QNetworkReply::redirected, [this](const QUrl &) { + emit m_reply->redirectAllowed(); }); - QNetworkReply::connect(reply, &QNetworkReply::finished, this, [this, reply]() { - if (reply->error()) { + QNetworkReply::connect(m_reply, &QNetworkReply::finished, this, [this]() { + if (m_reply->error()) { if (m_tempFile.exists()) m_tempFile.remove(); - qWarning() << Q_FUNC_INFO << m_url << reply->errorString(); - emit downloadFailed(); + + if (m_reply->error() != QNetworkReply::OperationCanceledError) { + qWarning() << Q_FUNC_INFO << m_url << m_reply->errorString(); + emit downloadFailed(); + } else { + emit downloadCanceled(); + } } else { m_tempFile.flush(); m_tempFile.close(); @@ -110,9 +115,17 @@ void FileDownloader::start() emit tempFileChanged(); emit finishedChanged(); } + + m_reply = nullptr; }); } +void FileDownloader::cancel() +{ + if (m_reply) + m_reply->abort(); +} + void FileDownloader::setUrl(const QUrl &url) { m_url = url; diff --git a/src/plugins/studiowelcome/examplecheckout.h b/src/plugins/studiowelcome/examplecheckout.h index 7e7a0dff882..8c1446518c9 100644 --- a/src/plugins/studiowelcome/examplecheckout.h +++ b/src/plugins/studiowelcome/examplecheckout.h @@ -112,6 +112,7 @@ public: bool available() const; Q_INVOKABLE void start(); + Q_INVOKABLE void cancel(); signals: void finishedChanged(); @@ -123,6 +124,8 @@ signals: void lastModifiedChanged(); void availableChanged(); + void downloadCanceled(); + private: void probeUrl(); @@ -133,6 +136,8 @@ private: QFile m_tempFile; QDateTime m_lastModified; bool m_available = false; + + QNetworkReply *m_reply = nullptr; }; class DataModelDownloader : public QObject