]> dgit.raspbian.org Git - nextcloud-desktop.git/commitdiff
Move fp settings controller out of ui folder
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Tue, 5 Sep 2023 09:17:58 +0000 (17:17 +0800)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Mon, 19 Feb 2024 14:45:09 +0000 (22:45 +0800)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
src/gui/CMakeLists.txt
src/gui/accountsettings.h
src/gui/macOS/fileprovidersettingscontroller.h [new file with mode: 0644]
src/gui/macOS/fileprovidersettingscontroller_mac.mm [new file with mode: 0644]
src/gui/macOS/ui/FileProviderSettings.qml
src/gui/macOS/ui/fileprovidersettingscontroller.h [deleted file]
src/gui/macOS/ui/fileprovidersettingscontroller_mac.mm [deleted file]

index f79d0dfd8630e020fbd8e0f4eba6a2000465331f..1af5fdf3ba8d17dfc190ef5acff5f00cb5014cab 100644 (file)
@@ -302,8 +302,8 @@ IF( APPLE )
             macOS/fileproviderxpc_mac.mm
             macOS/fileproviderxpc_mac_utils.h
             macOS/fileproviderxpc_mac_utils.mm
-            macOS/ui/fileprovidersettingscontroller.h
-            macOS/ui/fileprovidersettingscontroller_mac.mm)
+            macOS/fileprovidersettingscontroller.h
+            macOS/fileprovidersettingscontroller_mac.mm)
     endif()
 
     if(SPARKLE_FOUND AND BUILD_UPDATER)
index ddb7ff66a6b3d1dabaa8cf9f7028f13fe19415e0..117a3aa536a0a7b08bdef5bfb5507ecb74680e30 100644 (file)
@@ -28,7 +28,7 @@
 #include "folderstatusmodel.h"
 
 #ifdef BUILD_FILE_PROVIDER_MODULE
-#include "macOS/ui/fileprovidersettingscontroller.h"
+#include "macOS/fileprovidersettingscontroller.h"
 #endif
 
 class QModelIndex;
