marinofaggiana 5 سال پیش
والد
کامیت
a28d2d1d19
3فایلهای تغییر یافته به همراه75 افزوده شده و 0 حذف شده
  1. 1 0
      iOSClient/CCGlobal.h
  2. 28 0
      iOSClient/Database/NCManageDatabase.swift
  3. 46 0
      iOSClient/Networking/NCNetworking.swift

+ 1 - 0
iOSClient/CCGlobal.h

@@ -185,6 +185,7 @@
 #define k_CCErrorInternalError                          -9996
 #define k_CCErrorFileAlreadyInDownload                  -9995
 #define k_CCErrorWebdavResponseError                    -9994
+#define k_CCErrorNotPermission                          -9993
 
 // Search
 #define k_minCharsSearch                                2

+ 28 - 0
iOSClient/Database/NCManageDatabase.swift

@@ -2424,6 +2424,34 @@ class NCManageDatabase: NSObject {
         return metadatas
     }
     
+    @objc func deleteMedia(predicate: NSPredicate) {
+        
+        var directoryToClearDate = [String:String]()
+        
+        let realm = try! Realm()
+
+        realm.beginWrite()
+
+        let results = realm.objects(tableMedia.self).filter(predicate)
+        
+        for result in results {
+            directoryToClearDate[result.serverUrl] = result.account
+        }
+        
+        realm.delete(results)
+        
+        do {
+            try realm.commitWrite()
+        } catch let error {
+            print("[LOG] Could not write to database: ", error)
+            return
+        }
+        
+        for (serverUrl, account) in directoryToClearDate {
+            self.setDateReadDirectory(serverUrl: serverUrl, account: account)
+        }
+    }
+    
     func createTableMedia(_ metadatasSource: [tableMetadata], lteDate: Date, gteDate: Date, account: String) -> (isDifferent: Bool, newInsert: Int) {
 
         let realm = try! Realm()

+ 46 - 0
iOSClient/Networking/NCNetworking.swift

@@ -153,6 +153,8 @@ import NCCommunication
         return result
     }
     
+    //MARK: - File <> Metadata
+    
     @objc func convertFile(_ file: NCFile, urlString: String, serverUrl : String?, fileName: String, user: String) -> tableMetadata {
         
         let metadata = tableMetadata()
@@ -242,4 +244,48 @@ import NCCommunication
         
         return metadatas
     }
+    
+    //MARK: - WebDav
+    
+    @objc func deleteMetadata(_ metadata: tableMetadata, with notificationCenterPost:Bool, completion: @escaping (_ errorCode: Int, _ message: String)->()) {
+        
+        // verify permission
+        let permission = NCUtility.sharedInstance.permissionsContainsString(metadata.permissions, permissions: k_permission_can_delete)
+        if metadata.permissions != "" && permission == false {
+            if notificationCenterPost {
+                let userInfo: [String : Any] = ["metadata": metadata, "errorCode": Int(k_CCErrorNotPermission)]
+                NotificationCenter.default.post(name: Notification.Name.init(rawValue: k_notificationCenter_deleteFile), object: nil, userInfo: userInfo)
+            }
+            completion(Int(k_CCErrorNotPermission), "_no_permission_delete_file_")
+            return
+        }
+                
+        let serverUrlFileName = metadata.serverUrl + "/" + metadata.fileName
+        NCCommunication.sharedInstance.deleteFileOrFolder(serverUrlFileName, account: metadata.account) { (account, errorCode, errorDescription) in
+            if errorCode == 0 || errorCode == kOCErrorServerPathNotFound {
+                
+                do {
+                    try FileManager.default.removeItem(atPath: CCUtility.getDirectoryProviderStorageOcId(metadata.ocId))
+                } catch { }
+                                       
+                NCManageDatabase.sharedInstance.deleteMetadata(predicate: NSPredicate(format: "ocId == %@", metadata.ocId))
+                NCManageDatabase.sharedInstance.deleteMedia(predicate: NSPredicate(format: "ocId == %@", metadata.ocId))
+                NCManageDatabase.sharedInstance.deleteLocalFile(predicate: NSPredicate(format: "ocId == %@", metadata.ocId))
+
+                if metadata.directory {
+                    NCManageDatabase.sharedInstance.deleteDirectoryAndSubDirectory(serverUrl: CCUtility.stringAppendServerUrl(metadata.serverUrl, addFileName: metadata.fileName), account: metadata.account)
+                }
+            }
+            
+            if notificationCenterPost {
+                let userInfo: [String : Any] = ["metadata": metadata, "errorCode": Int(errorCode)]
+                NotificationCenter.default.post(name: Notification.Name.init(rawValue: k_notificationCenter_deleteFile), object: nil, userInfo: userInfo)
+            }
+            if errorDescription != nil {
+                completion(errorCode, errorDescription!)
+            } else {
+                completion(errorCode, "")
+            }
+        }
+    }
 }