From: Claudio Cambra Date: Sat, 11 Mar 2023 12:51:12 +0000 (+0100) Subject: Ensure we wait for check for existing file provider domains to finish before rushing... X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~12^2~10^2~55^2~149 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=57f174d9e3fbe630b122768f2c927f98833d41e3;p=nextcloud-desktop.git Ensure we wait for check for existing file provider domains to finish before rushing into creation of new domains in FileProviderDomainManager This stops the needless deletion and the recreation of FP domains Signed-off-by: Claudio Cambra --- diff --git a/src/gui/macOS/fileproviderdomainmanager_mac.mm b/src/gui/macOS/fileproviderdomainmanager_mac.mm index 0e099b696..2f421ebd9 100644 --- a/src/gui/macOS/fileproviderdomainmanager_mac.mm +++ b/src/gui/macOS/fileproviderdomainmanager_mac.mm @@ -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 * 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()); }