diff options
Diffstat (limited to 'src/gui/socketapi.cpp')
-rw-r--r-- | src/gui/socketapi.cpp | 66 |
1 files changed, 56 insertions, 10 deletions
diff --git a/src/gui/socketapi.cpp b/src/gui/socketapi.cpp index 82705c59a..bf4e75d3b 100644 --- a/src/gui/socketapi.cpp +++ b/src/gui/socketapi.cpp @@ -32,7 +32,9 @@ #include "account.h" #include "capabilities.h" #include "asserts.h" +#include "guiutility.h" +#include <array> #include <QBitArray> #include <QUrl> #include <QMetaMethod> @@ -45,6 +47,8 @@ #include <QLocalSocket> #include <QStringBuilder> +#include <QClipboard> + #include <sqlite3.h> @@ -436,19 +440,10 @@ void SocketApi::command_SHARE(const QString &localFile, SocketListener *listener return; } - SyncJournalFileRecord rec = shareFolder->journalDb()->getFileRecord(localFileClean); - - bool allowReshare = true; // lets assume the good - if (rec.isValid()) { - // check the permission: Is resharing allowed? - if (!rec._remotePerm.contains('R')) { - allowReshare = false; - } - } const QString message = QLatin1String("SHARE:OK:") + QDir::toNativeSeparators(localFile); listener->sendMessage(message); - emit shareCommandReceived(remotePath, localFileClean, allowReshare); + emit shareCommandReceived(remotePath, localFileClean); } } @@ -514,6 +509,39 @@ void SocketApi::command_SHARE_MENU_TITLE(const QString &, SocketListener *listen listener->sendMessage(QLatin1String("SHARE_MENU_TITLE:") + tr("Share with %1", "parameter is ownCloud").arg(Theme::instance()->appNameGUI())); } +void SocketApi::command_COPY_PRIVATE_LINK(const QString &localFile, SocketListener *) +{ + auto url = getPrivateLinkUrl(localFile); + if (!url.isEmpty()) { + QApplication::clipboard()->setText(url.toString()); + } +} + +void SocketApi::command_EMAIL_PRIVATE_LINK(const QString &localFile, SocketListener *) +{ + auto url = getPrivateLinkUrl(localFile); + if (!url.isEmpty()) { + Utility::openEmailComposer( + tr("I shared something with you"), + url.toString(), + 0); + } +} + +void SocketApi::command_GET_STRINGS(const QString &, SocketListener *listener) +{ + static std::array<std::pair<const char *, QString>, 5> strings { { + { "SHARE_MENU_TITLE", tr("Share with %1...", "parameter is ownCloud").arg(Theme::instance()->appNameGUI()) }, + { "APPNAME", Theme::instance()->appNameGUI() }, + { "CONTEXT_MENU_TITLE", Theme::instance()->appNameGUI() }, + { "COPY_PRIVATE_LINK_TITLE", tr("Copy private link to clipboard") }, + { "EMAIL_PRIVATE_LINK_TITLE", tr("Send private link by email...") }, + } }; + for (auto key_value : strings) { + listener->sendMessage(QString("STRING:%1:%2").arg(key_value.first, key_value.second)); + } +} + QString SocketApi::buildRegisterPathMessage(const QString &path) { QFileInfo fi(path); @@ -522,4 +550,22 @@ QString SocketApi::buildRegisterPathMessage(const QString &path) return message; } +QUrl SocketApi::getPrivateLinkUrl(const QString &localFile) const +{ + Folder *shareFolder = FolderMan::instance()->folderForPath(localFile); + if (!shareFolder) { + qCWarning(lcSocketApi) << "Unknown path" << localFile; + return QUrl(); + } + + const QString localFileClean = QDir::cleanPath(localFile); + const QString file = localFileClean.mid(shareFolder->cleanPath().length() + 1); + + SyncJournalFileRecord rec = shareFolder->journalDb()->getFileRecord(file); + if (rec.isValid()) { + return shareFolder->accountState()->account()->filePermalinkUrl(rec.numericFileId()); + } + return QUrl(); +} + } // namespace OCC |