forked from qt-creator/qt-creator
QmlDesigner fix: do not automatically open example project on download
The user might click several example thumbnails, quickly one after another. This would normally issue multiple "open project" requests, and at the end the user doesn't know which of them actually opened. This might also potentially end up in a crash to someone. Fixed this by no longer opening the project automatically on open. Also, added a close button, on the progress bar for the downloading process, which the user can use to cancel an ongoing download. This would be helpful if the example project was opened by mistake, and the project is quite big. Task-number: QDS-7845 Change-Id: Ica3105aac77b8eb01c888f08050bd542599794f9 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io> Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
@@ -76,13 +76,13 @@ void FileDownloader::start()
|
|||||||
auto request = QNetworkRequest(m_url);
|
auto request = QNetworkRequest(m_url);
|
||||||
request.setAttribute(QNetworkRequest::RedirectPolicyAttribute,
|
request.setAttribute(QNetworkRequest::RedirectPolicyAttribute,
|
||||||
QNetworkRequest::UserVerifiedRedirectPolicy);
|
QNetworkRequest::UserVerifiedRedirectPolicy);
|
||||||
QNetworkReply *reply = Utils::NetworkAccessManager::instance()->get(request);
|
m_reply = Utils::NetworkAccessManager::instance()->get(request);
|
||||||
|
|
||||||
QNetworkReply::connect(reply, &QNetworkReply::readyRead, this, [this, reply]() {
|
QNetworkReply::connect(m_reply, &QNetworkReply::readyRead, this, [this]() {
|
||||||
m_tempFile.write(reply->readAll());
|
m_tempFile.write(m_reply->readAll());
|
||||||
});
|
});
|
||||||
|
|
||||||
QNetworkReply::connect(reply,
|
QNetworkReply::connect(m_reply,
|
||||||
&QNetworkReply::downloadProgress,
|
&QNetworkReply::downloadProgress,
|
||||||
this,
|
this,
|
||||||
[this](qint64 current, qint64 max) {
|
[this](qint64 current, qint64 max) {
|
||||||
@@ -93,16 +93,21 @@ void FileDownloader::start()
|
|||||||
emit progressChanged();
|
emit progressChanged();
|
||||||
});
|
});
|
||||||
|
|
||||||
QNetworkReply::connect(reply, &QNetworkReply::redirected, [reply](const QUrl &) {
|
QNetworkReply::connect(m_reply, &QNetworkReply::redirected, [this](const QUrl &) {
|
||||||
emit reply->redirectAllowed();
|
emit m_reply->redirectAllowed();
|
||||||
});
|
});
|
||||||
|
|
||||||
QNetworkReply::connect(reply, &QNetworkReply::finished, this, [this, reply]() {
|
QNetworkReply::connect(m_reply, &QNetworkReply::finished, this, [this]() {
|
||||||
if (reply->error()) {
|
if (m_reply->error()) {
|
||||||
if (m_tempFile.exists())
|
if (m_tempFile.exists())
|
||||||
m_tempFile.remove();
|
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 {
|
} else {
|
||||||
m_tempFile.flush();
|
m_tempFile.flush();
|
||||||
m_tempFile.close();
|
m_tempFile.close();
|
||||||
@@ -110,9 +115,17 @@ void FileDownloader::start()
|
|||||||
emit tempFileChanged();
|
emit tempFileChanged();
|
||||||
emit finishedChanged();
|
emit finishedChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_reply = nullptr;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FileDownloader::cancel()
|
||||||
|
{
|
||||||
|
if (m_reply)
|
||||||
|
m_reply->abort();
|
||||||
|
}
|
||||||
|
|
||||||
void FileDownloader::setUrl(const QUrl &url)
|
void FileDownloader::setUrl(const QUrl &url)
|
||||||
{
|
{
|
||||||
m_url = url;
|
m_url = url;
|
||||||
|
@@ -112,6 +112,7 @@ public:
|
|||||||
bool available() const;
|
bool available() const;
|
||||||
|
|
||||||
Q_INVOKABLE void start();
|
Q_INVOKABLE void start();
|
||||||
|
Q_INVOKABLE void cancel();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void finishedChanged();
|
void finishedChanged();
|
||||||
@@ -123,6 +124,8 @@ signals:
|
|||||||
void lastModifiedChanged();
|
void lastModifiedChanged();
|
||||||
void availableChanged();
|
void availableChanged();
|
||||||
|
|
||||||
|
void downloadCanceled();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void probeUrl();
|
void probeUrl();
|
||||||
|
|
||||||
@@ -133,6 +136,8 @@ private:
|
|||||||
QFile m_tempFile;
|
QFile m_tempFile;
|
||||||
QDateTime m_lastModified;
|
QDateTime m_lastModified;
|
||||||
bool m_available = false;
|
bool m_available = false;
|
||||||
|
|
||||||
|
QNetworkReply *m_reply = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
class DataModelDownloader : public QObject
|
class DataModelDownloader : public QObject
|
||||||
|
Reference in New Issue
Block a user