diff options
author | Jarek Kobus <[email protected]> | 2024-05-02 14:43:08 +0200 |
---|---|---|
committer | Jarek Kobus <[email protected]> | 2024-05-03 14:03:05 +0000 |
commit | 5b7dbf129de1a57dc07118c68ff7c30f315bb755 (patch) | |
tree | 093c8590b6746ec250b53a51ceb80ddd1dc39d44 /src/plugins/android/androidsdkmanager.cpp | |
parent | f0ea3a0db5166c0c2fb38f4aff635cbbbdf8a5a4 (diff) |
Android: Reuse recipes
Change-Id: I9b4a0fdc793a5eb2ea80be38f1a48b51a6bdeeb1
Reviewed-by: Alessandro Portale <[email protected]>
Diffstat (limited to 'src/plugins/android/androidsdkmanager.cpp')
-rw-r--r-- | src/plugins/android/androidsdkmanager.cpp | 68 |
1 files changed, 66 insertions, 2 deletions
diff --git a/src/plugins/android/androidsdkmanager.cpp b/src/plugins/android/androidsdkmanager.cpp index 173a4af9f3a..181cdec183e 100644 --- a/src/plugins/android/androidsdkmanager.cpp +++ b/src/plugins/android/androidsdkmanager.cpp @@ -21,6 +21,7 @@ #include <QFutureWatcher> #include <QDialogButtonBox> #include <QLoggingCategory> +#include <QMessageBox> #include <QPlainTextEdit> #include <QProgressBar> #include <QReadWriteLock> @@ -467,14 +468,16 @@ public: void reloadSdkPackages(); void clearPackages(); + void runDialogRecipe(const Storage<DialogStorage> &dialogStorage, + const GroupItem &licenseRecipe, const GroupItem &continuationRecipe); + AndroidSdkManager &m_sdkManager; AndroidSdkPackageList m_allPackages; FilePath lastSdkManagerPath; QByteArray m_licenseUserInput; mutable QReadWriteLock m_licenseInputLock; - -public: bool m_packageListingSuccessful = false; + TaskTreeRunner m_taskTreeRunner; }; AndroidSdkManager::AndroidSdkManager() @@ -927,6 +930,67 @@ void AndroidSdkManagerPrivate::clearPackages() m_allPackages.clear(); } +void AndroidSdkManagerPrivate::runDialogRecipe(const Storage<DialogStorage> &dialogStorage, + const GroupItem &licensesRecipe, + const GroupItem &continuationRecipe) +{ + const auto onCancelSetup = [dialogStorage] { + return std::make_pair(dialogStorage->m_dialog.get(), &QDialog::rejected); + }; + const Group root { + dialogStorage, + Group { + licensesRecipe, + Sync([dialogStorage] { dialogStorage->m_dialog->setQuestionVisible(false); }), + continuationRecipe + }.withCancel(onCancelSetup) + }; + m_taskTreeRunner.start(root, {}, [this](DoneWith) { + QMetaObject::invokeMethod(&m_sdkManager, &AndroidSdkManager::reloadPackages, + Qt::QueuedConnection); + }); +} + +void AndroidSdkManager::runInstallationChange(const InstallationChange &change, + const QString &extraMessage) +{ + QString message = Tr::tr("%n Android SDK packages shall be updated.", "", change.count()); + if (!extraMessage.isEmpty()) + message.prepend(extraMessage + "\n\n"); + + QMessageBox messageDlg(QMessageBox::Information, Tr::tr("Android SDK Changes"), + message, QMessageBox::Ok | QMessageBox::Cancel, + Core::ICore::dialogParent()); + + QString details; + if (!change.toUninstall.isEmpty()) { + QStringList toUninstall = {Tr::tr("[Packages to be uninstalled:]")}; + toUninstall += change.toUninstall; + details += toUninstall.join("\n "); + } + if (!change.toInstall.isEmpty()) { + if (!change.toUninstall.isEmpty()) + details.append("\n\n"); + QStringList toInstall = {Tr::tr("[Packages to be installed:]")}; + toInstall += change.toInstall; + details += toInstall.join("\n "); + } + messageDlg.setDetailedText(details); + if (messageDlg.exec() == QMessageBox::Cancel) + return; + + const Storage<DialogStorage> dialogStorage; + m_d->runDialogRecipe(dialogStorage, + change.toInstall.count() ? licensesRecipe(dialogStorage) : nullItem, + installationRecipe(dialogStorage, change)); +} + +void AndroidSdkManager::runUpdate() +{ + const Storage<DialogStorage> dialogStorage; + m_d->runDialogRecipe(dialogStorage, licensesRecipe(dialogStorage), updateRecipe(dialogStorage)); +} + } // namespace Internal } // namespace Android |