diff --git a/src/gui/macOS/fileprovidersettingscontroller.h b/src/gui/macOS/fileprovidersettingscontroller.h
new file mode 100644 (file)
index 0000000..7b9d4fc
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2023 by Claudio Cambra <claudio.cambra@nextcloud.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ */
+
+#pragma once
+
+#include <QObject>
+#include <QtQuickWidgets/QtQuickWidgets>
+
+namespace OCC {
+
+namespace Mac {
+
+class FileProviderSettingsController : public QObject
+{
+    Q_OBJECT
+
+public:
+    static FileProviderSettingsController *instance();
+
+    [[nodiscard]] QQuickWidget *settingsViewWidget(const QString &accountUserIdAtHost,
+                                                   QWidget *const parent = nullptr,
+                                                   const QQuickWidget::ResizeMode resizeMode = QQuickWidget::SizeRootObjectToView);
+
+    [[nodiscard]] Q_INVOKABLE bool vfsEnabledForAccount(const QString &userIdAtHost) const;
+
+public slots:
+    void setVfsEnabledForAccount(const QString &userIdAtHost, const bool setEnabled);
+
+signals:
+    void vfsEnabledAccountsChanged();
+
+private:
+    explicit FileProviderSettingsController(QObject *parent = nullptr);
+    ~FileProviderSettingsController() override;
+
+    class MacImplementation;
+    std::unique_ptr<MacImplementation> d;
+};
+
+} // Mac
+
+} // OCC
diff --git a/src/gui/macOS/fileprovidersettingscontroller_mac.mm b/src/gui/macOS/fileprovidersettingscontroller_mac.mm
new file mode 100644 (file)
index 0000000..ee71e97
--- /dev/null
@@ -0,0 +1,149 @@
+/*
+ * Copyright (C) 2023 by Claudio Cambra <claudio.cambra@nextcloud.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ */
+
+#include "fileprovidersettingscontroller.h"
+
+#include <QQmlApplicationEngine>
+
+#include "gui/systray.h"
+
+// Objective-C imports
+#import <Foundation/Foundation.h>
+// End of Objective-C imports
+
+namespace {
+constexpr auto fpSettingsQmlPath = "qrc:/qml/src/gui/macOS/ui/FileProviderSettings.qml";
+
+// FileProviderSettingsPage properties -- make sure they match up in QML file!
+constexpr auto fpSettingsAccountUserIdAtHostProp = "accountUserIdAtHost";
+
+// NSUserDefaults entries
+constexpr auto enabledAccountsSettingsKey = "enabledAccounts";
+} // namespace
+
+namespace OCC {
+
+namespace Mac {
+
+Q_LOGGING_CATEGORY(lcFileProviderSettingsController, "nextcloud.gui.mac.fileprovider.settingscontroller")
+
+class FileProviderSettingsController::MacImplementation
+{
+public:
+    enum class VfsAccountsAction {
+        VfsAccountsNoAction,
+        VfsAccountsEnabledChanged,
+    };
+
+    MacImplementation(FileProviderSettingsController *const parent)
+    {
+        q = parent;
+        _userDefaults = NSUserDefaults.standardUserDefaults;
+    };
+
+    ~MacImplementation() = default;
+
+    QStringList enabledAccounts() const
+    {
+        QStringList qEnabledAccounts;
+        NSArray<NSString *> *const enabledAccounts = nsEnabledAccounts();
+        for (NSString *const userIdAtHostString in enabledAccounts) {
+            qEnabledAccounts.append(QString::fromNSString(userIdAtHostString));
+        }
+        return qEnabledAccounts;
+    }
+
+    bool vfsEnabledForAccount(const QString &userIdAtHost) const
+    {
+        NSArray<NSString *> *const vfsEnabledAccounts = nsEnabledAccounts();
+        return [vfsEnabledAccounts containsObject:userIdAtHost.toNSString()];
+    }
+
+    VfsAccountsAction setVfsEnabledForAccount(const QString &userIdAtHost, const bool setEnabled) const
+    {
+        NSArray<NSString *> *const vfsEnabledAccounts = nsEnabledAccounts();
+        NSString *const nsUserIdAtHost = userIdAtHost.toNSString();
+        const BOOL accountEnabled = [vfsEnabledAccounts containsObject:nsUserIdAtHost];
+
+        if (accountEnabled == setEnabled) {
+            return VfsAccountsAction::VfsAccountsNoAction;
+        }
+
+        NSMutableArray<NSString *> *const mutableVfsAccounts = vfsEnabledAccounts.mutableCopy;
+
+        if (setEnabled) {
+            [mutableVfsAccounts addObject:nsUserIdAtHost];
+        } else {
+            [mutableVfsAccounts removeObject:nsUserIdAtHost];
+        }
+
+        NSArray<NSString *> *const modifiedVfsAccounts = mutableVfsAccounts.copy;
+        NSString *const accsKey = [NSString stringWithUTF8String:enabledAccountsSettingsKey];
+        [_userDefaults setObject:modifiedVfsAccounts forKey:accsKey];
+
+        return VfsAccountsAction::VfsAccountsEnabledChanged;
+    }
+
+private:
+    NSArray<NSString *> *nsEnabledAccounts() const
+    {
+        NSString *const accsKey = [NSString stringWithUTF8String:enabledAccountsSettingsKey];
+        return (NSArray<NSString *> *)[_userDefaults objectForKey:accsKey];
+    }
+
+    FileProviderSettingsController *q = nullptr;
+    NSUserDefaults *_userDefaults = nil;
+};
+
+FileProviderSettingsController *FileProviderSettingsController::instance()
+{
+    static FileProviderSettingsController controller;
+    return &controller;
+}
+
+FileProviderSettingsController::~FileProviderSettingsController() = default;
+
+FileProviderSettingsController::FileProviderSettingsController(QObject *parent)
+    : QObject{parent}
+{
+    d = std::make_unique<FileProviderSettingsController::MacImplementation>(this);
+}
+
+QQuickWidget *FileProviderSettingsController::settingsViewWidget(const QString &accountUserIdAtHost,
+                                                                 QWidget *const parent,
+                                                                 const QQuickWidget::ResizeMode resizeMode)
+{
+    const auto settingsViewWidget = new QQuickWidget(Systray::instance()->trayEngine(), parent);
+    settingsViewWidget->setResizeMode(resizeMode);
+    settingsViewWidget->setSource(QUrl(fpSettingsQmlPath));
+    settingsViewWidget->rootObject()->setProperty(fpSettingsAccountUserIdAtHostProp, accountUserIdAtHost);
+    return settingsViewWidget;
+}
+
+bool FileProviderSettingsController::vfsEnabledForAccount(const QString &userIdAtHost) const
+{
+    return d->vfsEnabledForAccount(userIdAtHost);
+}
+
+void FileProviderSettingsController::setVfsEnabledForAccount(const QString &userIdAtHost, const bool setEnabled)
+{
+    const auto enabledAccountsAction = d->setVfsEnabledForAccount(userIdAtHost, setEnabled);
+    if (enabledAccountsAction == MacImplementation::VfsAccountsAction::VfsAccountsEnabledChanged) {
+        emit vfsEnabledAccountsChanged();
+    }
+}
+
+} // namespace Mac
+
+} // namespace OCC
index 7840544102d16d11e675b98a72fb916ff4d742c2..50f282b93f970e8146263382571ccfa5c8824532 100644 (file)
@@ -68,6 +68,8 @@ Page {
 
         CheckBox {
             text: qsTr("Enable virtual files")
+            checked: root.controller.vfsEnabledForAccount(root.accountUserIdAtHost)
+            onClicked: root.controller.setVfsEnabledForAccount(root.accountUserIdAtHost, checked)
         }
     }
 }
