From bf4fc01b39e0d0e8c7b68dcadf55a0d8995a27ef Mon Sep 17 00:00:00 2001 From: Claudio Cambra Date: Tue, 20 Feb 2024 16:51:58 +0800 Subject: [PATCH] Extract enumeration of materialised files for each domain manager into a separate slot Signed-off-by: Claudio Cambra --- .../fileprovidersettingscontroller_mac.mm | 89 ++++++++++--------- 1 file changed, 48 insertions(+), 41 deletions(-) diff --git a/src/gui/macOS/fileprovidersettingscontroller_mac.mm b/src/gui/macOS/fileprovidersettingscontroller_mac.mm index cd3749df5..b18a25d7a 100644 --- a/src/gui/macOS/fileprovidersettingscontroller_mac.mm +++ b/src/gui/macOS/fileprovidersettingscontroller_mac.mm @@ -185,6 +185,53 @@ public: return _fileProviderDomainSyncStatuses.value(userIdAtHost); } +public slots: + void enumerateMaterialisedFilesForDomainManager(NSFileProviderManager * const managerForDomain, + NSFileProviderDomain * const domain) + { + const id enumerator = [managerForDomain enumeratorForMaterializedItems]; + Q_ASSERT(enumerator != nil); + [enumerator retain]; + + FileProviderStorageUseEnumerationObserver *const storageUseObserver = [[FileProviderStorageUseEnumerationObserver alloc] init]; + [storageUseObserver retain]; + storageUseObserver.enumerationFinishedHandler = ^(NSError *const error) { + qCInfo(lcFileProviderSettingsController) << "Enumeration finished for" << domain.identifier; + if (error != nil) { + qCWarning(lcFileProviderSettingsController) << "Error while enumerating storage use" << error.localizedDescription; + [storageUseObserver release]; + [enumerator release]; + return; + } + + const auto items = storageUseObserver.materialisedItems; + Q_ASSERT(items != nil); + + // Remember that OCC::Account::userIdAtHost == domain.identifier for us + const auto qDomainIdentifier = QString::fromNSString(domain.identifier); + QVector qMaterialisedItems; + qMaterialisedItems.reserve(items.count); + for (const id item in items) { + const auto itemMetadata = FileProviderItemMetadata::fromNSFileProviderItem(item, qDomainIdentifier); + const auto storageUsage = _storageUsage.value(qDomainIdentifier) + itemMetadata.documentSize(); + qCDebug(lcFileProviderSettingsController) << "Adding item" << itemMetadata.identifier() + << "with size" << itemMetadata.documentSize() + << "to storage usage for account" << qDomainIdentifier + << "with total size" << storageUsage; + qMaterialisedItems.append(itemMetadata); + _storageUsage.insert(qDomainIdentifier, storageUsage); + } + _materialisedFiles.insert(qDomainIdentifier, qMaterialisedItems); + + emit q->localStorageUsageForAccountChanged(qDomainIdentifier); + emit q->materialisedItemsForAccountChanged(qDomainIdentifier); + + [storageUseObserver release]; + [enumerator release]; + }; + [enumerator enumerateItemsForObserver:storageUseObserver startingAtPage:NSFileProviderInitialPageSortedByName]; + } + private slots: void updateDomainSyncStatuses() { @@ -237,47 +284,7 @@ private: return; } - const id enumerator = [managerForDomain enumeratorForMaterializedItems]; - Q_ASSERT(enumerator != nil); - [enumerator retain]; - - FileProviderStorageUseEnumerationObserver *const storageUseObserver = [[FileProviderStorageUseEnumerationObserver alloc] init]; - [storageUseObserver retain]; - storageUseObserver.enumerationFinishedHandler = ^(NSError *const error) { - qCInfo(lcFileProviderSettingsController) << "Enumeration finished for" << domain.identifier; - if (error != nil) { - qCWarning(lcFileProviderSettingsController) << "Error while enumerating storage use" << error.localizedDescription; - [storageUseObserver release]; - [enumerator release]; - return; - } - - const auto items = storageUseObserver.materialisedItems; - Q_ASSERT(items != nil); - - // Remember that OCC::Account::userIdAtHost == domain.identifier for us - const auto qDomainIdentifier = QString::fromNSString(domain.identifier); - QVector qMaterialisedItems; - qMaterialisedItems.reserve(items.count); - for (const id item in items) { - const auto itemMetadata = FileProviderItemMetadata::fromNSFileProviderItem(item, qDomainIdentifier); - const auto storageUsage = _storageUsage.value(qDomainIdentifier) + itemMetadata.documentSize(); - qCDebug(lcFileProviderSettingsController) << "Adding item" << itemMetadata.identifier() - << "with size" << itemMetadata.documentSize() - << "to storage usage for account" << qDomainIdentifier - << "with total size" << storageUsage; - qMaterialisedItems.append(itemMetadata); - _storageUsage.insert(qDomainIdentifier, storageUsage); - } - _materialisedFiles.insert(qDomainIdentifier, qMaterialisedItems); - - emit q->localStorageUsageForAccountChanged(qDomainIdentifier); - emit q->materialisedItemsForAccountChanged(qDomainIdentifier); - - [storageUseObserver release]; - [enumerator release]; - }; - [enumerator enumerateItemsForObserver:storageUseObserver startingAtPage:NSFileProviderInitialPageSortedByName]; + enumerateMaterialisedFilesForDomainManager(managerForDomain, domain); } }]; } -- 2.30.2