diff --git a/src/gui/macOS/fileproviderutils.h b/src/gui/macOS/fileproviderutils.h index a4dec29ef2..063be6d6d4 100644 --- a/src/gui/macOS/fileproviderutils.h +++ b/src/gui/macOS/fileproviderutils.h @@ -16,6 +16,7 @@ class QString; +@class NSFileProviderDomain; @class NSFileProviderManager; /** @@ -36,6 +37,9 @@ namespace Mac { namespace FileProviderUtils { +// Synchronous function to get the domain for a domain identifier +NSFileProviderDomain *domainForIdentifier(const QString &domainIdentifier); + // Synchronous function to get manager for a domain identifier NSFileProviderManager *managerForDomainIdentifier(const QString &domainIdentifier); diff --git a/src/gui/macOS/fileproviderutils_mac.mm b/src/gui/macOS/fileproviderutils_mac.mm index 7522b93ddf..fbb40f42fb 100644 --- a/src/gui/macOS/fileproviderutils_mac.mm +++ b/src/gui/macOS/fileproviderutils_mac.mm @@ -27,9 +27,9 @@ namespace FileProviderUtils { Q_LOGGING_CATEGORY(lcMacFileProviderUtils, "nextcloud.gui.macfileproviderutils", QtInfoMsg) -NSFileProviderManager *managerForDomainIdentifier(const QString &domainIdentifier) +NSFileProviderDomain *domainForIdentifier(const QString &domainIdentifier) { - __block NSFileProviderManager *manager = nil; + __block NSFileProviderDomain *foundDomain = nil; NSString *const nsDomainIdentifier = domainIdentifier.toNSString(); dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); @@ -45,24 +45,31 @@ NSFileProviderManager *managerForDomainIdentifier(const QString &domainIdentifie return; } - BOOL foundDomain = NO; - for (NSFileProviderDomain *const domain in domains) { if ([domain.identifier isEqualToString:nsDomainIdentifier]) { - foundDomain = YES; - manager = [NSFileProviderManager managerForDomain:domain]; + foundDomain = domain; + break; } } - if (!foundDomain) { - qCWarning(lcMacFileProviderUtils) << "No matching item domain, cannot get manager"; - } - dispatch_semaphore_signal(semaphore); }]; dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); + if (foundDomain == nil) { + qCWarning(lcMacFileProviderUtils) << "No matching item domain for identifier" + << domainIdentifier; + } + + return foundDomain; +} + +NSFileProviderManager *managerForDomainIdentifier(const QString &domainIdentifier) +{ + NSFileProviderDomain * const domain = domainForIdentifier(domainIdentifier); + NSFileProviderManager * const manager = [NSFileProviderManager managerForDomain:domain]; + if (manager == nil) { qCWarning(lcMacFileProviderUtils) << "Received null manager for domain" << domainIdentifier;