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-15 17:54:25 +0200
commitde38b364cb3ffd52681cc3bba0c886584de8d46d (patch)
tree6696a7a67ae87518c1a62516961e5d879bf5a9d8
parent66d247ca5ba26a061bf0bcfe4f2bb3b66c193ee9 (diff)
downloadqtapplicationmanager-de38b364cb3ffd52681cc3bba0c886584de8d46d.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 Reviewed-by: Dominik Holland <dominik.holland@qt.io> (cherry picked from commit a027b61a64160ca5fa1c3bc8d135a38c75a534a7)
-rw-r--r--src/dbus-lib/packagemanagerdbuscontextadaptor.cpp16
-rw-r--r--src/manager-lib/installationtask.cpp10
-rw-r--r--src/manager-lib/installationtask.h6
-rw-r--r--tests/qml/installer/tst_installer.qml11
4 files changed, 38 insertions, 5 deletions
diff --git a/src/dbus-lib/packagemanagerdbuscontextadaptor.cpp b/src/dbus-lib/packagemanagerdbuscontextadaptor.cpp
index 98fc664b..2247214b 100644
--- a/src/dbus-lib/packagemanagerdbuscontextadaptor.cpp
+++ b/src/dbus-lib/packagemanagerdbuscontextadaptor.cpp
@@ -44,6 +44,7 @@
#include "package.h"
#include "packagemanager.h"
#include "io.qt.packagemanager_adaptor.h"
+#include "applicationmanager.h"
#include "dbuspolicy.h"
#include "exception.h"
#include "logging.h"
@@ -88,8 +89,19 @@ PackageManagerAdaptor::PackageManagerAdaptor(QObject *parent)
const QVariantMap &packageExtraSignedMetaData) {
auto map = PackageManager::instance()->get(package);
map.remove(qSL("package")); // cannot marshall QObject *
- taskRequestingInstallationAcknowledge(taskId, map, packageExtraMetaData,
- packageExtraSignedMetaData);
+
+ 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);
});
connect(pm, &PackageManager::taskStarted,
this, &PackageManagerAdaptor::taskStarted);
diff --git a/src/manager-lib/installationtask.cpp b/src/manager-lib/installationtask.cpp
index c9b487d2..7c53311a 100644
--- a/src/manager-lib/installationtask.cpp
+++ b/src/manager-lib/installationtask.cpp
@@ -50,6 +50,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"
@@ -331,7 +333,13 @@ void InstallationTask::checkExtractedFile(const QString &file) Q_DECL_NOEXCEPT_E
qCDebug(LogInstaller) << "emit taskRequestingInstallationAcknowledge" << id() << "for package" << m_package->id();
// this is a temporary just for the signal emission below
- m_tempPackageForAcknowledge.reset(new Package(m_package.data(), Package::BeingInstalled));
+ 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 e16ee5fb..dc9e88a6 100644
--- a/src/manager-lib/installationtask.h
+++ b/src/manager-lib/installationtask.h
@@ -51,8 +51,11 @@
#include <QtAppManManager/asynchronoustask.h>
#include <QtAppManManager/scopeutilities.h>
+#include <memory>
+
QT_BEGIN_NAMESPACE_AM
+class Application;
class Package;
class PackageInfo;
class PackageManager;
@@ -94,7 +97,8 @@ private:
bool m_managerApproval = false;
QScopedPointer<PackageInfo> m_package;
uint m_applicationUid = uint(-1);
- QScopedPointer<Package> m_tempPackageForAcknowledge;
+ 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/qml/installer/tst_installer.qml b/tests/qml/installer/tst_installer.qml
index bc81b2d6..18666c19 100644
--- a/tests/qml/installer/tst_installer.qml
+++ b/tests/qml/installer/tst_installer.qml
@@ -136,7 +136,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);