From: Christian Kamm Date: Fri, 26 Jan 2018 07:56:50 +0000 (+0100) Subject: Placeholders: Download from shell integration X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~12^2~21^2~468^2~612 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=d6078f958b909b6aaecd634ae3c930361974aea5;p=nextcloud-desktop.git Placeholders: Download from shell integration --- diff --git a/src/gui/socketapi.cpp b/src/gui/socketapi.cpp index 67d815788..4ab9bead7 100644 --- a/src/gui/socketapi.cpp +++ b/src/gui/socketapi.cpp @@ -686,6 +686,22 @@ void SocketApi::command_OPEN_PRIVATE_LINK(const QString &localFile, SocketListen fetchPrivateLinkUrlHelper(localFile, &SocketApi::openPrivateLink); } +void SocketApi::command_DOWNLOAD_PLACEHOLDER(const QString &filesArg, SocketListener *) +{ + QStringList files = filesArg.split(QLatin1Char('\x1e')); // Record Separator + auto placeholderSuffix = QStringLiteral(OWNCLOUD_PLACEHOLDER_SUFFIX); + + for (const auto &file : files) { + if (!file.endsWith(placeholderSuffix)) + continue; + auto folder = FolderMan::instance()->folderForPath(file); + if (folder) { + QString relativePath = QDir::cleanPath(file).mid(folder->cleanPath().length() + 1); + folder->downloadPlaceholder(relativePath); + } + } +} + void SocketApi::copyUrlToClipboard(const QString &link) { QApplication::clipboard()->setText(link); @@ -876,14 +892,36 @@ SocketApi::FileData SocketApi::FileData::parentFolder() const void SocketApi::command_GET_MENU_ITEMS(const QString &argument, OCC::SocketListener *listener) { listener->sendMessage(QString("GET_MENU_ITEMS:BEGIN")); - bool hasSeveralFiles = argument.contains(QLatin1Char('\x1e')); // Record Separator - FileData fileData = hasSeveralFiles ? FileData{} : FileData::get(argument); - const auto record = fileData.journalRecord(); - const bool isOnTheServer = record.isValid(); - const auto isE2eEncryptedPath = fileData.journalRecord()._isE2eEncrypted || !fileData.journalRecord()._e2eMangledName.isEmpty(); - auto flagString = isOnTheServer && !isE2eEncryptedPath ? QLatin1String("::") : QLatin1String(":d:"); + QStringList files = argument.split(QLatin1Char('\x1e')); // Record Separator + + // Find the common sync folder. + // syncFolder will be null if files are in different folders. + Folder *syncFolder = nullptr; + for (const auto &file : files) { + auto folder = FolderMan::instance()->folderForPath(file); + if (folder != syncFolder) { + if (!syncFolder) { + syncFolder = folder; + } else { + syncFolder = nullptr; + break; + } + } + } + + // Sharing actions show for single files only + if (syncFolder && files.size() == 1 && syncFolder->accountState()->isConnected()) { + QString systemPath = QDir::cleanPath(argument); + if (systemPath.endsWith(QLatin1Char('/'))) { + systemPath.truncate(systemPath.length() - 1); + } + + FileData fileData = FileData::get(argument); + const auto record = fileData.journalRecord(); + const bool isOnTheServer = record.isValid(); + const auto isE2eEncryptedPath = fileData.journalRecord()._isE2eEncrypted || !fileData.journalRecord()._e2eMangledName.isEmpty(); + auto flagString = isOnTheServer && !isE2eEncryptedPath ? QLatin1String("::") : QLatin1String(":d:"); - if (fileData.folder && fileData.folder->accountState()->isConnected()) { DirectEditor* editor = getDirectEditorForLocalFile(fileData.localPath); if (editor) { //listener->sendMessage(QLatin1String("MENU_ITEM:EDIT") + flagString + tr("Edit via ") + editor->name()); @@ -933,6 +971,19 @@ void SocketApi::command_GET_MENU_ITEMS(const QString &argument, OCC::SocketListe } } } + + // Placeholder download action + if (syncFolder) { + auto placeholderSuffix = QStringLiteral(OWNCLOUD_PLACEHOLDER_SUFFIX); + bool hasPlaceholderFile = false; + for (const auto &file : files) { + if (file.endsWith(placeholderSuffix)) + hasPlaceholderFile = true; + } + if (hasPlaceholderFile) + listener->sendMessage(QLatin1String("MENU_ITEM:DOWNLOAD_PLACEHOLDER::") + tr("Download file(s)", "", files.size())); + } + listener->sendMessage(QString("GET_MENU_ITEMS:END")); } diff --git a/src/gui/socketapi.h b/src/gui/socketapi.h index 25de075ee..e6cb5ecba 100644 --- a/src/gui/socketapi.h +++ b/src/gui/socketapi.h @@ -106,6 +106,7 @@ private: Q_INVOKABLE void command_COPY_PRIVATE_LINK(const QString &localFile, SocketListener *listener); Q_INVOKABLE void command_EMAIL_PRIVATE_LINK(const QString &localFile, SocketListener *listener); Q_INVOKABLE void command_OPEN_PRIVATE_LINK(const QString &localFile, SocketListener *listener); + Q_INVOKABLE void command_DOWNLOAD_PLACEHOLDER(const QString &filesArg, SocketListener *listener); Q_INVOKABLE void command_RESOLVE_CONFLICT(const QString &localFile, SocketListener *listener); Q_INVOKABLE void command_DELETE_ITEM(const QString &localFile, SocketListener *listener); Q_INVOKABLE void command_MOVE_ITEM(const QString &localFile, SocketListener *listener); diff --git a/src/libsync/syncengine.h b/src/libsync/syncengine.h index 5409d46c4..89d018b6d 100644 --- a/src/libsync/syncengine.h +++ b/src/libsync/syncengine.h @@ -76,6 +76,7 @@ public: bool isSyncRunning() const { return _syncRunning; } + SyncOptions syncOptions() const { return _syncOptions; } void setSyncOptions(const SyncOptions &options) { _syncOptions = options; } bool ignoreHiddenFiles() const { return _csync_ctx->ignore_hidden_files; } void setIgnoreHiddenFiles(bool ignore) { _csync_ctx->ignore_hidden_files = ignore; }