浏览代码

fix favorite files

Marino Faggiana 6 年之前
父节点
当前提交
8c43d9fa26

+ 8 - 11
PickerFileProvider/FileProvider.swift

@@ -42,7 +42,7 @@ var changeDocumentURL: URL?
 
 // List
 var listUpdateItems = [NSFileProviderItem]()
-var listFavoriteRank = [String:NSNumber]()
+var listFavoriteIdentifierRank = [String:NSNumber]()
 
 class FileProvider: NSFileProviderExtension {
     
@@ -700,20 +700,15 @@ class FileProvider: NSFileProviderExtension {
     
     override func setFavoriteRank(_ favoriteRank: NSNumber?, forItemIdentifier itemIdentifier: NSFileProviderItemIdentifier, completionHandler: @escaping (NSFileProviderItem?, Error?) -> Void) {
 
+        completionHandler(nil, nil)
+
+        /*
+        
         /* ONLY iOS 11*/
         guard #available(iOS 11, *) else {
             return
         }
-        
-        // clear list update items
-        listUpdateItems.removeAll()
-        
-        var favorite = false
-        
-        if (favoriteRank != nil) {
-            favorite = true
-        }
-        
+                
         guard let item = try? item(for: itemIdentifier) else {
             completionHandler(nil, NSFileProviderError(.noSuchItem))
             return
@@ -722,6 +717,7 @@ class FileProvider: NSFileProviderExtension {
         // Call the completion handler before performing any network activity or other long-running tasks. Defer these tasks to the background.
         completionHandler(item, nil)
 
+        
         DispatchQueue(label: "com.nextcloud", qos: .background, attributes: .concurrent, autoreleaseFrequency: .inherit, target: nil).async {
             
             guard let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "account = %@ AND fileID = %@", account, itemIdentifier.rawValue)) else {
@@ -746,6 +742,7 @@ class FileProvider: NSFileProviderExtension {
                 })
             }
         }
+        */
     }
     
     override func setLastUsedDate(_ lastUsedDate: Date?, forItemIdentifier itemIdentifier: NSFileProviderItemIdentifier, completionHandler: @escaping (NSFileProviderItem?, Error?) -> Void) {

+ 10 - 11
PickerFileProvider/FileProviderEnumeratorWorkingSet.swift

@@ -41,7 +41,7 @@ class FileProviderEnumeratorWorkingSet: NSObject, NSFileProviderEnumerator {
         
         // clear list
         listUpdateItems.removeAll()
-        listFavoriteRank.removeAll()
+        listFavoriteIdentifierRank.removeAll()
         
         // Tag
         let tags = NCManageDatabase.sharedInstance.getTags(predicate: NSPredicate(format: "account = %@", account))
@@ -59,18 +59,17 @@ class FileProviderEnumeratorWorkingSet: NSObject, NSFileProviderEnumerator {
         }
         
         // Favorite Directory
-        let metadatas = NCManageDatabase.sharedInstance.getMetadatas(predicate: NSPredicate(format: "account = %@ AND directory = true AND favorite = true", account), sorted: "fileNameView", ascending: true)
-        if metadatas != nil {
-            for metadata in metadatas! {
+        listFavoriteIdentifierRank = NCManageDatabase.sharedInstance.getTableMetadatasDirectoryFavoriteIdentifierRank()
+        for (identifier, _) in listFavoriteIdentifierRank {
             
-                guard let serverUrl = NCManageDatabase.sharedInstance.getServerUrl(metadata.directoryID) else {
-                    continue
-                }
-                
-                listFavoriteRank[metadata.fileID] = NCManageDatabase.sharedInstance.getTableMetadatasDirectoryFavoriteRank(metadata.fileID)
-                let item = FileProviderItem(metadata: metadata, serverUrl: serverUrl)
-                items.append(item)
+            guard let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "account = %@ AND fileID = %@", account, identifier)) else {
+                continue
+            }
+            guard let serverUrl = NCManageDatabase.sharedInstance.getServerUrl(metadata.directoryID) else {
+                continue
             }
+            let item = FileProviderItem(metadata: metadata, serverUrl: serverUrl)
+            items.append(item)
         }
         
         observer.didEnumerate(items)

+ 1 - 1
PickerFileProvider/FileProviderItem.swift

@@ -160,7 +160,7 @@ class FileProviderItem: NSObject, NSFileProviderItem {
             
         } else {
             
-            favoriteRank = listFavoriteRank[metadata.fileID]
+            favoriteRank = listFavoriteIdentifierRank[metadata.fileID]
         }
         
         // Tag

+ 6 - 8
iOSClient/Database/NCManageDatabase.swift

@@ -1936,29 +1936,27 @@ class NCManageDatabase: NSObject {
         }
     }
     
-    @objc func getTableMetadatasDirectoryFavoriteRank(_ fileID: String) -> NSNumber {
+    @objc func getTableMetadatasDirectoryFavoriteIdentifierRank() -> [String:NSNumber] {
         
+        var listIdentifierRank = [String:NSNumber]()
+
         guard let tableAccount = self.getAccountActive() else {
-            return 0
+            return listIdentifierRank
         }
         
         let realm = try! Realm()
         realm.refresh()
         
-        var rank = 0 as NSNumber
         var counter = 0 as Int64
         
         let results = realm.objects(tableMetadata.self).filter("account = %@ AND directory = true AND favorite = true", tableAccount.account).sorted(byKeyPath: "fileNameView", ascending: true)
         
         for result in results {
             counter += 1
-            if result.fileID == fileID {
-                rank = NSNumber(value: Int64(counter))
-                break
-            }
+            listIdentifierRank[result.fileID] = NSNumber(value: Int64(counter))
         }
         
-        return rank
+        return listIdentifierRank
     }
     
     @objc func updateTableMetadatasContentTypeImageVideo(_ metadatas: [tableMetadata], startDirectory: String, activeUrl: String) -> Bool {