diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,6 +40,8 @@ XmlGui ) +find_package(KF5 COMPONENTS Purpose) + #option(QTINDICATE_DISABLE "Disable support for notifications via indicator") find_package(Qca-qt5 REQUIRED) diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -21,3 +21,8 @@ ELSEIF(KF5WebKit_FOUND AND KF5Parts_FOUND) message(WARNING "Optional dependency \"KF5::WebKit\" or \"KF5::Parts\" NOT FOUND, won't build \"Konqueror Choqok\" plugin") ENDIF(KF5WebKit_FOUND AND KF5Parts_FOUND) + +if(KF5Purpose_FOUND) + message(STATUS "Found KF5::Purpose: Will build Share plugin") + add_subdirectory(purpose) +endif() diff --git a/plugins/konqueror/CMakeLists.txt b/plugins/konqueror/CMakeLists.txt --- a/plugins/konqueror/CMakeLists.txt +++ b/plugins/konqueror/CMakeLists.txt @@ -22,4 +22,4 @@ install(TARGETS konqchoqokplugin DESTINATION ${PLUGIN_INSTALL_DIR}/kf5/parts) install(FILES konqchoqok.rc DESTINATION ${KXMLGUI_INSTALL_DIR}/konqchoqokplugin) install(FILES konqchoqok.desktop DESTINATION ${SERVICES_INSTALL_DIR}) -install(FILES choqok_share.desktop choqok_upload.desktop DESTINATION ${SERVICES_INSTALL_DIR}/ServiceMenus) +install(FILES choqok_share.desktop DESTINATION ${SERVICES_INSTALL_DIR}/ServiceMenus) diff --git a/plugins/konqueror/choqok_upload.desktop b/plugins/konqueror/choqok_upload.desktop deleted file mode 100644 --- a/plugins/konqueror/choqok_upload.desktop +++ /dev/null @@ -1,46 +0,0 @@ -[Desktop Entry] -Actions=ChoqokUploadFile; -Type=Service -Icon= -Name= -X-KDE-ServiceTypes=KonqPopupMenu/Plugin,image/* -X-KDE-ExcludeServiceTypes=kdedevice/* - -[Desktop Action ChoqokUploadFile] -Exec=qdbus org.kde.choqok / uploadFile %U -Icon=choqok -Name=Upload with Choqok -Name[ar]=ارفع بِ‍«چغوك» -Name[bg]=Качване с Choqok -Name[bs]=Slanje datoteke Choqok-om -Name[ca]=Puja amb el Choqok -Name[ca@valencia]=Puja amb el Choqok -Name[cs]=Odeslat pomocí Choqok -Name[da]=Upload med Choqok -Name[de]=Mit Choqok hochladen -Name[el]=Αποστολή με Choqok -Name[en_GB]=Upload with Choqok -Name[es]=Enviar con Choqok -Name[et]=Üleslaadimine Choqokiga -Name[fi]=Lähetä Choqokilla -Name[fr]=Envoi avec Choqok -Name[gl]=Envío co Choqok -Name[hu]=Feltöltés Choqokkal -Name[it]=Carica con Choqok -Name[km]=ផ្ទុក​ឡើង​ជាមួយ​​ Choqok -Name[nb]=Last opp med Choqok -Name[nds]=Mit Choqok hoochladen -Name[nl]=Met Choqok uploaden -Name[nn]=Last opp via Choqok -Name[pa]=ਚੋਕਿਉਕ ਨਾਲ ਅੱਪਲੋਡ -Name[pl]=Wyślij za pomocą Choqok -Name[pt]=Enviar com o Choqok -Name[pt_BR]=Enviar com o Choqok -Name[ru]=Загрузить файл с помощью Choqok -Name[sl]=Pošlji s Choqok-om -Name[sv]=Ladda upp med Choqok -Name[tr]=Choqok ile Yükle -Name[uk]=Вивантажити за допомогою Choqok -Name[x-test]=xxUpload with Choqokxx -Name[zh_CN]=用 Choqok 上传 -Name[zh_TW]=用 Choqok 上傳 diff --git a/plugins/purpose/CMakeLists.txt b/plugins/purpose/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/plugins/purpose/CMakeLists.txt @@ -0,0 +1,9 @@ +set(purposeplugin_SRCS purposeplugin.cpp) + +qt5_add_dbus_interface(purposeplugin_SRCS org.kde.choqok.xml choqokinterface) + +add_library(purposeplugin MODULE ${purposeplugin_SRCS}) + +target_link_libraries(purposeplugin Qt5::DBus KF5::Purpose) + +install(TARGETS purposeplugin DESTINATION ${PLUGIN_INSTALL_DIR}/kf5/purpose) diff --git a/plugins/purpose/org.kde.choqok.xml b/plugins/purpose/org.kde.choqok.xml new file mode 100644 --- /dev/null +++ b/plugins/purpose/org.kde.choqok.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +" diff --git a/plugins/purpose/purposeplugin.cpp b/plugins/purpose/purposeplugin.cpp new file mode 100644 --- /dev/null +++ b/plugins/purpose/purposeplugin.cpp @@ -0,0 +1,79 @@ +/* + Copyright 2019 Nicolas Fella + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library. If not, see . +*/ + + +#include +#include +#include + +#include + +#include + +#include "choqokinterface.h" +EXPORT_SHARE_VERSION + +class ChoqokJob : public Purpose::Job +{ + Q_OBJECT + public: + ChoqokJob(QObject* parent) + : Purpose::Job(parent) + {} + + QStringList arrayToList(const QJsonArray& array) + { + QStringList ret; + for (const QJsonValue& val : array) { + ret += val.toString(); + } + return ret; + } + + void start() override + { + OrgKdeChoqokInterface iface(QStringLiteral("org.kde.choqok"), QStringLiteral("/"), QDBusConnection::sessionBus(), this); + const QStringList urls = arrayToList(data().value(QStringLiteral("urls")).toArray()); + + for (const QString url : urls) { + iface.uploadFile(url); + } + + QTimer::singleShot(0, this, [this]() { + emitResult(); + }); + } +}; + + +class Q_DECL_EXPORT PurposePlugin : public Purpose::PluginBase +{ + + Q_OBJECT +public: + PurposePlugin(QObject* p, const QVariantList& ) : Purpose::PluginBase(p) {} + + Purpose::Job* createJob() const override + { + return new ChoqokJob(nullptr); + } + +}; + +K_PLUGIN_CLASS_WITH_JSON(PurposePlugin, "purposeplugin.json") + +#include "purposeplugin.moc" diff --git a/plugins/purpose/purposeplugin.json b/plugins/purpose/purposeplugin.json new file mode 100644 --- /dev/null +++ b/plugins/purpose/purposeplugin.json @@ -0,0 +1,24 @@ +{ + "KPlugin": { + "Authors": [ + { + "Name": "Nicolas Fella" + } + ], + "Category": "Utilities", + "Description": "Upload with Choqok", + "Icon": "choqok", + "License": "GPL", + "Name": "Upload with Choqok", + "X-Purpose-ActionDisplay": "Upload with Choqok..." + }, + "X-Purpose-Configuration": [], + "X-Purpose-Constraints": [ + [ + "mimeType:image/*" + ] + ], + "X-Purpose-PluginTypes": [ + "Export" + ] +}