Add method to signal file provider domain via file provider settings controller
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Tue, 9 Jan 2024 14:48:59 +0000 (22:48 +0800)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Mon, 19 Feb 2024 14:45:19 +0000 (22:45 +0800)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
src/gui/macOS/fileprovidersettingscontroller.h
src/gui/macOS/fileprovidersettingscontroller_mac.mm

index 72d983144ce9dca95e15817a85776e8e2d2f1b61..2bfa68e357aa6121063e67703a4b20a2363c6707 100644 (file)
@@ -49,6 +49,7 @@ public slots:
     void setVfsEnabledForAccount(const QString &userIdAtHost, const bool setEnabled);
 
     void createEvictionWindowForAccount(const QString &userIdAtHost);
+    void signalFileProviderDomain(const QString &userIdAtHost);
     void createDebugArchive(const QString &userIdAtHost);
 
 signals:
index f9be6ab1c414c5ac4786410f60aea43cfe281403..9629b07a5a242e132af6684dd268065115554802 100644 (file)
@@ -22,6 +22,7 @@
 #include "gui/macOS/fileprovider.h"
 #include "gui/macOS/fileprovideritemmetadata.h"
 #include "gui/macOS/fileprovidermaterialiseditemsmodel.h"
+#include "gui/macOS/fileproviderutils.h"
 
 // Objective-C imports
 #import <Foundation/Foundation.h>
@@ -161,6 +162,24 @@ public:
         return _materialisedFiles.value(userIdAtHost);
     }
 
+    void signalFileProviderDomain(const QString &userIdAtHost) const
+    {
+        qCInfo(lcFileProviderSettingsController) << "Signalling file provider domain" << userIdAtHost;
+        NSFileProviderDomain * const domain = FileProviderUtils::domainForIdentifier(userIdAtHost);
+        NSFileProviderManager * const manager = [NSFileProviderManager managerForDomain:domain];
+        [manager signalEnumeratorForContainerItemIdentifier:NSFileProviderRootContainerItemIdentifier
+                                          completionHandler:^(NSError *const error) {
+            if (error != nil) {
+                qCWarning(lcFileProviderSettingsController) << "Could not signal file provider domain, error"
+                                                            << error.localizedDescription;
+                return;
+            }
+
+            qCInfo(lcFileProviderSettingsController) << "Successfully signalled file provider domain";
+            // TODO: Provide some feedback in the UI
+        }];
+    }
+
 private:
     [[nodiscard]] NSArray<NSString *> *nsEnabledAccounts() const
     {
@@ -386,6 +405,11 @@ void FileProviderSettingsController::createEvictionWindowForAccount(const QStrin
     dialog->show();
 }
 
+void FileProviderSettingsController::signalFileProviderDomain(const QString &userIdAtHost)
+{
+    d->signalFileProviderDomain(userIdAtHost);
+}
+
 void FileProviderSettingsController::createDebugArchive(const QString &userIdAtHost)
 {
     const auto filename = QFileDialog::getSaveFileName(nullptr,