[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kpackage] /: Emit signals when a package is installed/uninstalled
From:       David Edmundson <null () kde ! org>
Date:       2018-09-13 9:36:12
Message-ID: E1g0O2m-00037N-Ih () code ! kde ! org
[Download RAW message or body]

Git commit b42973d964df159119467030689f36cc005715b5 by David Edmundson.
Committed on 13/09/2018 at 09:36.
Pushed by davidedmundson into branch 'master'.

Emit signals when a package is installed/uninstalled

Summary:
This is needed for situations such as Plasma reloading the wallpaper
plugins when one is installed.

We want something with more granularity than arbitrarily reloading when
the KNS dialog closes, and less horrible than file watchers.

The service type (for example Plasma/Wallpaper) makes up part of the
path for optimal filtering.

Test Plan: Ran dbus-monitor and kpacktool5 -r / -i

Reviewers: #plasma

Subscribers: kde-frameworks-devel

Tags: #frameworks

Differential Revision: https://phabricator.kde.org/D15177

M  +1    -1    CMakeLists.txt
M  +1    -0    src/kpackage/CMakeLists.txt
M  +32   -2    src/kpackage/private/packagejob.cpp

https://commits.kde.org/kpackage/b42973d964df159119467030689f36cc005715b5

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0528d97..924cb93 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -45,7 +45,7 @@ endif()
 
 set (REQUIRED_QT_VERSION 5.8.0)
 
-find_package(Qt5 ${REQUIRED_QT_VERSION} REQUIRED NO_MODULE COMPONENTS Core)
+find_package(Qt5 ${REQUIRED_QT_VERSION} REQUIRED NO_MODULE COMPONENTS Core DBus)
 
 find_package(KF5Archive ${KF5_DEP_VERSION} REQUIRED)
 find_package(KF5I18n ${KF5_DEP_VERSION} REQUIRED)
diff --git a/src/kpackage/CMakeLists.txt b/src/kpackage/CMakeLists.txt
index 2e9205f..34f4869 100644
--- a/src/kpackage/CMakeLists.txt
+++ b/src/kpackage/CMakeLists.txt
@@ -36,6 +36,7 @@ add_library(KF5::Package ALIAS KF5Package)
 target_link_libraries(KF5Package
 PUBLIC
      #KF5::Service # For kplugininfo.h and kservice.h
+     Qt5::DBus
      KF5::CoreAddons
 PRIVATE
      KF5::Archive
diff --git a/src/kpackage/private/packagejob.cpp \
b/src/kpackage/private/packagejob.cpp index 50bcb1d..d350af3 100644
--- a/src/kpackage/private/packagejob.cpp
+++ b/src/kpackage/private/packagejob.cpp
@@ -25,6 +25,9 @@
 
 #include "kpackage_debug.h"
 
+#include <QDBusConnection>
+#include <QDBusMessage>
+
 namespace KPackage
 {
 class PackageJobPrivate
@@ -48,8 +51,6 @@ PackageJob::PackageJob(Package *package, QObject *parent) :
         }
     });
 
-    connect(d->thread, SIGNAL(finished(bool,QString)),
-            SLOT(slotFinished(bool,QString)), Qt::QueuedConnection);
     connect(d->thread, &PackageJobThread::installPathChanged, this,
             [this](const QString &installPath) {
                 if (d->package) {
@@ -83,16 +84,45 @@ void PackageJob::start()
 
 void PackageJob::install(const QString &src, const QString &dest)
 {
+
+    connect(d->thread, &PackageJobThread::finished, this, [=](bool ok, const QString \
&error) { +        if (ok) {
+            const QString pluginId = d->package->metadata().pluginId();
+            const QStringList serviceTypes = d->package->metadata().serviceTypes();
+            for (auto packageType: serviceTypes) {
+                auto msg = QDBusMessage::createSignal(QStringLiteral("/KPackage/") + \
packageType, QStringLiteral("org.kde.plasma.kpackage"), \
QStringLiteral("packageInstalled")); +                msg.setArguments({pluginId});
+                QDBusConnection::sessionBus().send(msg);
+            }
+        }
+        slotFinished(ok, error);
+    }, Qt::QueuedConnection);
     d->thread->install(src, dest);
 }
 
 void PackageJob::update(const QString &src, const QString &dest)
 {
+    connect(d->thread, &PackageJobThread::finished, this, [=](bool ok, const QString \
&error) { +        slotFinished(ok, error);
+    }, Qt::QueuedConnection);
     d->thread->update(src, dest);
 }
 
 void PackageJob::uninstall(const QString &installationPath)
 {
+    //capture first as uninstalling wipes d->package
+    const QString pluginId = d->package->metadata().pluginId();
+    const QStringList serviceTypes = d->package->metadata().serviceTypes();
+    connect(d->thread, &PackageJobThread::finished, this, [=](bool ok, const QString \
&error) { +        if (ok) {
+            for (auto packageType: serviceTypes) {
+                auto msg = QDBusMessage::createSignal(QStringLiteral("/KPackage/") + \
packageType, QStringLiteral("org.kde.plasma.kpackage"), \
QStringLiteral("packageUninstalled")); +                msg.setArguments({pluginId});
+                QDBusConnection::sessionBus().send(msg);
+            }
+        }
+        slotFinished(ok, error);
+    }, Qt::QueuedConnection);
     d->thread->uninstall(installationPath);
 }
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic