Ensure we wait for check for existing file provider domains to finish before rushing...
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Sat, 11 Mar 2023 12:51:12 +0000 (13:51 +0100)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Fri, 12 May 2023 05:21:28 +0000 (13:21 +0800)
This stops the needless deletion and the recreation of FP domains

Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
src/gui/macOS/fileproviderdomainmanager_mac.mm

index 0e099b696816a4cd33e49ea52ec3b4697192c87f..2f421ebd97f8ef00a5a304c2c58a979f20c28650 100644 (file)
@@ -39,15 +39,22 @@ class FileProviderDomainManager::Private {
 
     void findExistingFileProviderDomains()
     {
+        // Wait for this to finish
+        dispatch_group_t dispatchGroup = dispatch_group_create();
+        dispatch_group_enter(dispatchGroup);
+
         [NSFileProviderManager getDomainsWithCompletionHandler:^(NSArray<NSFileProviderDomain *> * const domains, NSError * const error) {
             if(error) {
                 qCDebug(lcMacFileProviderDomainManager) << "Could not get existing file provider domains: "
                                                         << error.code
                                                         << error.localizedDescription;
+                dispatch_group_leave(dispatchGroup);
+                return;
             }
 
             if (domains.count == 0) {
                 qCDebug(lcMacFileProviderDomainManager) << "Found no existing file provider domains";
+                dispatch_group_leave(dispatchGroup);
                 return;
             }
 
@@ -76,7 +83,11 @@ class FileProviderDomainManager::Private {
                     }];
                 }
             }
+
+            dispatch_group_leave(dispatchGroup);
         }];
+
+        dispatch_group_wait(dispatchGroup, DISPATCH_TIME_FOREVER);
     }
 
     void addFileProviderDomain(const AccountState * const accountState)
@@ -213,14 +224,12 @@ FileProviderDomainManager::FileProviderDomainManager(QObject * const parent)
 {
     d.reset(new FileProviderDomainManager::Private());
 
-    d->findExistingFileProviderDomains();
+    setupFileProviderDomains();
 
     connect(AccountManager::instance(), &AccountManager::accountAdded,
             this, &FileProviderDomainManager::addFileProviderDomainForAccount);
     connect(AccountManager::instance(), &AccountManager::accountRemoved,
             this, &FileProviderDomainManager::removeFileProviderDomainForAccount);
-
-    setupFileProviderDomains(); // Initially fetch accounts in manager
 }
 
 FileProviderDomainManager *FileProviderDomainManager::instance()
@@ -235,6 +244,8 @@ FileProviderDomainManager::~FileProviderDomainManager() = default;
 
 void FileProviderDomainManager::setupFileProviderDomains()
 {
+    d->findExistingFileProviderDomains();
+
     for(auto &accountState : AccountManager::instance()->accounts()) {
         addFileProviderDomainForAccount(accountState.data());
     }