Add method to fileproviderxpc to check if the file provider extension is reachable
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Fri, 19 Jul 2024 06:51:37 +0000 (14:51 +0800)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Tue, 23 Jul 2024 06:08:26 +0000 (14:08 +0800)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
src/gui/macOS/fileproviderxpc.h
src/gui/macOS/fileproviderxpc_mac.mm

index 58c6a0211b3095c901e4b1b2aceac761a213c6f5..4ca88c03bd5bec71c35bf7d62faf28bca296ee44 100644 (file)
@@ -34,6 +34,8 @@ class FileProviderXPC : public QObject
 public:
     explicit FileProviderXPC(QObject *parent = nullptr);
 
+    [[nodiscard]] bool fileProviderExtReachable(const QString &extensionAccountId) const;
+
     // Returns enabled and set state of fast enumeration for the given extension
     [[nodiscard]] std::optional<std::pair<bool, bool>> fastEnumerationStateForExtension(const QString &extensionAccountId) const;
 
index cc0b7b4679230659ba5c02392f3e67b1febb99b2..e94dc2cbcca48dbcf3ca5a0c76f4dca6d42d9ce7 100644 (file)
@@ -141,6 +141,22 @@ void FileProviderXPC::createDebugArchiveForExtension(const QString &extensionAcc
     }
 }
 
+bool FileProviderXPC::fileProviderExtReachable(const QString &extensionAccountId) const
+{
+    const auto service = (NSObject<ClientCommunicationProtocol> *)_clientCommServices.value(extensionAccountId);
+    if (service == nil) {
+        return false;
+    }
+    __block auto response = false;
+    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
+    [service getExtensionAccountIdWithCompletionHandler:^(NSString *const, NSError *const) {
+        response = true;
+        dispatch_semaphore_signal(semaphore);
+    }];
+    dispatch_semaphore_wait(semaphore, dispatch_time(DISPATCH_TIME_NOW, semaphoreWaitDelta));
+    return response;
+}
+
 std::optional<std::pair<bool, bool>> FileProviderXPC::fastEnumerationStateForExtension(const QString &extensionAccountId) const
 {
     qCInfo(lcFileProviderXPC) << "Checking if fast enumeration is enabled for extension" << extensionAccountId;