Use FileProviderUtils function to get manager for domain id in FileProviderItemMetadata
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Wed, 1 Nov 2023 05:57:09 +0000 (13:57 +0800)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Mon, 19 Feb 2024 14:45:16 +0000 (22:45 +0800)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
src/gui/macOS/fileprovideritemmetadata_mac.mm

index 5aced7128b853a0f70211de5a0e943d87293f20b..e356a0245895c6be5f4f14ea8a2e7df60ffeacb3 100644 (file)
@@ -20,6 +20,8 @@
 #import <FileProvider/FileProvider.h>
 #import <UniformTypeIdentifiers/UniformTypeIdentifiers.h>
 
+#include "fileproviderutils.h"
+
 namespace {
 
 QString nsNameComponentsToLocalisedQString(NSPersonNameComponents *const nameComponents)
@@ -107,53 +109,21 @@ QString FileProviderItemMetadata::getUserVisiblePath() const
         return QStringLiteral("Unknown");
     }
 
-    NSString *const nsItemIdentifier = id.toNSString();
-    NSString *const nsDomainIdentifier = domainId.toNSString();
-
     __block QString returnPath = QObject::tr("Unknown");
-    __block NSFileProviderManager *manager = nil;
-    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-
-    // getDomainsWithCompletionHandler is asynchronous -- we create a dispatch semaphore in order
-    // to wait until it is done. This should tell you that we should not call this method very
-    // often!
-
-    [NSFileProviderManager getDomainsWithCompletionHandler:^(NSArray<NSFileProviderDomain *> *const domains, NSError *const error) {
-        if (error != nil) {
-            qCWarning(lcMacImplFileProviderItemMetadata) << "Error fetching domains:" << error.localizedDescription;
-            dispatch_semaphore_signal(semaphore);
-            return;
-        }
-
-        BOOL foundDomain = NO;
-
-        for (NSFileProviderDomain *const domain in domains) {
-            if ([domain.identifier isEqualToString:nsDomainIdentifier]) {
-                 foundDomain = YES;
-                 manager = [NSFileProviderManager managerForDomain:domain];
-            }
-        }
+    NSFileProviderManager *manager = FileProviderUtils::managerForDomainIdentifier(domainId);
 
-        if (!foundDomain) {
-            qCWarning(lcMacImplFileProviderItemMetadata) << "No matching item domain, cannot get item path";
-        }
-
-        dispatch_semaphore_signal(semaphore);
-    }];
-
-    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
-
-    if (manager == nil) {
+     if (manager == nil) {
         qCWarning(lcMacImplFileProviderItemMetadata) << "Null manager, cannot get item path";
-        dispatch_release(semaphore);
         return returnPath;
     }
 
-    // getUserVisibleUrl is also async, so wait here too
+    NSString *const nsItemIdentifier = id.toNSString();
+    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
+
+    // getUserVisibleUrl is async, so wait here
 
     [manager getUserVisibleURLForItemIdentifier:nsItemIdentifier
                               completionHandler:^(NSURL *const userVisibleFile, NSError *const error) {
-        qCDebug(lcMacImplFileProviderItemMetadata) << "Got user visible url for item identifier." << "url:" << userVisibleFile << "error:" << error.localizedDescription;
 
         if (error != nil) {
             qCWarning(lcMacImplFileProviderItemMetadata) << "Error fetching user visible url for item identifier." << error.localizedDescription;