diff options
author | Arttu Tarkiainen <arttu.tarkiainen@qt.io> | 2022-06-03 18:51:17 +0300 |
---|---|---|
committer | Arttu Tarkiainen <arttu.tarkiainen@qt.io> | 2022-06-14 07:30:31 +0000 |
commit | a6f2df9ebdb965d38ea2c263e3b3bea17c7abffe (patch) | |
tree | 810f01a4c21e20ce82d44d2c174cf5e3b65328d3 /src/libs/installer/packagemanagercore_p.cpp | |
parent | e8025cdfe0d85c8ac9199784e95d88bf001a8a99 (diff) |
Display progress for loading component install scripts
Also process pending events for the main thread in the loop that calls
Component::loadComponentScript() repeatedly, to not block the UI while
busy loading the scripts.
Task-number: QTIFW-2701
Change-Id: I4a1dd8e2441e21b5075b6fdffff8a47cd4bc7c80
Reviewed-by: Katja Marttila <katja.marttila@qt.io>
Diffstat (limited to 'src/libs/installer/packagemanagercore_p.cpp')
-rw-r--r-- | src/libs/installer/packagemanagercore_p.cpp | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/src/libs/installer/packagemanagercore_p.cpp b/src/libs/installer/packagemanagercore_p.cpp index 66630b98d..2d61a351a 100644 --- a/src/libs/installer/packagemanagercore_p.cpp +++ b/src/libs/installer/packagemanagercore_p.cpp @@ -402,10 +402,9 @@ bool PackageManagerCorePrivate::buildComponentTree(QHash<QString, Component*> &c // after everything is set up, load the scripts if needed and create helper hashes // for autodependency and dependency components for quicker search later - foreach (QInstaller::Component *component, components) { - if (loadScript) - component->loadComponentScript(); - } + if (loadScript && !loadComponentScripts(components)) + return false; + // now we can preselect components in the tree foreach (QInstaller::Component *component, components) { // set the checked state for all components without child (means without tristate) @@ -458,6 +457,29 @@ bool PackageManagerCorePrivate::buildComponentTree(QHash<QString, Component*> &c return true; } +template <typename T> +bool PackageManagerCorePrivate::loadComponentScripts(const T &components) +{ + infoMessage(nullptr, tr("Loading component scripts...")); + + quint64 loadedComponents = 0; + for (auto *component : components) { + if (statusCanceledOrFailed()) + return false; + + component->loadComponentScript(); + ++loadedComponents; + + const int currentProgress = qRound(double(loadedComponents) / components.count() * 100); + infoProgress(nullptr, currentProgress, 100); + qApp->processEvents(); + } + return true; +} + +template bool PackageManagerCorePrivate::loadComponentScripts<QList<Component *>>(const QList<Component *> &); +template bool PackageManagerCorePrivate::loadComponentScripts<QHash<QString, Component *>>(const QHash<QString, Component *> &); + void PackageManagerCorePrivate::cleanUpComponentEnvironment() { m_componentReplaces.clear(); |