diff options
Diffstat (limited to 'src/sdk/tabcontroller.cpp')
-rw-r--r-- | src/sdk/tabcontroller.cpp | 59 |
1 files changed, 57 insertions, 2 deletions
diff --git a/src/sdk/tabcontroller.cpp b/src/sdk/tabcontroller.cpp index 56ab524aa..8c15243f8 100644 --- a/src/sdk/tabcontroller.cpp +++ b/src/sdk/tabcontroller.cpp @@ -37,6 +37,8 @@ #include <productkeycheck.h> #include <QtCore/QTimer> +#include <QtWidgets/QMessageBox> +#include <QtConcurrent> using namespace QInstaller; @@ -128,7 +130,7 @@ int TabController::init() if (page) { page->setMessage(QString()); page->setErrorMessage(QString()); - page->onCoreNetworkSettingsChanged(); + page->resetFetchedState(); } d->m_gui->restart(); @@ -154,6 +156,8 @@ void TabController::restartWizard() d->m_core->settings().setDefaultRepositories(d->m_settings.defaultRepositories()); d->m_core->settings().setTemporaryRepositories(d->m_settings.temporaryRepositories(), d->m_settings.hasReplacementRepos()); + d->m_core->settings().setLocalCachePath(d->m_settings.localCachePath()); + d->m_core->networkSettingsChanged(); } @@ -169,8 +173,11 @@ void TabController::restartWizard() void TabController::onSettingsButtonClicked() { SettingsDialog dialog(d->m_core); + dialog.adjustSize(); connect(&dialog, &SettingsDialog::networkSettingsChanged, this, &TabController::onNetworkSettingsChanged); + connect(&dialog, &SettingsDialog::clearLocalCacheClicked, + this, &TabController::onClearCacheClicked); dialog.exec(); if (d->m_networkSettingsChanged) { @@ -191,11 +198,59 @@ void TabController::onAboutApplicationClicked() dialog.exec(); } +void TabController::onClearCacheClicked() +{ + SettingsDialog *settingsDialog = static_cast<SettingsDialog *>(sender()); + settingsDialog->setEnabled(false); + settingsDialog->showClearCacheProgress(true); + + QString errorMessage; + bool success = true; + + // Clearing might take some time, run in a separate thread + QEventLoop loop; + QFutureWatcher<bool> futureWatcher; + + connect(&futureWatcher, &QFutureWatcher<bool>::finished, this, [&]() { + success = futureWatcher.future().result(); + if (loop.isRunning()) + loop.quit(); + }); + +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + futureWatcher.setFuture(QtConcurrent::run(&PackageManagerCore::clearLocalCache, + d->m_core, &errorMessage)); +#else + futureWatcher.setFuture(QtConcurrent::run(d->m_core, + &PackageManagerCore::clearLocalCache, &errorMessage)); +#endif + + if (!futureWatcher.isFinished()) + loop.exec(); + + settingsDialog->setEnabled(true); + settingsDialog->showClearCacheProgress(false); + + 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) { if (PackageManagerPage *page = qobject_cast<PackageManagerPage *>(d->m_gui->page(newId))) - d->m_gui->showSettingsButton(page->settingsButtonRequested()); + d->m_gui->requestSettingsButtonByInstaller(page->settingsButtonRequested()); } } |