summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/libs/installer/genericdatacache.cpp4
-rw-r--r--src/libs/installer/metadatajob.cpp7
-rw-r--r--src/libs/installer/packagemanagercore.cpp12
-rw-r--r--src/libs/installer/packagemanagercore.h2
-rw-r--r--src/sdk/tabcontroller.cpp25
-rw-r--r--src/sdk/tabcontroller.h1
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);