Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/owncloud/client.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHannah von Reth <hannah.vonreth@owncloud.com>2022-07-07 11:03:55 +0300
committerHannah von Reth <vonreth@kde.org>2022-07-07 15:20:00 +0300
commit1d915034c1bd1fbddc8fb33ed89738fe508ee372 (patch)
tree1b65fd53dc8f74899fc00eba1e12215b4244bac4
parentd5a7a59486a3669299169e951c12a18da1b72ea8 (diff)
Implement flag for deployed folders
Fixes: #9881
-rw-r--r--src/gui/accountsettings.cpp33
-rw-r--r--src/gui/folder.cpp17
-rw-r--r--src/gui/folder.h15
-rw-r--r--src/gui/folderstatusmodel.cpp6
-rw-r--r--src/gui/folderstatusmodel.h1
5 files changed, 57 insertions, 15 deletions
diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp
index 40024701d..1955be31a 100644
--- a/src/gui/accountsettings.cpp
+++ b/src/gui/accountsettings.cpp
@@ -241,9 +241,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);
@@ -251,6 +248,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;
@@ -258,7 +260,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);
@@ -348,22 +350,23 @@ 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()) {
+ 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 1d78a6ca1..f28c98bca 100644
--- a/src/gui/folder.cpp
+++ b/src/gui/folder.cpp
@@ -59,6 +59,11 @@ auto versionC()
return QStringLiteral("version");
}
+auto deployedC()
+{
+ return QStringLiteral("deployed");
+}
+
constexpr int WinVfsSettingsVersion = 4;
constexpr int SettingsVersion = 2;
}
@@ -752,6 +757,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
@@ -1345,6 +1355,7 @@ void FolderDefinition::save(QSettings &settings, const FolderDefinition &folder)
settings.setValue(QLatin1String("targetPath"), folder.targetPath);
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));
@@ -1369,6 +1380,7 @@ bool FolderDefinition::load(QSettings &settings, const QString &alias,
folder->targetPath = settings.value(QLatin1String("targetPath")).toString();
folder->paused = settings.value(QLatin1String("paused")).toBool();
folder->ignoreHiddenFiles = settings.value(QLatin1String("ignoreHiddenFiles"), QVariant(true)).toBool();
+ folder->_deployed = settings.value(deployedC(), false).toBool();
folder->navigationPaneClsid = settings.value(QLatin1String("navigationPaneClsid")).toUuid();
folder->virtualFilesMode = Vfs::Off;
@@ -1424,4 +1436,9 @@ QString FolderDefinition::absoluteJournalPath() const
return QDir(localPath).filePath(journalPath);
}
+bool FolderDefinition::isDeployed() const
+{
+ return _deployed;
+}
+
} // namespace OCC
diff --git a/src/gui/folder.h b/src/gui/folder.h
index 4fbc81f82..c152fac18 100644
--- a/src/gui/folder.h
+++ b/src/gui/folder.h
@@ -102,6 +102,15 @@ public:
/// journalPath relative to localPath.
QString absoluteJournalPath() const;
+
+ /**
+ * The folder is deployed by an admin
+ * We will hide the remove option and the disable/enable vfs option.
+ */
+ bool isDeployed() const;
+
+private:
+ bool _deployed;
};
/**
@@ -312,6 +321,12 @@ public:
/** Whether this folder should show selective sync ui */
bool supportsSelectiveSync() 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();
diff --git a/src/gui/folderstatusmodel.cpp b/src/gui/folderstatusmodel.cpp
index 0cbf64355..5b49fc37e 100644
--- a/src/gui/folderstatusmodel.cpp
+++ b/src/gui/folderstatusmodel.cpp
@@ -287,6 +287,12 @@ QVariant FolderStatusModel::data(const QModelIndex &index, int role) const
return QVariant();
}
+Folder *FolderStatusModel::folder(const QModelIndex &index) const
+{
+ Q_ASSERT(checkIndex(index, QAbstractItemModel::CheckIndexOption::IndexIsValid));
+ return _folders.at(index.row())._folder;
+}
+
bool FolderStatusModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
if (role == Qt::CheckStateRole) {
diff --git a/src/gui/folderstatusmodel.h b/src/gui/folderstatusmodel.h
index e58018958..f168edd2a 100644
--- a/src/gui/folderstatusmodel.h
+++ b/src/gui/folderstatusmodel.h
@@ -46,6 +46,7 @@ public:
Qt::ItemFlags flags(const QModelIndex &) const override;
QVariant data(const QModelIndex &index, int role) const override;
+ Folder *folder(const QModelIndex &index) const;
bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
int rowCount(const QModelIndex &parent = QModelIndex()) const override;