diff --git a/shell_integration/dolphin/ownclouddolphinactionplugin.cpp b/shell_integration/dolphin/ownclouddolphinactionplugin.cpp index dfb2bdff77a..b6087ef4f06 100644 --- a/shell_integration/dolphin/ownclouddolphinactionplugin.cpp +++ b/shell_integration/dolphin/ownclouddolphinactionplugin.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include "ownclouddolphinpluginhelper.h" @@ -53,12 +54,25 @@ class OwncloudDolphinPluginAction : public KAbstractFileItemActionPlugin } )) return {}; - auto act = new QAction(parentWidget); - act->setText(helper->shareActionString()); - connect(act, &QAction::triggered, this, [localFile, helper] { + auto menuaction = new QAction(parentWidget); + menuaction->setText(helper->contextMenuTitle()); + auto menu = new QMenu(parentWidget); + menuaction->setMenu(menu); + + auto shareAction = new QAction(menu); + shareAction->setText(helper->shareActionTitle()); + connect(shareAction, &QAction::triggered, this, [localFile, helper] { helper->sendCommand(QByteArray("SHARE:"+localFile.toUtf8()+"\n")); } ); - return { act }; + menu->addAction(shareAction); + + auto localLinkAction = new QAction(menu); + localLinkAction->setText(helper->copyLocalLinkTitle()); + connect(localLinkAction, &QAction::triggered, this, [localFile, helper] { + helper->sendCommand(QByteArray("COPY_LOCAL_LINK:"+localFile.toUtf8()+"\n")); + }); + menu->addAction(localLinkAction); + return { menuaction }; } }; diff --git a/shell_integration/dolphin/ownclouddolphinpluginhelper.cpp b/shell_integration/dolphin/ownclouddolphinpluginhelper.cpp index 68c2a9c2975..821ea9d2286 100644 --- a/shell_integration/dolphin/ownclouddolphinpluginhelper.cpp +++ b/shell_integration/dolphin/ownclouddolphinpluginhelper.cpp @@ -59,7 +59,7 @@ void OwncloudDolphinPluginHelper::sendCommand(const char* data) void OwncloudDolphinPluginHelper::slotConnected() { - sendCommand("SHARE_MENU_TITLE:\n"); + sendCommand("GET_STRINGS:\n"); } void OwncloudDolphinPluginHelper::tryConnect() @@ -75,6 +75,12 @@ void OwncloudDolphinPluginHelper::tryConnect() _socket.connectToServer(socketPath); } +static QString getString(const QByteArray& line) +{ + auto col = line.lastIndexOf(':'); + return QString::fromUtf8(line.constData() + col + 1, line.size() - col - 1); +} + void OwncloudDolphinPluginHelper::slotReadyRead() { while (_socket.bytesAvailable()) { @@ -92,9 +98,14 @@ void OwncloudDolphinPluginHelper::slotReadyRead() QString file = QString::fromUtf8(line.constData() + col + 1, line.size() - col - 1); _paths.append(file); continue; - } else if (line.startsWith("SHARE_MENU_TITLE:")) { - auto col = line.indexOf(':'); - _shareActionString = QString::fromUtf8(line.constData() + col + 1, line.size() - col - 1); + } else if (line.startsWith("STRING:CONTEXT_MENU_TITLE:")) { + _contextMenuTitle = getString(line); + continue; + } else if (line.startsWith("STRING:SHARE_MENU_TITLE:")) { + _shareActionTitle = getString(line); + continue; + } else if (line.startsWith("STRING:COPY_LOCAL_LINK_TITLE:")) { + _copyLocalLinkTitle = getString(line); continue; } emit commandRecieved(line); diff --git a/shell_integration/dolphin/ownclouddolphinpluginhelper.h b/shell_integration/dolphin/ownclouddolphinpluginhelper.h index 26762caaf44..5f18acdabb0 100644 --- a/shell_integration/dolphin/ownclouddolphinpluginhelper.h +++ b/shell_integration/dolphin/ownclouddolphinpluginhelper.h @@ -28,11 +28,14 @@ class OWNCLOUDDOLPHINPLUGINHELPER_EXPORT OwncloudDolphinPluginHelper : public QO public: static OwncloudDolphinPluginHelper *instance(); - QString shareActionString() const { return _shareActionString; } bool isConnected() const; void sendCommand(const char *data); QVector paths() const { return _paths; } + QString contextMenuTitle() const { return _contextMenuTitle; } + QString shareActionTitle() const { return _shareActionTitle; } + QString copyLocalLinkTitle() const { return _copyLocalLinkTitle; } + signals: void commandRecieved(const QByteArray &cmd); @@ -47,6 +50,9 @@ class OWNCLOUDDOLPHINPLUGINHELPER_EXPORT OwncloudDolphinPluginHelper : public QO QLocalSocket _socket; QByteArray _line; QVector _paths; - QString _shareActionString; QBasicTimer _connectTimer; + + QString _contextMenuTitle; + QString _shareActionTitle; + QString _copyLocalLinkTitle; };