From: Michael Schuster Date: Tue, 3 Mar 2020 17:45:58 +0000 (+0100) Subject: Fix Explorer pinning: Add fallbacks for Shell commands (fixes #1599) X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~222^2^2~335^2~1 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=ff642085b412a5614329c7ac207bb2516759a864;p=nextcloud-desktop.git Fix Explorer pinning: Add fallbacks for Shell commands (fixes #1599) See: #1599 Signed-off-by: Michael Schuster --- diff --git a/src/gui/socketapi.cpp b/src/gui/socketapi.cpp index 7967312b8..45ed44982 100644 --- a/src/gui/socketapi.cpp +++ b/src/gui/socketapi.cpp @@ -52,6 +52,7 @@ #include #include +#include #include @@ -291,6 +292,12 @@ void SocketApi::slotReadSocket() int indexOfMethod = staticMetaObject.indexOfMethod(functionWithArguments); QString argument = line.remove(0, command.length() + 1); + if (indexOfMethod == -1) { + // Fallback: Try upper-case command + functionWithArguments = "command_" + command.toUpper() + "(QString,SocketListener*)"; + indexOfMethod = staticMetaObject.indexOfMethod(functionWithArguments); + } + if (indexOfMethod != -1) { staticMetaObject.method(indexOfMethod).invoke(this, Q_ARG(QString, argument), Q_ARG(SocketListener *, listener)); } else { @@ -621,6 +628,24 @@ void SocketApi::command_COPY_PUBLIC_LINK(const QString &localFile, SocketListene job->run(); } +// Windows Shell / Explorer pinning fallbacks, see issue: https://github.com/nextcloud/desktop/issues/1599 +#ifdef Q_OS_WIN +void SocketApi::command_COPYASPATH(const QString &localFile, SocketListener *) +{ + QApplication::clipboard()->setText(localFile); +} + +void SocketApi::command_OPENNEWWINDOW(const QString &localFile, SocketListener *) +{ + QDesktopServices::openUrl(QUrl::fromLocalFile(localFile)); +} + +void SocketApi::command_OPEN(const QString &localFile, SocketListener *socketListener) +{ + command_OPENNEWWINDOW(localFile, socketListener); +} +#endif + // Fetches the private link url asynchronously and then calls the target slot void SocketApi::fetchPrivateLinkUrlHelper(const QString &localFile, const std::function &targetFun) { diff --git a/src/gui/socketapi.h b/src/gui/socketapi.h index 40adb5700..b31294c5b 100644 --- a/src/gui/socketapi.h +++ b/src/gui/socketapi.h @@ -106,6 +106,13 @@ private: Q_INVOKABLE void command_EMAIL_PRIVATE_LINK(const QString &localFile, SocketListener *listener); Q_INVOKABLE void command_OPEN_PRIVATE_LINK(const QString &localFile, SocketListener *listener); + // Windows Shell / Explorer pinning fallbacks, see issue: https://github.com/nextcloud/desktop/issues/1599 +#ifdef Q_OS_WIN + Q_INVOKABLE void command_COPYASPATH(const QString &localFile, SocketListener *listener); + Q_INVOKABLE void command_OPENNEWWINDOW(const QString &localFile, SocketListener *listener); + Q_INVOKABLE void command_OPEN(const QString &localFile, SocketListener *listener); +#endif + // Fetch the private link and call targetFun void fetchPrivateLinkUrlHelper(const QString &localFile, const std::function &targetFun);