diff options
author | Alexander Lenhardt <alexander.lenhardt@nokia.com> | 2011-11-14 16:14:43 +0100 |
---|---|---|
committer | Alexander Lenhardt <alexander.lenhardt@nokia.com> | 2011-11-15 14:09:04 +0100 |
commit | 57be365409bef4ca70cb65a6a59849aaaf77cf15 (patch) | |
tree | e37c7ac002fd2dbe7f4b6f7d67e4d8a99bca1307 | |
parent | 81d9a2bdafd76f3f2fffd0f20037ec99fbb3349b (diff) |
fixed bugs with version display in packagemanager and update manager
Change-Id: I5252b973d96b203ace5e9022f09f55e39c7c779c
Reviewed-by: Karsten Heimrich <karsten.heimrich@nokia.com>
Reviewed-by: Tim Jenssen <tim.jenssen@nokia.com>
-rw-r--r-- | installerbuilder/libinstaller/packagemanagercore.cpp | 43 | ||||
-rw-r--r-- | 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<QString, QInstaller::Component*> components; const QList<QInstaller::Component*> 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<QString, bool> 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<QString, QInstaller::Component*> &components, QHash<QString, bool> &visited) + const QHash<QString, QInstaller::Component*> &components, + const QString &versionKey, QHash<QString, bool> &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<QString, QInstaller::Component*> &components, QHash<QString, bool> &visited); + void updateDisplayVersions(const QString &displayKey); + QString findDisplayVersion(const QString &componentName, const QHash<QString, QInstaller::Component*> &components, + const QString& versionKey, QHash<QString, bool> &visited); private: PackageManagerCorePrivate *const d; friend class PackageManagerCorePrivate; |