Placeholders: Download from shell integration

This commit is contained in:
Christian Kamm 2018-01-26 08:56:50 +01:00 committed by Kevin Ottens
parent 91f53521ae
commit d6078f958b
No known key found for this signature in database
GPG key ID: 074BBBCB8DECC9E2
3 changed files with 60 additions and 7 deletions

View file

@ -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"));
}

View file

@ -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);

View file

@ -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; }