diff options
author | Hannah von Reth <hannah.vonreth@owncloud.com> | 2022-07-07 16:51:35 +0300 |
---|---|---|
committer | Hannah von Reth <hannah.vonreth@owncloud.com> | 2022-07-07 16:51:35 +0300 |
commit | b779de22de0e0b48a328b146501f7e9e12d37f5b (patch) | |
tree | 7977b72488cc9d7d1a1869e76eb3ac2745dc886d /src | |
parent | 0f0eaf2910994ce5f5c2ede05377f7e15192ec48 (diff) | |
parent | f8120c54a4b2e9fc0bc75856d6e78de19d1f5505 (diff) |
Merge remote-tracking branch 'origin/2.10'
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/accountsettings.cpp | 33 | ||||
-rw-r--r-- | src/gui/folder.cpp | 17 | ||||
-rw-r--r-- | src/gui/folder.h | 14 |
3 files changed, 50 insertions, 14 deletions
diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index 9659bf0ab..6d46fe46a 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -235,9 +235,6 @@ void AccountSettings::doExpand() void AccountSettings::slotCustomContextMenuRequested(const QPoint &pos) { - const auto removeFolderAction = [this](QMenu *menu) { - return menu->addAction(tr("Remove folder sync connection"), this, &AccountSettings::slotRemoveCurrentFolder); - }; QTreeView *tv = ui->_folderList; QModelIndex index = tv->indexAt(pos); @@ -245,6 +242,11 @@ void AccountSettings::slotCustomContextMenuRequested(const QPoint &pos) return; } + const auto removeFolderAction = [index, this](QMenu *menu) { + Q_ASSERT(!_model->folder(index)->isDeployed()); + return menu->addAction(tr("Remove folder sync connection"), this, &AccountSettings::slotRemoveCurrentFolder); + }; + auto classification = _model->classify(index); if (classification != FolderStatusModel::RootFolder && classification != FolderStatusModel::SubFolder) { return; @@ -252,7 +254,7 @@ void AccountSettings::slotCustomContextMenuRequested(const QPoint &pos) // Only allow removal if the item isn't in "ready" state. - if (classification == FolderStatusModel::RootFolder && !_model->data(index, FolderStatusDelegate::IsReady).toBool()) { + if (classification == FolderStatusModel::RootFolder && !_model->data(index, FolderStatusDelegate::IsReady).toBool() && !_model->folder(index)->isDeployed()) { QMenu *menu = new QMenu(tv); menu->setAttribute(Qt::WA_DeleteOnClose); removeFolderAction(menu); @@ -340,18 +342,21 @@ void AccountSettings::slotCustomContextMenuRequested(const QPoint &pos) QAction *ac = menu->addAction(folderPaused ? tr("Resume sync") : tr("Pause sync")); connect(ac, &QAction::triggered, this, &AccountSettings::slotEnableCurrentFolder); - removeFolderAction(menu); + if (!_model->folder(index)->isDeployed()) { + removeFolderAction(menu); - if (folder->virtualFilesEnabled() && !Theme::instance()->forceVirtualFilesOption()) { - menu->addAction(tr("Disable virtual file support..."), this, &AccountSettings::slotDisableVfsCurrentFolder); - } + if (folder->virtualFilesEnabled() && !Theme::instance()->forceVirtualFilesOption()) { + menu->addAction(tr("Disable virtual file support..."), this, &AccountSettings::slotDisableVfsCurrentFolder); + } - if (Theme::instance()->showVirtualFilesOption() - && !folder->virtualFilesEnabled() && FolderMan::instance()->checkVfsAvailability(folder->path())) { - const auto mode = bestAvailableVfsMode(); - if (mode == Vfs::WindowsCfApi || Theme::instance()->enableExperimentalFeatures()) { - ac = menu->addAction(tr("Enable virtual file support%1...").arg(mode == Vfs::WindowsCfApi ? QString() : tr(" (experimental)"))); - connect(ac, &QAction::triggered, this, &AccountSettings::slotEnableVfsCurrentFolder); + if (Theme::instance()->showVirtualFilesOption() + && !folder->virtualFilesEnabled() && FolderMan::instance()->checkVfsAvailability(folder->path())) { + const auto mode = bestAvailableVfsMode(); + + if (mode == Vfs::WindowsCfApi || (Theme::instance()->enableExperimentalFeatures() && mode != Vfs::Off)) { + ac = menu->addAction(tr("Enable virtual file support%1...").arg(mode == Vfs::WindowsCfApi ? QString() : tr(" (experimental)"))); + connect(ac, &QAction::triggered, this, &AccountSettings::slotEnableVfsCurrentFolder); + } } } menu->popup(QCursor::pos()); diff --git a/src/gui/folder.cpp b/src/gui/folder.cpp index 917d533e8..e810698f8 100644 --- a/src/gui/folder.cpp +++ b/src/gui/folder.cpp @@ -71,6 +71,11 @@ auto displayNameC() return QLatin1String("displayString"); } +auto deployedC() +{ + return QStringLiteral("deployed"); +} + constexpr int SettingsVersionC = 5; } @@ -786,6 +791,11 @@ bool Folder::supportsSelectiveSync() const return !virtualFilesEnabled() && !isVfsOnOffSwitchPending(); } +bool Folder::isDeployed() const +{ + return _definition.isDeployed(); +} + void Folder::saveToSettings() const { // Remove first to make sure we don't get duplicates @@ -1366,6 +1376,7 @@ void FolderDefinition::save(QSettings &settings, const FolderDefinition &folder) settings.setValue(displayNameC(), folder.displayName()); settings.setValue(QLatin1String("paused"), folder.paused); settings.setValue(QLatin1String("ignoreHiddenFiles"), folder.ignoreHiddenFiles); + settings.setValue(deployedC(), folder.isDeployed()); settings.setValue(QStringLiteral("virtualFilesMode"), Vfs::modeToString(folder.virtualFilesMode)); @@ -1388,6 +1399,7 @@ FolderDefinition FolderDefinition::load(QSettings &settings, const QByteArray &i folder.paused = settings.value(QLatin1String("paused")).toBool(); folder.ignoreHiddenFiles = settings.value(QLatin1String("ignoreHiddenFiles"), QVariant(true)).toBool(); folder.navigationPaneClsid = settings.value(QLatin1String("navigationPaneClsid")).toUuid(); + folder._deployed = settings.value(deployedC(), false).toBool(); folder.virtualFilesMode = Vfs::Off; QString vfsModeString = settings.value(QStringLiteral("virtualFilesMode")).toString(); @@ -1466,4 +1478,9 @@ bool Folder::groupInSidebar() const } return false; } + +bool FolderDefinition::isDeployed() const +{ + return _deployed; +} } // namespace OCC diff --git a/src/gui/folder.h b/src/gui/folder.h index 238cd9d5c..79173cf61 100644 --- a/src/gui/folder.h +++ b/src/gui/folder.h @@ -115,6 +115,13 @@ public: QString displayName() const; + /** + * The folder is deployed by an admin + * We will hide the remove option and the disable/enable vfs option. + */ + bool isDeployed() const; + + private: FolderDefinition(const QByteArray &id, const QUrl &davUrl, const QString &displayName); @@ -127,6 +134,7 @@ private: /// path on remote (usually no trailing /, exception "/") QString _targetPath; + bool _deployed; friend class FolderMan; }; @@ -349,6 +357,12 @@ public: */ bool groupInSidebar() const; + /** + * The folder is deployed by an admin + * We will hide the remove option and the disable/enable vfs option. + */ + bool isDeployed() const; + signals: void syncStateChange(); void syncStarted(); |