From 57be365409bef4ca70cb65a6a59849aaaf77cf15 Mon Sep 17 00:00:00 2001 From: Alexander Lenhardt Date: Mon, 14 Nov 2011 16:14:43 +0100 Subject: fixed bugs with version display in packagemanager and update manager Change-Id: I5252b973d96b203ace5e9022f09f55e39c7c779c Reviewed-by: Karsten Heimrich Reviewed-by: Tim Jenssen --- .../libinstaller/packagemanagercore.cpp | 43 ++++++++++++---------- installerbuilder/libinstaller/packagemanagercore.h | 6 +-- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/installerbuilder/libinstaller/packagemanagercore.cpp b/installerbuilder/libinstaller/packagemanagercore.cpp index 0294ff749..e6dd6124a 100644 --- a/installerbuilder/libinstaller/packagemanagercore.cpp +++ b/installerbuilder/libinstaller/packagemanagercore.cpp @@ -617,7 +617,7 @@ bool PackageManagerCore::fetchLocalPackagesTree() } } - updateDisplayVersions(); + updateDisplayVersions(scDisplayVersion); emit finishAllComponentsReset(); d->setStatus(Success); @@ -665,7 +665,7 @@ bool PackageManagerCore::fetchRemotePackagesTree() success = fetchUpdaterPackages(packages, installedPackages); } - updateDisplayVersions(); + updateDisplayVersions(scRemoteDisplayVersion); if (success && !d->statusCanceledOrFailed()) d->setStatus(Success); @@ -1503,7 +1503,7 @@ bool PackageManagerCore::updateComponentData(struct Data &data, Component *compo // mark the replacement as installed only in package manager mode, otherwise // it would not show up in the updaters component list component->setInstalled(); - component->setValue(scInstalledVersion, data.package->data(scRemoteVersion).toString()); + component->setValue(scInstalledVersion, data.installedPackages->value(componentName).version); } data.replacementToExchangeables.insert(component, componentsToReplace); break; // break as soon as we know we replace at least one other component @@ -1751,40 +1751,43 @@ void PackageManagerCore::resetComponentsToUserCheckedState() d->resetComponentsToUserCheckedState(); } -void PackageManagerCore::updateDisplayVersions() +void PackageManagerCore::updateDisplayVersions(const QString &displayKey) { QHash components; const QList componentList = availableComponents(); - foreach (QInstaller::Component* component, componentList) { + foreach (QInstaller::Component* component, componentList) components[component->name()] = component; - qDebug() << component->value(scInheritVersion); - } // set display version for all components in list const QStringList &keys = components.keys(); foreach (const QString &key, keys) { QHash visited; - const QString displayVersion = findDisplayVersion(key, components, visited); - if (displayVersion.isEmpty()) - components.value(key)->setValue(scDisplayVersion, tr("invalid")); - else if (components.value(key)->isInstalled()) - components.value(key)->setValue(scDisplayVersion, displayVersion); - components.value(key)->setValue(scRemoteDisplayVersion, displayVersion); + if (components.value(key)->isInstalled()) { + components.value(key)->setValue(scDisplayVersion, + findDisplayVersion(key, components, scInstalledVersion, visited)); + } + visited.clear(); + const QString displayVersionRemote = findDisplayVersion(key, components, scRemoteVersion, visited); + if (displayVersionRemote.isEmpty()) + components.value(key)->setValue(displayKey, tr("invalid")); + else + components.value(key)->setValue(displayKey, displayVersionRemote); } } QString PackageManagerCore::findDisplayVersion(const QString &componentName, - const QHash &components, QHash &visited) + const QHash &components, + const QString &versionKey, QHash &visited) { const QString replaceWith = components.value(componentName)->value(scInheritVersion); visited[componentName] = true; - if (replaceWith.isEmpty()) { - if (components.value(componentName)->isInstalled()) - return components.value(componentName)->value(scInstalledVersion); - return components.value(componentName)->value(scVersion); // can be remote or local version - } + + if (replaceWith.isEmpty()) + return components.value(componentName)->value(versionKey); + if (visited.contains(replaceWith)) // cycle return QString(); - return findDisplayVersion(replaceWith, components, visited); + + return findDisplayVersion(replaceWith, components, versionKey, visited); } diff --git a/installerbuilder/libinstaller/packagemanagercore.h b/installerbuilder/libinstaller/packagemanagercore.h index 383abd6e6..be029c159 100644 --- a/installerbuilder/libinstaller/packagemanagercore.h +++ b/installerbuilder/libinstaller/packagemanagercore.h @@ -266,9 +266,9 @@ private: static Component *subComponentByName(const QInstaller::PackageManagerCore *installer, const QString &name, const QString &version = QString(), Component *check = 0); - void updateDisplayVersions(); - QString findDisplayVersion(const QString &componentName, - const QHash &components, QHash &visited); + void updateDisplayVersions(const QString &displayKey); + QString findDisplayVersion(const QString &componentName, const QHash &components, + const QString& versionKey, QHash &visited); private: PackageManagerCorePrivate *const d; friend class PackageManagerCorePrivate; -- cgit v1.2.3