FileProviderExtension workingSet enumerator didn't call

247 Views Asked by At

I have a problem with working set enumerator (Recents tab) in Files app. I implement a working enumerator for Folders, it runs enumerateItems(for observer method when I move to the folder in UI and everything works fine. And I have a different enumerator for working set too, but it is not created and enumerated anything.

    override func enumerator(for containerItemIdentifier: NSFileProviderItemIdentifier) throws -> NSFileProviderEnumerator {  
        let maybeEnumerator: NSFileProviderEnumerator?  
        if (containerItemIdentifier == NSFileProviderItemIdentifier.rootContainer) {  
            let directory = repository.directory(for: containerItemIdentifier)!  
            maybeEnumerator = FileProviderFolderEnumerator()  
        } else if (containerItemIdentifier == NSFileProviderItemIdentifier.workingSet) {  
            maybeEnumerator = FileProviderWorkingSetEnumerator() // not called  
        } else {  
            _ = repository.item(for: containerItemIdentifier)  
            if repository.isDirectory(at: containerItemIdentifier) {  
                let directory = repository.directory(for: containerItemIdentifier)!  
                maybeEnumerator = FileProviderFolderEnumerator() // works fine  
            } else {  
                maybeEnumerator = FileProviderItemEnumerator()  
            }  
        }  
        guard let enumerator = maybeEnumerator else {  
            throw NSError(domain: NSCocoaErrorDomain, code: NSFeatureUnsupportedError, userInfo:[:])  
        }  
        return enumerator  
    }

I'm trying to call working set enumerator in startProvidingItem method using signal, but it doesn't work.

override func startProvidingItem(at url: URL, completionHandler: @escaping ((_ error: Error?) -> Void)) {  
    loadItem {  
        //when done with loading  
        NSFileProviderManager.default.signalEnumerator(  
            for: NSFileProviderItemIdentifier.workingSet,  
            completionHandler: { error in  
                if let err = error { print(err) }  
        }  
    }  
} 

Does FileProviderWorkingSetEnumerator initialize automatically when I open Recents tab in Files app? Should I call it somehow directly from FileExtension?

Thank you!

1

There are 1 best solutions below

0
On

The working set enumerator doesn't work like what you think. The file provider extension will enumerate working set in background, even before you open Files app. That's why you need to prepare working set data in offline. The WWDC 2017 document might help.