AssetDownloader: Provide network errors and SSL errors

Network errors and SSL errors are provided as invokable methods.
The end user can collect the errors after download is finished.

Task-number: QTBUG-136035
Pick-to: 6.8
Change-Id: Ic8bd9b84d331752c096998683b44b85be3cd6b10
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
(cherry picked from commit 124f05bd10c1ce2a5104394712fae54c0659fccb)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Ali Kianian 2025-04-16 12:21:21 +03:00 committed by Qt Cherry-pick Bot
parent fd608b6a6b
commit 9842c84f36
2 changed files with 27 additions and 0 deletions

View File

@ -48,6 +48,8 @@ public:
QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation); QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation);
QUrl m_offlineAssetsFilePath; QUrl m_offlineAssetsFilePath;
QUrl m_downloadBase; QUrl m_downloadBase;
QStringList m_networkErrors;
QStringList m_sslErrors;
void setLocalDownloadDir(const QDir &dir) void setLocalDownloadDir(const QDir &dir)
{ {
@ -80,6 +82,16 @@ public:
query, [this](qint64 bytesReceived, qint64 totalBytes) { query, [this](qint64 bytesReceived, qint64 totalBytes) {
updateProgress((totalBytes > 0) ? 100.0 * bytesReceived / totalBytes : 0, 100); updateProgress((totalBytes > 0) ? 100.0 * bytesReceived / totalBytes : 0, 100);
}); });
QObject::connect(reply, &QNetworkReply::errorOccurred, query, [this, reply] {
m_networkErrors << reply->errorString();
});
#if QT_CONFIG(ssl)
QObject::connect(reply, &QNetworkReply::sslErrors,
query, [this](const QList<QSslError> &sslErrors) {
for (const QSslError &sslError : sslErrors)
m_sslErrors << sslError.errorString();
});
#endif
}); });
} }
}; };
@ -262,6 +274,16 @@ QUrl AssetDownloader::localDownloadDir() const
return QUrl::fromLocalFile(d->m_localDownloadDir.absolutePath()); return QUrl::fromLocalFile(d->m_localDownloadDir.absolutePath());
} }
QStringList AssetDownloader::networkErrors() const
{
return d->m_networkErrors;
}
QStringList AssetDownloader::sslErrors() const
{
return d->m_sslErrors;
}
static void precheckLocalFile(const QUrl &url) static void precheckLocalFile(const QUrl &url)
{ {
if (url.isEmpty()) if (url.isEmpty())
@ -385,6 +407,8 @@ void AssetDownloader::start()
} }
storage->tempDir = d->m_temporaryDir->path(); storage->tempDir = d->m_temporaryDir->path();
d->setLocalDownloadDir(baseLocalDir(d->m_preferredLocalDownloadDir)); d->setLocalDownloadDir(baseLocalDir(d->m_preferredLocalDownloadDir));
d->m_networkErrors.clear();
d->m_sslErrors.clear();
precheckLocalFile(resolvedUrl(d->m_offlineAssetsFilePath)); precheckLocalFile(resolvedUrl(d->m_offlineAssetsFilePath));
return SetupResult::Continue; return SetupResult::Continue;
}; };

View File

@ -86,6 +86,9 @@ public:
QUrl localDownloadDir() const; QUrl localDownloadDir() const;
Q_INVOKABLE QStringList networkErrors() const;
Q_INVOKABLE QStringList sslErrors() const;
public Q_SLOTS: public Q_SLOTS:
void start(); void start();