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

List:       kde-commits
Subject:    [discover/Plasma/5.12] libdiscover/backends/PackageKitBackend: Have PackageKit only execute files in
From:       Aleix Pol <null () kde ! org>
Date:       2018-01-25 13:10:07
Message-ID: E1eehI7-00067y-OI () code ! kde ! org
[Download RAW message or body]

Git commit 59a93daa2fbe7099788729a02c6ea44669e4844d by Aleix Pol.
Committed on 25/01/2018 at 13:05.
Pushed by apol into branch 'Plasma/5.12'.

Have PackageKit only execute files installed by the package

BUG: 389036

M  +18   -7    libdiscover/backends/PackageKitBackend/AppPackageKitResource.cpp

https://commits.kde.org/discover/59a93daa2fbe7099788729a02c6ea44669e4844d

diff --git a/libdiscover/backends/PackageKitBackend/AppPackageKitResource.cpp \
b/libdiscover/backends/PackageKitBackend/AppPackageKitResource.cpp index \
                91211b44..14270235 100644
--- a/libdiscover/backends/PackageKitBackend/AppPackageKitResource.cpp
+++ b/libdiscover/backends/PackageKitBackend/AppPackageKitResource.cpp
@@ -31,6 +31,8 @@
 #include <QStandardPaths>
 #include <QDebug>
 #include "config-paths.h"
+#include <PackageKit/Daemon>
+#include <utils.h>
 
 AppPackageKitResource::AppPackageKitResource(const AppStream::Component& data, const \
QString &packageName, PackageKitBackend* parent)  : PackageKitResource(packageName, \
QString(), parent) @@ -182,12 +184,21 @@ void AppPackageKitResource::fetchChangelog()
 
 void AppPackageKitResource::invokeApplication() const
 {
-    const QStringList exes = \
                m_appdata.provided(AppStream::Provided::KindBinary).items();
-    if (exes.isEmpty()) {
-        const auto servicePath = \
                QStandardPaths::locate(QStandardPaths::ApplicationsLocation, \
                m_appdata.id());
-        QProcess::startDetached(QStringLiteral(CMAKE_INSTALL_FULL_LIBEXECDIR_KF5 \
                "/discover/runservice"), {servicePath});
-    } else {
-        QProcess::startDetached(exes.constFirst());
-    }
+    auto trans = PackageKit::Daemon::getFiles({installedPackageId()});
+    connect(trans, &PackageKit::Transaction::files, this, [this](const QString \
&/*packageID*/, const QStringList &filenames) { +        const auto allServices = \
QStandardPaths::locateAll(QStandardPaths::ApplicationsLocation, m_appdata.id()); +    \
if (!allServices.isEmpty()) { +            const auto packageServices = \
kFilter<QStringList>(allServices, [filenames](const QString &file) { return \
filenames.contains(file); }); +            \
QProcess::startDetached(QStringLiteral(CMAKE_INSTALL_FULL_LIBEXECDIR_KF5 \
"/discover/runservice"), {packageServices}); +        } else {
+            const QStringList exes = \
m_appdata.provided(AppStream::Provided::KindBinary).items(); +            const auto \
packageExecutables = kFilter<QStringList>(allServices, [filenames](const QString \
&exe) { return filenames.contains(QLatin1Char('/') + exe); }); +            if \
(packageExecutables.isEmpty()) { +                qWarning() << "Could not find any \
executables" << exes << filenames; +                return;
+            }
+            QProcess::startDetached(exes.constFirst());
+        }
+    });
 }
 


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

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