From: Christian Kamm Date: Wed, 2 May 2018 10:38:03 +0000 (+0200) Subject: Placeholders: Save to key that's invisible to <2.5 clients #6504 X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~12^2~21^2~468^2~592 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=27b65cbc699683a04f48069dc93718af576787c5;p=nextcloud-desktop.git Placeholders: Save to key that's invisible to <2.5 clients #6504 --- diff --git a/src/gui/folder.cpp b/src/gui/folder.cpp index 1042d2f48..3b87871a4 100644 --- a/src/gui/folder.cpp +++ b/src/gui/folder.cpp @@ -546,26 +546,30 @@ void Folder::saveToSettings() const removeFromSettings(); auto settings = _accountState->settings(); + QString settingsGroup = QStringLiteral("Multifolders"); - // The folder is saved to backwards-compatible "Folders" - // section only if it has the migrate flag set (i.e. was in - // there before) or if the folder is the only one for the - // given target path. - // This ensures that older clients will not read a configuration - // where two folders for different accounts point at the same - // local folders. + // True if the folder path appears in only one account const auto folderMap = FolderMan::instance()->map(); const auto oneAccountOnly = std::none_of(folderMap.cbegin(), folderMap.cend(), [this](const auto *other) { return other != this && other->cleanPath() == this->cleanPath(); }); - bool compatible = _saveBackwardsCompatible || oneAccountOnly; - - if (compatible) { - settings->beginGroup(QLatin1String("Folders")); - } else { - settings->beginGroup(QLatin1String("Multifolders")); + if (_definition.usePlaceholders) { + // If placeholders are enabled, save the folder to a group + // that will not be read by older (<2.5.0) clients. + settingsGroup = QStringLiteral("FoldersWithPlaceholders"); + } else if (_saveBackwardsCompatible || oneAccountOnly) { + // The folder is saved to backwards-compatible "Folders" + // section only if it has the migrate flag set (i.e. was in + // there before) or if the folder is the only one for the + // given target path. + // This ensures that older clients will not read a configuration + // where two folders for different accounts point at the same + // local folders. + settingsGroup = QStringLiteral("Folders"); } + + settings->beginGroup(settingsGroup); FolderDefinition::save(*settings, _definition); settings->sync(); @@ -580,6 +584,9 @@ void Folder::removeFromSettings() const settings->endGroup(); settings->beginGroup(QLatin1String("Multifolders")); settings->remove(FolderMan::escapeAlias(_definition.alias)); + settings->endGroup(); + settings->beginGroup(QLatin1String("FoldersWithPlaceholders")); + settings->remove(FolderMan::escapeAlias(_definition.alias)); } bool Folder::isFileExcludedAbsolute(const QString &fullPath) const diff --git a/src/gui/folderman.cpp b/src/gui/folderman.cpp index 818337687..a4ba88872 100644 --- a/src/gui/folderman.cpp +++ b/src/gui/folderman.cpp @@ -187,6 +187,11 @@ int FolderMan::setupFolders() setupFoldersHelper(*settings, account, false); settings->endGroup(); + // See Folder::saveToSettings for details about why this exists. + settings->beginGroup(QLatin1String("FoldersWithPlaceholders")); + setupFoldersHelper(*settings, account, false); + settings->endGroup(); + settings->endGroup(); // }