Marino Faggiana 6 роки тому
батько
коміт
90f926c566

+ 66 - 9
PickerFileProvider/FileProvider.swift

@@ -189,7 +189,6 @@ class FileProvider: NSFileProviderExtension {
         }
             
         // resolve the given identifier to a file on disk
-            
         guard let item = try? item(for: identifier) else {
             return nil
         }
@@ -298,7 +297,7 @@ class FileProvider: NSFileProviderExtension {
                 _ = self.copyFile("\(directoryUser)/\(metadata.fileID)", toPath: url.path)
                 completionHandler(nil)
                     
-            }, failure: { (message, errorCode) in
+            }, failure: { (errorMessage, errorCode) in
                 completionHandler(NSFileProviderError(.serverUnreachable))
             })
                 
@@ -492,7 +491,7 @@ class FileProvider: NSFileProviderExtension {
                             completionHandler(nil)
                         }
                             
-                    }, failure: { (message, errorCode) in
+                    }, failure: { (errorMessage, errorCode) in
 
                         perThumbnailCompletionHandler(itemIdentifier, nil, NSFileProviderError(.serverUnreachable))
                             
@@ -576,7 +575,7 @@ class FileProvider: NSFileProviderExtension {
                 
             completionHandler(item, nil)
             
-        }, failure: { (message, errorCode) in
+        }, failure: { (errorMessage, errorCode) in
             completionHandler(nil, NSFileProviderError(.serverUnreachable))
         })
     }
@@ -592,12 +591,12 @@ class FileProvider: NSFileProviderExtension {
         listUpdateItems.removeAll()
         
         guard let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "account = %@ AND fileID = %@", account, itemIdentifier.rawValue)) else {
-            completionHandler(nil)
+            completionHandler(NSFileProviderError(.noSuchItem))
             return
         }
         
         guard let serverUrl = NCManageDatabase.sharedInstance.getServerUrl(metadata.directoryID) else {
-            completionHandler(nil)
+            completionHandler(NSFileProviderError(.noSuchItem))
             return
         }
         
@@ -625,7 +624,7 @@ class FileProvider: NSFileProviderExtension {
             
             completionHandler(nil)
             
-        }, failure: { (error, errorCode) in
+        }, failure: { (errorMessage, errorCode) in
             
             if errorCode == 404 {
                 completionHandler(nil)
@@ -636,6 +635,64 @@ class FileProvider: NSFileProviderExtension {
     }
     
     override func renameItem(withIdentifier itemIdentifier: NSFileProviderItemIdentifier, toName itemName: String, completionHandler: @escaping (NSFileProviderItem?, Error?) -> Void) {
+        
+        /* ONLY iOS 11*/
+        guard #available(iOS 11, *) else {
+            return
+        }
+        
+        // clear list update items
+        listUpdateItems.removeAll()
+        
+        guard let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "account = %@ AND fileID = %@", account, itemIdentifier.rawValue)) else {
+            completionHandler(nil, NSFileProviderError(.noSuchItem))
+            return
+        }
+        
+        guard let serverUrl = NCManageDatabase.sharedInstance.getServerUrl(metadata.directoryID) else {
+            completionHandler(nil, NSFileProviderError(.noSuchItem))
+            return
+        }
+        
+        guard let directoryTable = NCManageDatabase.sharedInstance.getTableDirectory(predicate: NSPredicate(format: "serverUrl = %@", serverUrl)) else {
+            completionHandler(nil, NSFileProviderError(.noSuchItem))
+            return
+        }
+        
+        // resolve the given identifier to a file on disk
+        guard let item = try? item(for: itemIdentifier) else {
+            completionHandler(nil, NSFileProviderError(.noSuchItem))
+            return
+        }
+        
+        let fileName = serverUrl + "/" + item.filename
+        let fileNameTo = serverUrl + "/" + itemName
+        
+        ocNetworking?.moveFileOrFolder(fileName, fileNameTo: fileNameTo, success: {
+            
+            metadata.fileName = itemName
+            metadata.fileNameView = itemName
+            
+            guard let metadata = NCManageDatabase.sharedInstance.addMetadata(metadata) else {
+                completionHandler(nil, NSFileProviderError(.noSuchItem))
+                return
+            }
+            
+            if metadata.directory {
+                
+                NCManageDatabase.sharedInstance.setDirectory(serverUrl: fileName, serverUrlTo: fileNameTo, etag: nil, fileID: nil, encrypted: directoryTable.e2eEncrypted)
+
+            } else {
+                
+                NCManageDatabase.sharedInstance.setLocalFile(fileID: metadata.fileID, date: nil, exifDate: nil, exifLatitude: nil, exifLongitude: nil, fileName: itemName)
+            }
+            
+            completionHandler(item, nil)
+            
+        }, failure: { (errorMessage, errorCode) in
+            completionHandler(nil, NSFileProviderError(.serverUnreachable))
+        })
+        
         print("[LOG] rename")
         completionHandler(nil, nil)
     }
@@ -834,7 +891,7 @@ class FileProvider: NSFileProviderExtension {
             }
             completionHandler(item, nil)
 
-        }, failure: { (message, errorCode) in
+        }, failure: { (errorMessage, errorCode) in
             completionHandler(nil, NSFileProviderError(.serverUnreachable))
         })
     }
@@ -873,7 +930,7 @@ class FileProvider: NSFileProviderExtension {
             // Refresh
             self.refreshEnumerator(identifier: identifier, serverUrl: serverUrl)
             
-        }, failure: { (message, errorCode) in
+        }, failure: { (errorMessage, errorCode) in
             // Remove from dictionary
             self.listUpload.removeValue(forKey: identifier.rawValue)
             // Refresh

+ 1 - 1
PickerFileProvider/FileProviderEnumerator.swift

@@ -111,7 +111,7 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
                     observer.finishEnumerating(upTo: nil)
                 }
                 
-            }, failure: { (message, errorCode) in
+            }, failure: { (errorMessage, errorCode) in
                 
                 // select item from database
                 if (metadatas != nil) {

+ 2 - 2
PickerFileProvider/FileProviderItem.swift

@@ -32,9 +32,9 @@ class FileProviderItem: NSObject, NSFileProviderItem {
     var capabilities: NSFileProviderItemCapabilities {              // The item's capabilities
         
         if (self.isDirectory) {
-            return [ .allowsAddingSubItems, .allowsContentEnumerating, .allowsReading, .allowsDeleting ]
+            return [ .allowsAddingSubItems, .allowsContentEnumerating, .allowsReading, .allowsDeleting, .allowsRenaming ]
         } else {
-            return [ .allowsReading, .allowsDeleting, .allowsWriting ]
+            return [ .allowsWriting, .allowsReading, .allowsDeleting, .allowsRenaming ]
         }
     }