diff options
author | Robert Griebl <robert.griebl@qt.io> | 2020-02-11 14:46:37 +0100 |
---|---|---|
committer | Robert Griebl <robert.griebl@qt.io> | 2020-02-11 15:51:55 +0100 |
commit | ae18e41a739659fa46efe8891a049ad890958138 (patch) | |
tree | d376c31ff4e741520748948fac5b38a62b7bf86f | |
parent | db6109928b83432b68018178577eaea55db90021 (diff) |
Really fix the installation problem via the appman-controller
The bug was trickier than anticipated, because I thought that only the appman
side would check the meta-data. Turns out the controller tries to verify the
packageId as well, but the meta-data was just not sent over DBus. Why? Because
the Package object may not have been in model yet (on first installation), so
calling PackageManager::get(<id>) led to an empty (error) repsonse.
Also fixed a few left missing s/application/package/ replacements.
Change-Id: I6fc436270ad193203fca94e66e739ffd4baeae27
Fixes: AUTOSUITE-1461
Reviewed-by: Egor Nemtsev <enemtsev@luxoft.com>
-rw-r--r-- | src/dbus-lib/packagemanagerdbuscontextadaptor.cpp | 4 | ||||
-rw-r--r-- | src/manager-lib/packagemanager.cpp | 30 | ||||
-rw-r--r-- | src/manager-lib/packagemanager.h | 2 | ||||
-rw-r--r-- | src/tools/controller/controller.cpp | 14 |
4 files changed, 32 insertions, 18 deletions
diff --git a/src/dbus-lib/packagemanagerdbuscontextadaptor.cpp b/src/dbus-lib/packagemanagerdbuscontextadaptor.cpp index ae4ba835..98fc664b 100644 --- a/src/dbus-lib/packagemanagerdbuscontextadaptor.cpp +++ b/src/dbus-lib/packagemanagerdbuscontextadaptor.cpp @@ -86,7 +86,9 @@ PackageManagerAdaptor::PackageManagerAdaptor(QObject *parent) this, [this](const QString &taskId, Package *package, const QVariantMap &packageExtraMetaData, const QVariantMap &packageExtraSignedMetaData) { - taskRequestingInstallationAcknowledge(taskId, get(package->id()), packageExtraMetaData, + auto map = PackageManager::instance()->get(package); + map.remove(qSL("package")); // cannot marshall QObject * + taskRequestingInstallationAcknowledge(taskId, map, packageExtraMetaData, packageExtraSignedMetaData); }); connect(pm, &PackageManager::taskStarted, diff --git a/src/manager-lib/packagemanager.cpp b/src/manager-lib/packagemanager.cpp index b379783e..dcfc1528 100644 --- a/src/manager-lib/packagemanager.cpp +++ b/src/manager-lib/packagemanager.cpp @@ -501,6 +501,17 @@ Package *PackageManager::fromId(const QString &id) const return nullptr; } +QVariantMap PackageManager::get(Package *package) const +{ + QVariantMap map; + if (package) { + QHash<int, QByteArray> roles = roleNames(); + for (auto it = roles.begin(); it != roles.end(); ++it) + map.insert(qL1S(it.value()), dataForRole(package, it.key())); + } + return map; +} + void PackageManager::emitDataChanged(Package *package, const QVector<int> &roles) { int row = d->packages.indexOf(package); @@ -532,7 +543,11 @@ QVariant PackageManager::data(const QModelIndex &index, int role) const return QVariant(); Package *package = d->packages.at(index.row()); + return dataForRole(package, role); +} +QVariant PackageManager::dataForRole(Package *package, int role) const +{ switch (role) { case Id: return package->id(); @@ -554,8 +569,9 @@ QVariant PackageManager::data(const QModelIndex &index, int role) const return package->version(); case PackageItem: return QVariant::fromValue(package); + default: + return QVariant(); } - return QVariant(); } QHash<int, QByteArray> PackageManager::roleNames() const @@ -585,12 +601,7 @@ QVariantMap PackageManager::get(int index) const qCWarning(LogSystem) << "PackageManager::get(index): invalid index:" << index; return QVariantMap(); } - - QVariantMap map; - QHash<int, QByteArray> roles = roleNames(); - for (auto it = roles.begin(); it != roles.end(); ++it) - map.insert(qL1S(it.value()), data(this->index(index), it.key())); - return map; + return get(d->packages.at(index)); } /*! @@ -607,7 +618,7 @@ QVariantMap PackageManager::get(int index) const Package *PackageManager::package(int index) const { if (index < 0 || index >= count()) { - qCWarning(LogSystem) << "PackageManager::application(index): invalid index:" << index; + qCWarning(LogSystem) << "PackageManager::package(index): invalid index:" << index; return nullptr; } return d->packages.at(index); @@ -924,8 +935,7 @@ QStringList PackageManager::packageIds() const */ QVariantMap PackageManager::get(const QString &packageId) const { - int index = indexOfPackage(packageId); - return (index < 0) ? QVariantMap{} : get(index); + return get(package(packageId)); } /*! diff --git a/src/manager-lib/packagemanager.h b/src/manager-lib/packagemanager.h index 59426f2d..918de38a 100644 --- a/src/manager-lib/packagemanager.h +++ b/src/manager-lib/packagemanager.h @@ -114,10 +114,12 @@ public: QVector<Package *> packages() const; Package *fromId(const QString &id) const; + QVariantMap get(Package *package) const; // the item model part int rowCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role) const override; + QVariant dataForRole(Package *package, int role) const; QHash<int, QByteArray> roleNames() const override; int count() const; diff --git a/src/tools/controller/controller.cpp b/src/tools/controller/controller.cpp index 71696b87..9572f187 100644 --- a/src/tools/controller/controller.cpp +++ b/src/tools/controller/controller.cpp @@ -700,10 +700,10 @@ void installPackage(const QString &package, bool acknowledge) Q_DECL_NOEXCEPT_EX [](const QString &taskId, const QVariantMap &metadata) { if (taskId != installationId) return; - QString applicationId = metadata.value(qSL("id")).toString(); - if (applicationId.isEmpty()) - throw Exception(Error::IO, "could not find a valid application id in the package"); - fprintf(stdout, "Acknowledging package installation...\n"); + QString packageId = metadata.value(qSL("packageId")).toString(); + if (packageId.isEmpty()) + throw Exception(Error::IO, "could not find a valid package id in the package"); + fprintf(stdout, "Acknowledging package installation for '%s'...\n", qPrintable(packageId)); dbus.packager()->acknowledgePackageInstallation(taskId); }); } @@ -748,9 +748,9 @@ void installPackage(const QString &package, bool acknowledge) Q_DECL_NOEXCEPT_EX }); } -void removePackage(const QString &applicationId, bool keepDocuments, bool force) Q_DECL_NOEXCEPT_EXPR(false) +void removePackage(const QString &packageId, bool keepDocuments, bool force) Q_DECL_NOEXCEPT_EXPR(false) { - fprintf(stdout, "Starting removal of package %s...\n", qPrintable(applicationId)); + fprintf(stdout, "Starting removal of package %s...\n", qPrintable(packageId)); dbus.connectToManager(); dbus.connectToPackager(); @@ -779,7 +779,7 @@ void removePackage(const QString &applicationId, bool keepDocuments, bool force) // start the package installation - auto reply = dbus.packager()->removePackage(applicationId, keepDocuments, force); + auto reply = dbus.packager()->removePackage(packageId, keepDocuments, force); reply.waitForFinished(); if (reply.isError()) throw Exception(Error::IO, "failed to call removePackage via DBus: %1").arg(reply.error().message()); |