summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert Griebl <robert.griebl@qt.io>2020-02-11 14:46:37 +0100
committerRobert Griebl <robert.griebl@qt.io>2020-02-11 15:51:55 +0100
commitae18e41a739659fa46efe8891a049ad890958138 (patch)
treed376c31ff4e741520748948fac5b38a62b7bf86f
parentdb6109928b83432b68018178577eaea55db90021 (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.cpp4
-rw-r--r--src/manager-lib/packagemanager.cpp30
-rw-r--r--src/manager-lib/packagemanager.h2
-rw-r--r--src/tools/controller/controller.cpp14
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());