Scan for existing file provider domains on FileProviderDomainManager init
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Fri, 10 Mar 2023 23:30:52 +0000 (00:30 +0100)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Fri, 12 May 2023 05:21:26 +0000 (13:21 +0800)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
src/gui/macOS/fileproviderdomainmanager_mac.mm

index 526107695f84245b3568124b303075d784d016f6..178478689d9b0ed897902818d2d7bf9a35310d35 100644 (file)
@@ -36,6 +36,42 @@ class FileProviderDomainManager::Private {
     Private() = default;
     ~Private() = default;
 
+    void findExistingFileProviderDomains()
+    {
+        [NSFileProviderManager getDomainsWithCompletionHandler:^(NSArray<NSFileProviderDomain *> *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,