]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Dolphin Services: Launch Deb/Rpm archives with QDesktopServices
authorAlexander Lohnau <alexander.lohnau@gmx.de>
Mon, 13 Apr 2020 13:29:50 +0000 (15:29 +0200)
committerAlexander Lohnau <alexander.lohnau@gmx.de>
Mon, 13 Apr 2020 19:23:52 +0000 (21:23 +0200)
Summary:
When you are inside the services store and you choose to install a deb/rpm package
they open in the default application (mostlikely a package installer utility like discover).

PS: I have written some ideas/questions, maybe you can comment on them :-) ?

Test Plan:
Tests still pass, try out what was described in the summary.
A product which has a deb/rpm package is for example: `Jetbrains Dolphin Plugin`

Reviewers: #dolphin, elvisangelaccio, ngraham, aspotashev

Subscribers: kfm-devel

Tags: #dolphin

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

src/settings/services/servicemenuinstaller/CMakeLists.txt
src/settings/services/servicemenuinstaller/servicemenuinstaller.cpp

index b5591cad70ce258369e279e8abf9649463aeab96..9888999368267e519553bc125e1d4c3adec2e440 100644 (file)
@@ -4,6 +4,7 @@ add_definitions(-DTRANSLATION_DOMAIN=\"dolphin_servicemenuinstaller\")
 add_executable(servicemenuinstaller servicemenuinstaller.cpp)
 target_link_libraries(servicemenuinstaller PRIVATE
     Qt5::Core
+    Qt5::Gui
     KF5::I18n
 )
 install(TARGETS servicemenuinstaller ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
index e3866a6ae054b5e62014b99ee9768126491e3a1d..73882e8c2f73643d8313283fea9ead234277f7b7 100644 (file)
@@ -25,6 +25,9 @@
 #include <QDirIterator>
 #include <QCommandLineParser>
 #include <QMimeDatabase>
+#include <QUrl>
+#include <QDesktopServices>
+#include <QGuiApplication>
 
 #include <KLocalizedString>
 
@@ -201,6 +204,10 @@ bool cmdInstall(const QString &archive, QString &errorText)
             return false;
         }
     } else {
+        const QStringList binaryPackages = {"application/vnd.debian.binary-package", "application/x-rpm"};
+        if (binaryPackages.contains(QMimeDatabase().mimeTypeForFile(archive).name())) {
+            return QDesktopServices::openUrl(QUrl(archive));
+        }
         const QString dir = generateDirPath(archive);
         if (QFile::exists(dir)) {
             if (!QDir(dir).removeRecursively()) {
@@ -318,7 +325,7 @@ bool cmdUninstall(const QString &archive, QString &errorText)
 
 int main(int argc, char *argv[])
 {
-    QCoreApplication app(argc, argv);
+    QGuiApplication app(argc, argv);
 
     QCommandLineParser parser;
     parser.addPositionalArgument(QStringLiteral("command"), i18nc("@info:shell", "Command to execute: install or uninstall."));