From a027b61a64160ca5fa1c3bc8d135a38c75a534a7 Mon Sep 17 00:00:00 2001 From: Robert Griebl Date: Mon, 8 May 2023 17:43:55 +0200 Subject: 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 --- src/dbus-lib/packagemanagerdbuscontextadaptor.cpp | 12 ++++++++++++ src/manager-lib/installationtask.cpp | 8 ++++++++ src/manager-lib/installationtask.h | 2 ++ 3 files changed, 22 insertions(+) (limited to 'src') 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 m_package; uint m_applicationUid = uint(-1); std::unique_ptr m_tempPackageForAcknowledge; + std::vector> m_tempApplicationsForAcknowledge; // changes to these 4 member variables are protected by m_mutex PackageExtractor *m_extractor = nullptr; -- cgit v1.2.1