From a2e6632759f4e07abea37c244fd6eafa9cbfe9ce Mon Sep 17 00:00:00 2001 From: Aleix Pol Date: Sat, 14 Jun 2014 18:45:53 +0200 Subject: [PATCH] Introduce a fileitemactionplugin This way we can send files to all devices. --- CMakeLists.txt | 1 + fileitemactionplugin/CMakeLists.txt | 6 ++ .../kdeconnectsendfile.desktop | 9 +++ fileitemactionplugin/sendfileitemaction.cpp | 79 +++++++++++++++++++ fileitemactionplugin/sendfileitemaction.h | 43 ++++++++++ 5 files changed, 138 insertions(+) create mode 100644 fileitemactionplugin/CMakeLists.txt create mode 100644 fileitemactionplugin/kdeconnectsendfile.desktop create mode 100644 fileitemactionplugin/sendfileitemaction.cpp create mode 100644 fileitemactionplugin/sendfileitemaction.h diff --git a/CMakeLists.txt b/CMakeLists.txt index c2a5dc17d..5b916d929 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,5 +27,6 @@ add_subdirectory(kded) add_subdirectory(plugins) add_subdirectory(plasmoid) add_subdirectory(cli) +add_subdirectory(fileitemactionplugin) add_subdirectory(tests) diff --git a/fileitemactionplugin/CMakeLists.txt b/fileitemactionplugin/CMakeLists.txt new file mode 100644 index 000000000..3043f6954 --- /dev/null +++ b/fileitemactionplugin/CMakeLists.txt @@ -0,0 +1,6 @@ +include_directories(${CMAKE_SOURCE_DIR}) + +kde4_add_plugin(kdeconnectfiletiemaction sendfileitemaction.cpp) +target_link_libraries(kdeconnectfiletiemaction ${KDE4_KIO_LIBS} kdeconnectinterfaces) +install(TARGETS kdeconnectfiletiemaction DESTINATION ${PLUGIN_INSTALL_DIR}) +install(FILES kdeconnectsendfile.desktop DESTINATION ${SERVICES_INSTALL_DIR}) diff --git a/fileitemactionplugin/kdeconnectsendfile.desktop b/fileitemactionplugin/kdeconnectsendfile.desktop new file mode 100644 index 000000000..aa65875b4 --- /dev/null +++ b/fileitemactionplugin/kdeconnectsendfile.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Type=Service +Name=Send file via KDE Connect service +X-KDE-Library=kdeconnectfiletiemaction +X-KDE-Submenu=Connect + +Icon=preferences-system-network +ServiceTypes=KFileItemAction/Plugin +MimeType=application/octet-stream diff --git a/fileitemactionplugin/sendfileitemaction.cpp b/fileitemactionplugin/sendfileitemaction.cpp new file mode 100644 index 000000000..e2b71e652 --- /dev/null +++ b/fileitemactionplugin/sendfileitemaction.cpp @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2011 Alejandro Fiestas Olivares + * Copyright (C) 2014 Aleix Pol Gonzalez + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program 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 + * General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include "sendfileitemaction.h" +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include + +K_PLUGIN_FACTORY(SendFileItemActionFactory, registerPlugin();) +K_EXPORT_PLUGIN(SendFileItemActionFactory("SendFileItemAction", "kdeconnectfiletiemaction")) + +SendFileItemAction::SendFileItemAction(QObject* parent, const QVariantList& ): KFileItemActionPlugin(parent) +{ +} + +QList SendFileItemAction::actions(const KFileItemListProperties& fileItemInfos, QWidget* parentWidget) const +{ + DevicesModel m; + + QAction *menuAction = new QAction(QIcon::fromTheme("preferences-system-network"), i18n("Send via KDE Connect"), parentWidget); + QMenu *menu = new QMenu(); + + for(int i = 0; iisReachable() && dev->isPaired()) { + QAction* action = menu->addAction(dev->name(), this, SLOT(sendFile())); + action->setProperty("id", idx.data(DevicesModel::IdModelRole)); + action->setProperty("urls", QVariant::fromValue(fileItemInfos.urlList())); + action->setProperty("parentWidget", QVariant::fromValue(parentWidget)); + } + } + + menuAction->setMenu(menu); + + return QList() << menuAction; +} + +void SendFileItemAction::sendFile() +{ + QList urls = sender()->property("urls").value(); + foreach(const QUrl& url, urls) { + QDBusMessage msg = QDBusMessage::createMethodCall("org.kde.kdeconnect", "/modules/kdeconnect/devices/"+sender()->property("id").toString()+"/share", "org.kde.kdeconnect.device.share", "shareUrl"); + msg.setArguments(QVariantList() << url.toString()); + + QDBusConnection::sessionBus().call(msg); + } +} diff --git a/fileitemactionplugin/sendfileitemaction.h b/fileitemactionplugin/sendfileitemaction.h new file mode 100644 index 000000000..d5dd74b9c --- /dev/null +++ b/fileitemactionplugin/sendfileitemaction.h @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2011 Alejandro Fiestas Olivares + * Copyright (C) 2014 Aleix Pol Gonzalez + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program 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 + * General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifndef SENDFILEITEMACTION_H +#define SENDFILEITEMACTION_H + +#include +#include + +class QAction; +class KFileItemListProperties; +class QWidget; + +class SendFileItemAction : public KFileItemActionPlugin +{ +Q_OBJECT +public: + SendFileItemAction(QObject* parent, const QVariantList &args); + virtual QList< QAction* > actions(const KFileItemListProperties& fileItemInfos, QWidget* parentWidget) const; + +private Q_SLOTS: + void sendFile(); + +}; + +#endif // SENDFILEITEMACTION_H