From 331ce22e62e4b440422c577490e0d02d59268465 Mon Sep 17 00:00:00 2001 From: Claudio Cambra Date: Sat, 11 Mar 2023 00:30:52 +0100 Subject: [PATCH] Scan for existing file provider domains on FileProviderDomainManager init Signed-off-by: Claudio Cambra --- .../macOS/fileproviderdomainmanager_mac.mm | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/gui/macOS/fileproviderdomainmanager_mac.mm b/src/gui/macOS/fileproviderdomainmanager_mac.mm index 526107695..178478689 100644 --- a/src/gui/macOS/fileproviderdomainmanager_mac.mm +++ b/src/gui/macOS/fileproviderdomainmanager_mac.mm @@ -36,6 +36,42 @@ class FileProviderDomainManager::Private { Private() = default; ~Private() = default; + void findExistingFileProviderDomains() + { + [NSFileProviderManager getDomainsWithCompletionHandler:^(NSArray *domains, NSError *error) { + if(error) { + qCDebug(lcMacFileProviderDomainManager) << "Could not get existing file provider domains: " + << error.code + << error.localizedDescription; + } + + for (NSFileProviderDomain *domain in domains) { + const auto accountId = QString::fromNSString(domain.identifier); + + if (const auto accountState = AccountManager::instance()->accountFromUserId(accountId); + accountState && + accountState->account() && + accountState->account()->displayName() == QString::fromNSString(domain.displayName)) { + + qCDebug(lcMacFileProviderDomainManager) << "Found existing file provider domain for account:" + << accountState->account()->displayName(); + _registeredDomains.insert(accountId, domain); + + } else { + qCDebug(lcMacFileProviderDomainManager) << "Found existing file provider domain with no known configured account:" + << domain.displayName; + [NSFileProviderManager removeDomain:domain completionHandler:^(NSError *error) { + if(error) { + qCDebug(lcMacFileProviderDomainManager) << "Error removing file provider domain: " + << error.code + << error.localizedDescription; + } + }]; + } + } + }]; + } + void addFileProviderDomain(const AccountState *accountState) { const QString accountDisplayName = accountState->account()->displayName(); @@ -153,6 +189,8 @@ FileProviderDomainManager::FileProviderDomainManager(QObject *parent) { d.reset(new FileProviderDomainManager::Private()); + d->findExistingFileProviderDomains(); + connect(AccountManager::instance(), &AccountManager::accountAdded, this, &FileProviderDomainManager::addFileProviderDomainForAccount); connect(AccountManager::instance(), &AccountManager::accountRemoved, -- 2.30.2