// // FileProviderEnumerator.swift // SimpleX Service // // Created by Evgeny on 01/06/2022. // Copyright © 2022 SimpleX Chat. All rights reserved. // import FileProvider class FileProviderEnumerator: NSObject, NSFileProviderEnumerator { var enumeratedItemIdentifier: NSFileProviderItemIdentifier init(enumeratedItemIdentifier: NSFileProviderItemIdentifier) { logger.debug("FileProviderExtension FileProviderEnumerator.init") self.enumeratedItemIdentifier = enumeratedItemIdentifier super.init() } func identifierForItemAtURL(_ url: URL, completionHandler: @escaping (NSFileProviderItemIdentifier) -> Void) { // logger.debug("FileProviderExtension.identifierForItemAtURL") completionHandler(SERVICE_PROXY_ITEM_ID) } func invalidate() { // TODO: perform invalidation of server connection if necessary } func enumerateItems(for observer: NSFileProviderEnumerationObserver, startingAt page: NSFileProviderPage) { /* TODO: - inspect the page to determine whether this is an initial or a follow-up request If this is an enumerator for a directory, the root container or all directories: - perform a server request to fetch directory contents If this is an enumerator for the active set: - perform a server request to update your local database - fetch the active set from your local database - inform the observer about the items returned by the server (possibly multiple times) - inform the observer that you are finished with this page */ } func enumerateChanges(for observer: NSFileProviderChangeObserver, from anchor: NSFileProviderSyncAnchor) { /* TODO: - query the server for updates since the passed-in sync anchor If this is an enumerator for the active set: - note the changes in your local database - inform the observer about item deletions and updates (modifications + insertions) - inform the observer when you have finished enumerating up to a subsequent sync anchor */ } }