diff options
-rw-r--r-- | src/libs/installer/genericdatacache.cpp | 4 | ||||
-rw-r--r-- | src/libs/installer/metadatajob.cpp | 7 | ||||
-rw-r--r-- | src/libs/installer/packagemanagercore.cpp | 12 | ||||
-rw-r--r-- | src/libs/installer/packagemanagercore.h | 2 | ||||
-rw-r--r-- | src/sdk/tabcontroller.cpp | 25 | ||||
-rw-r--r-- | src/sdk/tabcontroller.h | 1 |
6 files changed, 45 insertions, 6 deletions
diff --git a/src/libs/installer/genericdatacache.cpp b/src/libs/installer/genericdatacache.cpp index efb3c3776..7f21a5365 100644 --- a/src/libs/installer/genericdatacache.cpp +++ b/src/libs/installer/genericdatacache.cpp @@ -256,18 +256,20 @@ bool GenericDataCache<T>::clear() return false; } + bool success = true; for (T *item : qAsConst(m_items)) { try { QInstaller::removeDirectory(item->path()); } catch (const Error &e) { setErrorString(QCoreApplication::translate("GenericDataCache", "Error while clearing cache: %1").arg(e.message())); + success = false; } } invalidate(); QDir().rmdir(m_path); - return true; + return success; } /*! diff --git a/src/libs/installer/metadatajob.cpp b/src/libs/installer/metadatajob.cpp index 5ec4d0fde..beddde6a3 100644 --- a/src/libs/installer/metadatajob.cpp +++ b/src/libs/installer/metadatajob.cpp @@ -199,7 +199,12 @@ bool MetadataJob::resetCache(bool init) bool MetadataJob::clearCache() { - return m_metaFromCache.clear(); + if (m_metaFromCache.clear()) + return true; + + setError(JobError::CacheError); + setErrorString(m_metaFromCache.errorString()); + return false; } // -- private slots diff --git a/src/libs/installer/packagemanagercore.cpp b/src/libs/installer/packagemanagercore.cpp index 2abfab2f6..bfe8e75b0 100644 --- a/src/libs/installer/packagemanagercore.cpp +++ b/src/libs/installer/packagemanagercore.cpp @@ -575,12 +575,20 @@ void PackageManagerCore::cancelMetaInfoJob() /*! Clears the contents of the cache used to store downloaded metadata. + Returns \c true on success, \c false otherwise. An error string can + be retrieved with \a error. \sa {installer::clearLocalCache}{installer.clearLocalCache} */ -void PackageManagerCore::clearLocalCache() +bool PackageManagerCore::clearLocalCache(QString *error) { - d->m_metadataJob.clearCache(); + if (d->m_metadataJob.clearCache()) + return true; + + if (error) + *error = d->m_metadataJob.errorString(); + + return false; } /*! diff --git a/src/libs/installer/packagemanagercore.h b/src/libs/installer/packagemanagercore.h index 4ee97a86f..ebb590e35 100644 --- a/src/libs/installer/packagemanagercore.h +++ b/src/libs/installer/packagemanagercore.h @@ -354,7 +354,7 @@ public Q_SLOTS: void languageChanged(); void setCompleteUninstallation(bool complete); void cancelMetaInfoJob(); - void clearLocalCache(); + bool clearLocalCache(QString *error = nullptr); void componentsToInstallNeedsRecalculation(); void calculateUserSelectedComponentsToInstall(const QList<QModelIndex> &indexes); void clearComponentsToInstallCalculated(); diff --git a/src/sdk/tabcontroller.cpp b/src/sdk/tabcontroller.cpp index 3cb3e4089..ae8fdbc25 100644 --- a/src/sdk/tabcontroller.cpp +++ b/src/sdk/tabcontroller.cpp @@ -37,6 +37,7 @@ #include <productkeycheck.h> #include <QtCore/QTimer> +#include <QtWidgets/QMessageBox> using namespace QInstaller; @@ -174,7 +175,7 @@ void TabController::onSettingsButtonClicked() connect(&dialog, &SettingsDialog::networkSettingsChanged, this, &TabController::onNetworkSettingsChanged); connect(&dialog, &SettingsDialog::clearLocalCacheClicked, - this, [&] { d->m_core->clearLocalCache(); }); + this, &TabController::onClearCacheClicked); dialog.exec(); if (d->m_networkSettingsChanged) { @@ -195,6 +196,28 @@ void TabController::onAboutApplicationClicked() dialog.exec(); } +void TabController::onClearCacheClicked() +{ + QDialog *settingsDialog = static_cast<QDialog *>(sender()); + + QString errorMessage; + const bool success = d->m_core->clearLocalCache(&errorMessage); + + QMessageBox msgBox(settingsDialog); + msgBox.setWindowModality(Qt::WindowModal); + msgBox.setStandardButtons(QMessageBox::Close); + + msgBox.setIcon(success + ? QMessageBox::Information + : QMessageBox::Critical); + + msgBox.setText(success + ? tr("Cache cleared successfully!") + : errorMessage); + + msgBox.exec(); +} + void TabController::onCurrentIdChanged(int newId) { if (d->m_gui) { diff --git a/src/sdk/tabcontroller.h b/src/sdk/tabcontroller.h index a92e724b4..236ff9fb8 100644 --- a/src/sdk/tabcontroller.h +++ b/src/sdk/tabcontroller.h @@ -61,6 +61,7 @@ private Q_SLOTS: void restartWizard(); void onSettingsButtonClicked(); void onAboutApplicationClicked(); + void onClearCacheClicked(); void onCurrentIdChanged(int newId); void onNetworkSettingsChanged(const QInstaller::Settings &settings); |