Marino Faggiana 6 жил өмнө
parent
commit
57d222fb30

+ 1 - 3
PickerFileProvider/FileProviderData.swift

@@ -36,9 +36,7 @@ class FileProviderData: NSObject {
     // Directory
     var groupURL: URL?
     var fileProviderStorageURL: URL?
-    
-    //var listFavoriteIdentifierRank = [String:NSNumber]()
-    
+        
     func setupActiveAccount() -> Bool {
         
         groupURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: NCBrandOptions.sharedInstance.capabilitiesGroups)

+ 1 - 1
PickerFileProvider/FileProviderEnumerator.swift

@@ -86,7 +86,7 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
                     providerData.createFileIdentifierOnFileSystem(metadata: metadata)
                 }
                     
-                itemIdentifierMetadata[ providerData.getItemIdentifier(metadata: metadata)] = metadata
+                itemIdentifierMetadata[providerData.getItemIdentifier(metadata: metadata)] = metadata
             }
             
             // Favorite Directory

+ 55 - 8
PickerFileProvider/FileProviderExtension.swift

@@ -81,15 +81,17 @@ class FileProviderExtension: NSFileProviderExtension, CCNetworkingDelegate {
         verifyUploadQueueInLock()
         
         if #available(iOSApplicationExtension 11.0, *) {
-            
-            listFavoriteIdentifierRank = NCManageDatabase.sharedInstance.getTableMetadatasDirectoryFavoriteIdentifierRank()
-            
+                        
             // Timer for upload
             if timerUpload == nil {
                 
                 timerUpload = Timer.init(timeInterval: TimeInterval(k_timerProcessAutoDownloadUpload), repeats: true, block: { (Timer) in
                     
+                    // new upload
                     self.uploadFile()
+                    
+                    // update workingset
+                    self.updateWorkingSet()
                 })
                 
                 RunLoop.main.add(timerUpload!, forMode: .defaultRunLoopMode)
@@ -114,11 +116,6 @@ class FileProviderExtension: NSFileProviderExtension, CCNetworkingDelegate {
         /* ONLY iOS 11*/
         guard #available(iOS 11, *) else { throw NSError(domain: NSCocoaErrorDomain, code: NSFileNoSuchFileError, userInfo:[:]) }
         
-        // Check account
-        if providerData.setupActiveAccount() == false {
-            throw  NSError(domain: NSFileProviderErrorDomain, code: NSFileProviderError.notAuthenticated.rawValue, userInfo:[:])
-        }
-        
         var maybeEnumerator: NSFileProviderEnumerator? = nil
 
         if (containerItemIdentifier == NSFileProviderItemIdentifier.rootContainer) {
@@ -164,6 +161,56 @@ class FileProviderExtension: NSFileProviderExtension, CCNetworkingDelegate {
         }
     }
     
+    // MARK: - WorkingSet
+    
+    func updateWorkingSet() {
+        
+        /* ONLY iOS 11*/
+        guard #available(iOS 11, *) else { return }
+        
+        var updateItemsWorkingSet = [NSFileProviderItemIdentifier:FileProviderItem]()
+
+        listFavoriteIdentifierRank = NCManageDatabase.sharedInstance.getTableMetadatasDirectoryFavoriteIdentifierRank()
+        
+        // (ADD) Favorite Directory
+        for (identifier, _) in listFavoriteIdentifierRank {
+            
+            guard let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "account = %@ AND fileID = %@", providerData.account, identifier)) else {
+                continue
+            }
+            
+            guard let parentItemIdentifier = providerData.getParentItemIdentifier(metadata: metadata) else {
+                continue
+            }
+            
+            let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier, providerData: providerData)
+        
+            updateItemsWorkingSet[item.itemIdentifier] = item
+        }
+        
+        // (REMOVE) Favorite Directory
+        let metadatas = NCManageDatabase.sharedInstance.getMetadatas(predicate: NSPredicate(format: "account = %@ AND directory = true AND favorite = false", providerData.account), sorted: "fileName", ascending: true)
+        if (metadatas != nil && metadatas!.count > 0) {
+            for metadata in metadatas! {
+                guard let parentItemIdentifier = providerData.getParentItemIdentifier(metadata: metadata) else {
+                    continue
+                }
+                
+                let itemIdentifier = providerData.getItemIdentifier(metadata: metadata)
+                listFavoriteIdentifierRank.removeValue(forKey: itemIdentifier.rawValue)
+                let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier, providerData: providerData)
+                
+                updateItemsWorkingSet[item.itemIdentifier] = item
+            }
+        }
+        
+        // Update
+        for (itemIdentifier, item) in updateItemsWorkingSet {
+            fileProviderSignalUpdateItem[itemIdentifier] = item
+            self.signalEnumerator(for: [.workingSet])
+        }
+    }
+    
     // MARK: - Item
 
     override func item(for identifier: NSFileProviderItemIdentifier) throws -> NSFileProviderItem {