diff options
author | Katja Marttila <katja.marttila@qt.io> | 2023-03-13 15:53:41 +0200 |
---|---|---|
committer | Katja Marttila <katja.marttila@qt.io> | 2023-03-23 15:06:49 +0200 |
commit | e07cbae2cc1ae113fea71d0e6da6bcee148a0055 (patch) | |
tree | 4277e02d98e7c95ee221b62ea70be3db968adeee | |
parent | 686f93362ca3495b92b584ecb99b63662f6213d6 (diff) |
Add more verbose when archive download fails
Occasionally installer might throw "Cannot download archive" messages
for unknown reason. Adding more detailed verbose to catch the root
cause. Also trying to create a parent folder when starting to download
an reopening the file just in case.
Task-number: QTBUG-110684
Change-Id: I8bc4fc31371043e1f9eae8f7d9779ab434221ff3
Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
-rw-r--r-- | src/libs/kdtools/filedownloader.cpp | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/src/libs/kdtools/filedownloader.cpp b/src/libs/kdtools/filedownloader.cpp index 2510dc4c8..6152811aa 100644 --- a/src/libs/kdtools/filedownloader.cpp +++ b/src/libs/kdtools/filedownloader.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2013 Klaralvdalens Datakonsult AB (KDAB) +** Copyright (C) 2023 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -1483,21 +1484,35 @@ void KDUpdater::HttpDownloader::startDownload(const QUrl &url) void (QNetworkReply::*errorSignal)(QNetworkReply::NetworkError) = &QNetworkReply::error; connect(d->http, errorSignal, this, &HttpDownloader::httpError); + bool fileOpened = false; if (d->destFileName.isEmpty()) { QTemporaryFile *file = new QTemporaryFile(this); - file->open(); + fileOpened = file->open(); d->destination = file; } else { d->destination = new QFile(d->destFileName, this); - d->destination->open(QIODevice::ReadWrite | QIODevice::Truncate); + fileOpened = d->destination->open(QIODevice::ReadWrite | QIODevice::Truncate); } - - if (!d->destination->isOpen()) { - const QString error = d->destination->errorString(); - const QString fileName = d->destination->fileName(); - d->shutDown(); - setDownloadAborted(tr("Cannot download %1. Cannot create file \"%2\": %3").arg( - url.toString(), fileName, error)); + if (!fileOpened) { + qCWarning(QInstaller::lcInstallerInstallLog).nospace() << "Failed to open file " << d->destFileName + << ": "<<d->destination->errorString() << ". Trying again."; + QFileInfo fileInfo; + fileInfo.setFile(d->destination->fileName()); + if (!QDir().mkpath(fileInfo.absolutePath())) { + setDownloadAborted(tr("Cannot download %1. Cannot create directory for \"%2\"").arg( + url.toString(), fileInfo.filePath())); + } else { + fileOpened = d->destination->open(QIODevice::ReadWrite | QIODevice::Truncate); + if (fileOpened) + return; + if (d->destination->exists()) + qCWarning(QInstaller::lcInstallerInstallLog) << "File exists but installer is unable to open it."; + else + qCWarning(QInstaller::lcInstallerInstallLog) << "File does not exist."; + d->shutDown(); + setDownloadAborted(tr("Cannot download %1. Cannot create file \"%2\": %3").arg( + url.toString(), d->destination->fileName(), d->destination->errorString())); + } } } |