diff options
-rw-r--r-- | src/dbus-lib/packagemanagerdbuscontextadaptor.cpp | 12 | ||||
-rw-r--r-- | src/manager-lib/installationtask.cpp | 8 | ||||
-rw-r--r-- | src/manager-lib/installationtask.h | 2 | ||||
-rw-r--r-- | tests/auto/qml/installer/tst_installer.qml | 11 |
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); |