marinofaggiana 5 år sedan
förälder
incheckning
4584d971ab

+ 55 - 0
iOSClient/Database/NCManageDatabase.swift

@@ -1781,6 +1781,61 @@ class NCManageDatabase: NSObject {
         return Array(metadatas.map { tableMetadata.init(value:$0) })
     }
 
+    @objc func addMetadata(files: [NCFile], account: String, serverUrl: String, removeFirst: Bool) {
+    
+        var isNotFirstFileOfList: Bool = false
+        let realm = try! Realm()
+        
+        do {
+            try realm.write {
+                for file in files {
+                    
+                    if removeFirst == true && isNotFirstFileOfList == false {
+                        isNotFirstFileOfList = true
+                        continue
+                    }
+                    
+                    let metadata = tableMetadata()
+                    
+                    metadata.account = account
+                    metadata.commentsUnread = file.commentsUnread
+                    metadata.contentType = file.contentType
+                    metadata.date = file.date
+                    metadata.directory = file.directory
+                    metadata.e2eEncrypted = file.e2eEncrypted
+                    metadata.etag = file.etag
+                    metadata.favorite = file.favorite
+                    metadata.fileId = file.fileId
+                    metadata.fileName = file.fileName
+                    metadata.fileNameView = file.fileName
+                    metadata.hasPreview = file.hasPreview
+                    metadata.mountType = file.mountType
+                    metadata.ocId = file.ocId
+                    metadata.ownerId = file.ownerId
+                    metadata.ownerDisplayName = file.ownerDisplayName
+                    metadata.permissions = file.permissions
+                    metadata.quotaUsedBytes = file.quotaUsedBytes
+                    metadata.quotaAvailableBytes = file.quotaAvailableBytes
+                    metadata.resourceType = file.resourceType
+                    metadata.serverUrl = serverUrl
+                    metadata.size = file.size
+                
+                    realm.add(metadata, update: .all)
+                }
+            }
+        } catch let error {
+            print("[LOG] Could not write to database: ", error)
+            return
+        }
+        
+        // Create directory records
+        for file in files {
+            if file.directory { _ = self.addDirectory(encrypted: file.e2eEncrypted, favorite: file.favorite, ocId: file.ocId, permissions: file.permissions, serverUrl: CCUtility.stringAppendServerUrl(serverUrl, addFileName: file.fileName), account: account) }
+        }
+        
+        self.setDateReadDirectory(serverUrl: serverUrl, account: account)
+    }
+    
     @objc func deleteMetadata(predicate: NSPredicate) {
         
         var directoryToClearDate = [String:String]()

+ 22 - 5
iOSClient/Networking/NCCommunication.swift

@@ -182,11 +182,15 @@ class NCCommunication: SessionDelegate {
         """
 
         // url
+        var serverUrl = String(serverUrl)
         var url: URLConvertible
         do {
+            if depth == "1" && serverUrl.last != "/" { serverUrl = serverUrl + "/" }
+            if depth == "0" && serverUrl.last == "/" { serverUrl = String(serverUrl.removeLast()) }
+            serverUrl = serverUrl.addingPercentEncoding(withAllowedCharacters: CharacterSet(charactersIn: ";?@&=$+{}<>,!'* ").inverted)! //";?@&=$+{}<>,!'*"
             try url = serverUrl.asURL()
         } catch let error {
-            completionHandler(files, error)
+            completionHandler(files,error)
             return
         }
         
@@ -220,9 +224,22 @@ class NCCommunication: SessionDelegate {
                     for element in elements {
                         let file = NCFile()
                         if let href = element["d:href"].text {
-                            file.path = href.removingPercentEncoding ?? ""
-                            if isNotFirstFileOfList { file.fileName = (file.path as NSString).lastPathComponent }
-                            if href.last == "/" { file.directory = true }
+                            var fileNamePath = href
+                            // directory
+                            if href.last == "/" {
+                                fileNamePath = String(href[..<href.index(before: href.endIndex)])
+                                file.directory = true
+                            }
+                            // path
+                            file.path = (fileNamePath as NSString).deletingLastPathComponent + "/"
+                            file.path = file.path.removingPercentEncoding ?? ""
+                            // fileName
+                            if isNotFirstFileOfList {
+                                file.fileName = (fileNamePath as NSString).lastPathComponent
+                                file.fileName = file.fileName.removingPercentEncoding ?? ""
+                            } else {
+                                file.fileName = ""
+                            }
                         }
                         let propstat = element["d:propstat"][0]
                         
@@ -278,7 +295,7 @@ class NCCommunication: SessionDelegate {
                         
                         // nc:
                         if let encrypted = propstat["d:prop", "nc:encrypted"].text {
-                            file.encrypted = (encrypted as NSString).boolValue
+                            file.e2eEncrypted = (encrypted as NSString).boolValue
                         }
                         if let haspreview = propstat["d:prop", "nc:has-preview"].text {
                             file.hasPreview = (haspreview as NSString).boolValue

+ 1 - 1
iOSClient/Networking/NCCommunicationModel.swift

@@ -31,7 +31,7 @@ import Foundation
     @objc var contentType = ""
     @objc var date = NSDate()
     @objc var directory: Bool = false
-    @objc var encrypted: Bool = false
+    @objc var e2eEncrypted: Bool = false
     @objc var etag = ""
     @objc var favorite: Bool = false
     @objc var fileId = ""