diff --git a/src/gui/macOS/ui/fileprovidersettingscontroller.h b/src/gui/macOS/ui/fileprovidersettingscontroller.h
deleted file mode 100644 (file)
index 7b9d4fc..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2023 by Claudio Cambra <claudio.cambra@nextcloud.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * for more details.
- */
-
-#pragma once
-
-#include <QObject>
-#include <QtQuickWidgets/QtQuickWidgets>
-
-namespace OCC {
-
-namespace Mac {
-
-class FileProviderSettingsController : public QObject
-{
-    Q_OBJECT
-
-public:
-    static FileProviderSettingsController *instance();
-
-    [[nodiscard]] QQuickWidget *settingsViewWidget(const QString &accountUserIdAtHost,
-                                                   QWidget *const parent = nullptr,
-                                                   const QQuickWidget::ResizeMode resizeMode = QQuickWidget::SizeRootObjectToView);
-
-    [[nodiscard]] Q_INVOKABLE bool vfsEnabledForAccount(const QString &userIdAtHost) const;
-
-public slots:
-    void setVfsEnabledForAccount(const QString &userIdAtHost, const bool setEnabled);
-
-signals:
-    void vfsEnabledAccountsChanged();
-
-private:
-    explicit FileProviderSettingsController(QObject *parent = nullptr);
-    ~FileProviderSettingsController() override;
-
-    class MacImplementation;
-    std::unique_ptr<MacImplementation> d;
-};
-
-} // Mac
-
-} // OCC
diff --git a/src/gui/macOS/ui/fileprovidersettingscontroller_mac.mm b/src/gui/macOS/ui/fileprovidersettingscontroller_mac.mm
deleted file mode 100644 (file)
index ee71e97..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright (C) 2023 by Claudio Cambra <claudio.cambra@nextcloud.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * for more details.
- */
-
-#include "fileprovidersettingscontroller.h"
-
-#include <QQmlApplicationEngine>
-
-#include "gui/systray.h"
-
-// Objective-C imports
-#import <Foundation/Foundation.h>
-// End of Objective-C imports
-
-namespace {
-constexpr auto fpSettingsQmlPath = "qrc:/qml/src/gui/macOS/ui/FileProviderSettings.qml";
-
-// FileProviderSettingsPage properties -- make sure they match up in QML file!
-constexpr auto fpSettingsAccountUserIdAtHostProp = "accountUserIdAtHost";
-
-// NSUserDefaults entries
-constexpr auto enabledAccountsSettingsKey = "enabledAccounts";
-} // namespace
-
-namespace OCC {
-
-namespace Mac {
-
-Q_LOGGING_CATEGORY(lcFileProviderSettingsController, "nextcloud.gui.mac.fileprovider.settingscontroller")
-
-class FileProviderSettingsController::MacImplementation
-{
-public:
-    enum class VfsAccountsAction {
-        VfsAccountsNoAction,
-        VfsAccountsEnabledChanged,
-    };
-
-    MacImplementation(FileProviderSettingsController *const parent)
-    {
-        q = parent;
-        _userDefaults = NSUserDefaults.standardUserDefaults;
-    };
-
-    ~MacImplementation() = default;
-
-    QStringList enabledAccounts() const
-    {
-        QStringList qEnabledAccounts;
-        NSArray<NSString *> *const enabledAccounts = nsEnabledAccounts();
-        for (NSString *const userIdAtHostString in enabledAccounts) {
-            qEnabledAccounts.append(QString::fromNSString(userIdAtHostString));
-        }
-        return qEnabledAccounts;
-    }
-
-    bool vfsEnabledForAccount(const QString &userIdAtHost) const
-    {
-        NSArray<NSString *> *const vfsEnabledAccounts = nsEnabledAccounts();
-        return [vfsEnabledAccounts containsObject:userIdAtHost.toNSString()];
-    }
-
-    VfsAccountsAction setVfsEnabledForAccount(const QString &userIdAtHost, const bool setEnabled) const
-    {
-        NSArray<NSString *> *const vfsEnabledAccounts = nsEnabledAccounts();
-        NSString *const nsUserIdAtHost = userIdAtHost.toNSString();
-        const BOOL accountEnabled = [vfsEnabledAccounts containsObject:nsUserIdAtHost];
-
-        if (accountEnabled == setEnabled) {
-            return VfsAccountsAction::VfsAccountsNoAction;
-        }
-
-        NSMutableArray<NSString *> *const mutableVfsAccounts = vfsEnabledAccounts.mutableCopy;
-
-        if (setEnabled) {
-            [mutableVfsAccounts addObject:nsUserIdAtHost];
-        } else {
-            [mutableVfsAccounts removeObject:nsUserIdAtHost];
-        }
-
-        NSArray<NSString *> *const modifiedVfsAccounts = mutableVfsAccounts.copy;
-        NSString *const accsKey = [NSString stringWithUTF8String:enabledAccountsSettingsKey];
-        [_userDefaults setObject:modifiedVfsAccounts forKey:accsKey];
-
-        return VfsAccountsAction::VfsAccountsEnabledChanged;
-    }
-
-private:
-    NSArray<NSString *> *nsEnabledAccounts() const
-    {
-        NSString *const accsKey = [NSString stringWithUTF8String:enabledAccountsSettingsKey];
-        return (NSArray<NSString *> *)[_userDefaults objectForKey:accsKey];
-    }
-
-    FileProviderSettingsController *q = nullptr;
-    NSUserDefaults *_userDefaults = nil;
-};
-
-FileProviderSettingsController *FileProviderSettingsController::instance()
-{
-    static FileProviderSettingsController controller;
-    return &controller;
-}
-
-FileProviderSettingsController::~FileProviderSettingsController() = default;
-
-FileProviderSettingsController::FileProviderSettingsController(QObject *parent)
-    : QObject{parent}
-{
-    d = std::make_unique<FileProviderSettingsController::MacImplementation>(this);
-}
-
-QQuickWidget *FileProviderSettingsController::settingsViewWidget(const QString &accountUserIdAtHost,
-                                                                 QWidget *const parent,
-                                                                 const QQuickWidget::ResizeMode resizeMode)
-{
-    const auto settingsViewWidget = new QQuickWidget(Systray::instance()->trayEngine(), parent);
-    settingsViewWidget->setResizeMode(resizeMode);
-    settingsViewWidget->setSource(QUrl(fpSettingsQmlPath));
-    settingsViewWidget->rootObject()->setProperty(fpSettingsAccountUserIdAtHostProp, accountUserIdAtHost);
-    return settingsViewWidget;
-}
-
-bool FileProviderSettingsController::vfsEnabledForAccount(const QString &userIdAtHost) const
-{
-    return d->vfsEnabledForAccount(userIdAtHost);
-}
-
-void FileProviderSettingsController::setVfsEnabledForAccount(const QString &userIdAtHost, const bool setEnabled)
-{
-    const auto enabledAccountsAction = d->setVfsEnabledForAccount(userIdAtHost, setEnabled);
-    if (enabledAccountsAction == MacImplementation::VfsAccountsAction::VfsAccountsEnabledChanged) {
-        emit vfsEnabledAccountsChanged();
-    }
-}
-
-} // namespace Mac
-
-} // namespace OCC