summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Griebl <robert.griebl@qt.io>2023-05-08 17:43:55 +0200
committerRobert Griebl <robert.griebl@qt.io>2023-05-09 09:43:59 +0000
commita027b61a64160ca5fa1c3bc8d135a38c75a534a7 (patch)
tree1007b5094bffccda283cc2a75966fb6d6e0c8071
parent64723380fe2799cb53bedce38d66cc5af8dbea2e (diff)
downloadqtapplicationmanager-a027b61a64160ca5fa1c3bc8d135a38c75a534a7.tar.gz
Also expose applications in taskRequestingInstallationAcknowledge
Since switching to the new multiple-apps-per-package architecture, the actual infos about the apps in the package were not exposed via the requesting-acknowledge signal anymore. Change-Id: Id535c5d8710998ce26043ec8e56cd1881961628d Pick-to: 5.15 6.2 6.5 Reviewed-by: Dominik Holland <dominik.holland@qt.io>
-rw-r--r--src/dbus-lib/packagemanagerdbuscontextadaptor.cpp12
-rw-r--r--src/manager-lib/installationtask.cpp8
-rw-r--r--src/manager-lib/installationtask.h2
-rw-r--r--tests/auto/qml/installer/tst_installer.qml11
4 files changed, 32 insertions, 1 deletions
diff --git a/src/dbus-lib/packagemanagerdbuscontextadaptor.cpp b/src/dbus-lib/packagemanagerdbuscontextadaptor.cpp
index 2f5217a6..c6d78fff 100644
--- a/src/dbus-lib/packagemanagerdbuscontextadaptor.cpp
+++ b/src/dbus-lib/packagemanagerdbuscontextadaptor.cpp
@@ -7,6 +7,7 @@
#include "package.h"
#include "packagemanager.h"
#include "packagemanager_adaptor.h"
+#include "applicationmanager.h"
#include "dbuspolicy.h"
#include "exception.h"
#include "logging.h"
@@ -61,6 +62,17 @@ PackageManagerAdaptor::PackageManagerAdaptor(QObject *parent)
const QVariantMap &packageExtraSignedMetaData) {
auto map = PackageManager::instance()->get(package);
map.remove(qSL("package")); // cannot marshall QObject *
+
+ const auto apps = package->applications(); // these are QObject * (legacy API)
+ QVariantList appList;
+ appList.reserve(apps.size());
+ for (const auto *obj : apps) {
+ QVariantMap app = ApplicationManager::instance()->get(obj->property("id").toString());
+ app.remove(qSL("application")); // cannot marshall QObject *
+ appList.append(app);
+ }
+ map.insert(qSL("applications"), appList);
+
emit taskRequestingInstallationAcknowledge(taskId, map, packageExtraMetaData,
packageExtraSignedMetaData);
});
diff --git a/src/manager-lib/installationtask.cpp b/src/manager-lib/installationtask.cpp
index db2298f1..10f739d1 100644
--- a/src/manager-lib/installationtask.cpp
+++ b/src/manager-lib/installationtask.cpp
@@ -12,6 +12,8 @@
#include "package.h"
#include "packageinfo.h"
#include "packageextractor.h"
+#include "application.h"
+#include "applicationinfo.h"
#include "exception.h"
#include "packagemanager.h"
#include "sudo.h"
@@ -296,6 +298,12 @@ void InstallationTask::checkExtractedFile(const QString &file) Q_DECL_NOEXCEPT_E
// this is a temporary just for the signal emission below
m_tempPackageForAcknowledge.reset(new Package(m_package.get(), Package::BeingInstalled));
+ const auto &applicationInfos = m_package.get()->applications();
+ for (const auto &applicationInfo : applicationInfos) {
+ auto tempApp = new Application(applicationInfo, m_tempPackageForAcknowledge.get());
+ m_tempPackageForAcknowledge->addApplication(tempApp);
+ m_tempApplicationsForAcknowledge.emplace_back(tempApp);
+ }
emit m_pm->taskRequestingInstallationAcknowledge(id(), m_tempPackageForAcknowledge.get(),
m_extractor->installationReport().extraMetaData(),
m_extractor->installationReport().extraSignedMetaData());
diff --git a/src/manager-lib/installationtask.h b/src/manager-lib/installationtask.h
index 93397a2f..2d862358 100644
--- a/src/manager-lib/installationtask.h
+++ b/src/manager-lib/installationtask.h
@@ -18,6 +18,7 @@
QT_BEGIN_NAMESPACE_AM
+class Application;
class Package;
class PackageInfo;
class PackageManager;
@@ -59,6 +60,7 @@ private:
std::unique_ptr<PackageInfo> m_package;
uint m_applicationUid = uint(-1);
std::unique_ptr<Package> m_tempPackageForAcknowledge;
+ std::vector<std::unique_ptr<Application>> m_tempApplicationsForAcknowledge;
// changes to these 4 member variables are protected by m_mutex
PackageExtractor *m_extractor = nullptr;
diff --git a/tests/auto/qml/installer/tst_installer.qml b/tests/auto/qml/installer/tst_installer.qml
index e70b9664..4d7c63fc 100644
--- a/tests/auto/qml/installer/tst_installer.qml
+++ b/tests/auto/qml/installer/tst_installer.qml
@@ -98,7 +98,16 @@ TestCase {
taskRequestingInstallationAcknowledgeSpy.wait(spyTimeout);
compare(taskRequestingInstallationAcknowledgeSpy.count, 1);
compare(taskRequestingInstallationAcknowledgeSpy.signalArguments[0][0], id);
- var pkgId = taskRequestingInstallationAcknowledgeSpy.signalArguments[0][1].id
+
+ // this Package is temporary and it will be gone, as soon as we call
+ // acknowledgePackageInstallation below
+ var pkg = taskRequestingInstallationAcknowledgeSpy.signalArguments[0][1]
+ var pkgId = pkg.id
+ compare(pkgId, "com.pelagicore.test")
+ compare(pkg.applications.length, 1)
+ compare(pkg.applications[0].id, "com.pelagicore.test")
+ compare(pkg.applications[0].runtimeName, "native")
+
taskRequestingInstallationAcknowledgeSpy.clear();
PackageManager.acknowledgePackageInstallation(id);