diff options
author | alex-z <blackslayer4@gmail.com> | 2022-07-19 13:05:20 +0300 |
---|---|---|
committer | alex-z <blackslayer4@gmail.com> | 2022-08-03 11:38:33 +0300 |
commit | d42d3c057f0daacea92aed9fa97263bdc8b38841 (patch) | |
tree | 761ac43e744c819d159b42ce3518566ebbaec31f /src/common | |
parent | 4f85f7a45dfa3a5a44047f383dfd53b4c776a5b7 (diff) |
Implement URI handler for local file editing
Signed-off-by: alex-z <blackslayer4@gmail.com>
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/utility.h | 5 | ||||
-rw-r--r-- | src/common/utility_mac.cpp | 2 | ||||
-rw-r--r-- | src/common/utility_unix.cpp | 23 | ||||
-rw-r--r-- | src/common/utility_win.cpp | 2 |
4 files changed, 32 insertions, 0 deletions
diff --git a/src/common/utility.h b/src/common/utility.h index 98dc3030a..6179be9d5 100644 --- a/src/common/utility.h +++ b/src/common/utility.h @@ -247,6 +247,11 @@ namespace Utility { */ OCSYNC_EXPORT QString getCurrentUserName(); + /** + * @brief Registers the desktop app as a handler for a custom URI to enable local editing + */ + OCSYNC_EXPORT void registerUriHandlerForLocalEditing(); + #ifdef Q_OS_WIN OCSYNC_EXPORT bool registryKeyExists(HKEY hRootKey, const QString &subKey); OCSYNC_EXPORT QVariant registryGetKeyValue(HKEY hRootKey, const QString &subKey, const QString &valueName); diff --git a/src/common/utility_mac.cpp b/src/common/utility_mac.cpp index d3a3d480a..9a220527f 100644 --- a/src/common/utility_mac.cpp +++ b/src/common/utility_mac.cpp @@ -141,4 +141,6 @@ QString Utility::getCurrentUserName() return {}; } +void Utility::registerUriHandlerForLocalEditing() { /* URI handler is registered via MacOSXBundleInfo.plist.in */ } + } // namespace OCC diff --git a/src/common/utility_unix.cpp b/src/common/utility_unix.cpp index 887213f09..27e66dc73 100644 --- a/src/common/utility_unix.cpp +++ b/src/common/utility_unix.cpp @@ -19,6 +19,7 @@ #include <QStandardPaths> #include <QtGlobal> +#include <QProcess> namespace OCC { @@ -113,4 +114,26 @@ QString Utility::getCurrentUserName() return {}; } +void Utility::registerUriHandlerForLocalEditing() +{ + const auto appImagePath = qEnvironmentVariable("APPIMAGE"); + const auto runningInsideAppImage = !appImagePath.isNull() && QFile::exists(appImagePath); + + if (!runningInsideAppImage) { + // only register x-scheme-handler if running inside appImage + return; + } + + // mirall.desktop.in must have an x-scheme-handler mime type specified + const QString desktopFileName = QLatin1String(LINUX_APPLICATION_ID) + QLatin1String(".desktop"); + QProcess process; + const QStringList args = { + QLatin1String("default"), + desktopFileName, + QStringLiteral("x-scheme-handler/%1").arg(QStringLiteral(APPLICATION_URI_HANDLER_SCHEME)) + }; + process.start(QStringLiteral("xdg-mime"), args, QIODevice::ReadOnly); + process.waitForFinished(); +} + } // namespace OCC diff --git a/src/common/utility_win.cpp b/src/common/utility_win.cpp index ed322669b..37b348660 100644 --- a/src/common/utility_win.cpp +++ b/src/common/utility_win.cpp @@ -448,6 +448,8 @@ QString Utility::getCurrentUserName() return QString::fromWCharArray(username); } +void Utility::registerUriHandlerForLocalEditing() { /* URI handler is registered via Nextcloud.wxs */ } + Utility::NtfsPermissionLookupRAII::NtfsPermissionLookupRAII() { qt_ntfs_permission_lookup++; |