Browse Source

Add Favorite

Marino Faggiana 6 years ago
parent
commit
3012953fd6

+ 15 - 0
PickerFileProvider/FileProviderEnumerator.swift

@@ -89,6 +89,21 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
                 }
             }
             
+            // Favorite Directory
+            listFavoriteIdentifierRank = NCManageDatabase.sharedInstance.getTableMetadatasDirectoryFavoriteIdentifierRank()
+            for (identifier, _) in listFavoriteIdentifierRank {
+             
+                guard let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "account = %@ AND fileID = %@", providerData.account, identifier)) else {
+                    continue
+                }
+               
+                let parentItemIdentifier = providerData.getParentItemIdentifier(metadata: metadata)
+                if parentItemIdentifier != nil {
+                    let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier!, providerData: providerData)
+                    items.append(item)
+                }
+            }
+            
             observer.didEnumerate(items)
             observer.finishEnumerating(upTo: nil)
             return

+ 4 - 9
PickerFileProvider/FileProviderExtension+Actions.swift

@@ -259,7 +259,6 @@ extension FileProviderExtension {
         })
     }
     
-    /*
     override func setFavoriteRank(_ favoriteRank: NSNumber?, forItemIdentifier itemIdentifier: NSFileProviderItemIdentifier, completionHandler: @escaping (NSFileProviderItem?, Error?) -> Void) {
         
         /* ONLY iOS 11*/
@@ -276,18 +275,13 @@ extension FileProviderExtension {
             return
         }
         
-        guard let serverUrl = NCManageDatabase.sharedInstance.getServerUrl(metadata.directoryID) else {
-            completionHandler(nil, NSFileProviderError(.noSuchItem))
-            return
-        }
-        
         guard let parentItemIdentifier = providerData.getParentItemIdentifier(metadata: metadata) else {
             completionHandler(nil, NSFileProviderError(.noSuchItem))
             return
         }
          
         // Refresh Favorite Identifier Rank
-        var listFavoriteIdentifierRank = NCManageDatabase.sharedInstance.getTableMetadatasDirectoryFavoriteIdentifierRank()
+        listFavoriteIdentifierRank = NCManageDatabase.sharedInstance.getTableMetadatasDirectoryFavoriteIdentifierRank()
         var favorite = false
         
         if favoriteRank == nil {
@@ -307,9 +301,10 @@ extension FileProviderExtension {
             
         completionHandler(item, nil)
         
-        // Call the completion handler before performing any network activity or other long-running tasks. Defer these tasks to the background
+        if (favorite == true && metadata.favorite == false) || (favorite == false && metadata.favorite == true) {
+            settingFavorite(favorite, withIdentifier: itemIdentifier, parentItemIdentifier: parentItemIdentifier, metadata: metadata)
+        }
     }
-    */
     
     override func setTagData(_ tagData: Data?, forItemIdentifier itemIdentifier: NSFileProviderItemIdentifier, completionHandler: @escaping (NSFileProviderItem?, Error?) -> Void) {
         

+ 38 - 0
PickerFileProvider/FileProviderExtension+Network.swift

@@ -75,6 +75,44 @@ extension FileProviderExtension {
         })
     }
     
+    // --------------------------------------------------------------------------------------------
+    //  MARK: - Favorite
+    // --------------------------------------------------------------------------------------------
+    
+    func settingFavorite(_ favorite: Bool, withIdentifier itemIdentifier: NSFileProviderItemIdentifier, parentItemIdentifier: NSFileProviderItemIdentifier, metadata: tableMetadata) {
+
+        /* ONLY iOS 11*/
+        guard #available(iOS 11, *) else { return }
+        
+        guard let serverUrl = NCManageDatabase.sharedInstance.getServerUrl(metadata.directoryID) else {
+            return
+        }
+        
+        DispatchQueue(label: "com.nextcloud", qos: .background, attributes: .concurrent, autoreleaseFrequency: .inherit, target: nil).async {
+                
+            //NSString *fileOrFolderPath = [CCUtility returnFileNamePathFromFileName:fileName serverUrl:serverUrl activeUrl:_activeUrl];
+                
+            let ocNetworking = OCnetworking.init(delegate: nil, metadataNet: nil, withUser: self.providerData.accountUser, withUserID: self.providerData.accountUserID, withPassword: self.providerData.accountPassword, withUrl: self.providerData.accountUrl)
+            ocNetworking?.settingFavorite(metadata.fileName, serverUrl: serverUrl, favorite: favorite, success: {
+                    
+                // Change DB
+                metadata.favorite = favorite
+                _ = NCManageDatabase.sharedInstance.addMetadata(metadata)
+                    
+                // Refresh Favorite Identifier Rank
+                listFavoriteIdentifierRank = NCManageDatabase.sharedInstance.getTableMetadatasDirectoryFavoriteIdentifierRank()
+                                    
+                let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier, providerData: self.providerData)
+
+                fileProviderSignalUpdateItem[item.itemIdentifier] = item
+                self.signalEnumerator(for: [item.parentItemIdentifier, .workingSet])
+                
+            }, failure: { (errorMessage, errorCode) in
+                print("errorMessage")
+            })
+        }
+    }
+    
     // --------------------------------------------------------------------------------------------
     //  MARK: - Upload
     // --------------------------------------------------------------------------------------------

+ 3 - 0
PickerFileProvider/FileProviderExtension.swift

@@ -30,6 +30,9 @@ var timerUpload: Timer?
 var fileProviderSignalDeleteItemIdentifier = [NSFileProviderItemIdentifier:NSFileProviderItemIdentifier]()
 var fileProviderSignalUpdateItem = [NSFileProviderItemIdentifier:FileProviderItem]()
 
+// Rank favorite
+var listFavoriteIdentifierRank = [String:NSNumber]()
+
 var currentAnchor: UInt64 = 0
 var fileNamePathImport = [String]()
 

+ 1 - 2
PickerFileProvider/FileProviderItem.swift

@@ -115,7 +115,7 @@ class FileProviderItem: NSObject, NSFileProviderItem {
             
         } else {
             
-            /*
+            
             if #available(iOSApplicationExtension 11.0, *) {
                 let rank = listFavoriteIdentifierRank[metadata.fileID]
                 if (rank == nil) {
@@ -124,7 +124,6 @@ class FileProviderItem: NSObject, NSFileProviderItem {
                     favoriteRank = listFavoriteIdentifierRank[metadata.fileID]
                 }
             }
-            */
         }
         
         // Tag