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 <claudio.cambra@nextcloud.com>
This commit is contained in:
Claudio Cambra 2023-03-11 13:51:12 +01:00
parent ddd564bc5c
commit 57f174d9e3
No known key found for this signature in database
GPG key ID: C839200C384636B0

View 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());
}