marinofaggiana 4 years ago
parent
commit
656e805197

+ 11 - 4
File Provider Extension/FileProviderEnumerator.swift

@@ -241,16 +241,19 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
                     
                     if errorCode == 0 && files != nil  && files!.count >= 1 {
                         
+                        // Metadata conversion
+                        var metadataFolder = tableMetadata()
+                        let metadatas = NCNetworking.sharedInstance.convertFilesToMetadatas(files!, metadataFolder: &metadataFolder)
+                        
                         // Update directory etag
-                        let directory = files![0]
-                        NCManageDatabase.sharedInstance.setDirectory(serverUrl: serverUrl, serverUrlTo: nil, etag: directory.etag, ocId: directory.ocId, encrypted: directory.e2eEncrypted, richWorkspace: nil, account: account)
+                        NCManageDatabase.sharedInstance.setDirectory(serverUrl: serverUrl, serverUrlTo: nil, etag: metadataFolder.etag, ocId: metadataFolder.ocId, encrypted: metadataFolder.e2eEncrypted, richWorkspace: nil, account: account)
                                                 
                         // Update DB
                         NCManageDatabase.sharedInstance.deleteMetadata(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND status == %d", account, serverUrl, k_metadataStatusNormal))
                         NCManageDatabase.sharedInstance.setDateReadDirectory(serverUrl: serverUrl, account: account)
                         let metadatasInDownload = NCManageDatabase.sharedInstance.getMetadatas(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND (status == %d OR status == %d OR status == %d OR status == %d)", account, serverUrl, k_metadataStatusWaitDownload, k_metadataStatusInDownload, k_metadataStatusDownloading, k_metadataStatusDownloadError), sorted: nil, ascending: false)
                         let metadatasInUpload = NCManageDatabase.sharedInstance.getMetadatas(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND (status == %d OR status == %d OR status == %d OR status == %d)", account, serverUrl, k_metadataStatusWaitUpload, k_metadataStatusInUpload, k_metadataStatusUploading, k_metadataStatusUploadError), sorted: nil, ascending: false)
-                        NCManageDatabase.sharedInstance.addMetadatas(files: files!, account: account, serverUrl: serverUrl, removeFirst: true)
+                        NCManageDatabase.sharedInstance.addMetadatas(metadatas)
                          
                         if metadatasInDownload != nil {
                             NCManageDatabase.sharedInstance.addMetadatas(metadatasInDownload!)
@@ -281,6 +284,10 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
             
              if errorCode == 0 && files != nil  && files!.count >= 1 {
                 
+                // Metadata conversion
+                var metadataFolder = tableMetadata()
+                let metadatas = NCNetworking.sharedInstance.convertFilesToMetadatas(files!, metadataFolder: &metadataFolder)
+                
                 // Prepare DB
                 if offset == 0 {
                     NCManageDatabase.sharedInstance.deleteMetadata(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND status == %d", account, serverUrl, k_metadataStatusNormal))
@@ -295,7 +302,7 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
                     }
                 }
                 
-                NCManageDatabase.sharedInstance.addMetadatas(files: files!, account: account, serverUrl: serverUrl, removeFirst: true)
+                NCManageDatabase.sharedInstance.addMetadatas(metadatas)
             }
             
             let metadatas = NCManageDatabase.sharedInstance.getMetadatas(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", fileProviderData.sharedInstance.account, serverUrl), page: page, limit: fileProviderData.sharedInstance.itemForPage, sorted: "fileName", ascending: true)

+ 5 - 3
Share/NCSelectDestination.m

@@ -230,10 +230,12 @@
         
         if (errorCode == 0 && files.count >= 1) {
 
-            NCFile *fileDirectory = files[0];
+            // Metadata conversion
+            tableMetadata *metadataFolder = [tableMetadata new];
+            NSArray *metadatas = [[NCNetworking sharedInstance] convertFilesToMetadatas:files metadataFolder:&metadataFolder];
         
             // Update directory etag
-            [[NCManageDatabase sharedInstance] setDirectoryWithServerUrl:_serverUrl serverUrlTo:nil etag:fileDirectory.etag ocId:fileDirectory.ocId encrypted:fileDirectory.e2eEncrypted richWorkspace:nil account:account];
+            [[NCManageDatabase sharedInstance] setDirectoryWithServerUrl:_serverUrl serverUrlTo:nil etag:metadataFolder.etag ocId:metadataFolder.ocId encrypted:metadataFolder.e2eEncrypted richWorkspace:nil account:account];
             
             // Delete metadata
             [[NCManageDatabase sharedInstance] deleteMetadataWithPredicate:[NSPredicate predicateWithFormat:@"account == %@ AND serverUrl == %@ AND status == %d", account, _serverUrl, k_metadataStatusNormal]];
@@ -242,7 +244,7 @@
             NSArray *metadatasInDownload = [[NCManageDatabase sharedInstance] getMetadatasWithPredicate:[NSPredicate predicateWithFormat:@"account == %@ AND serverUrl == %@ AND (status == %d OR status == %d OR status == %d OR status == %d)", account, _serverUrl, k_metadataStatusWaitDownload, k_metadataStatusInDownload, k_metadataStatusDownloading, k_metadataStatusDownloadError] sorted:nil ascending:NO];
             
             // Insert in Database
-            [[NCManageDatabase sharedInstance] addMetadatasWithFiles:files account:account serverUrl:_serverUrl removeFirst:true];
+            [[NCManageDatabase sharedInstance] addMetadatas:metadatas];
             
             // reinsert metadatas in Download
             if (metadatasInDownload) {

+ 14 - 130
iOSClient/Database/NCManageDatabase.swift

@@ -1934,77 +1934,6 @@ class NCManageDatabase: NSObject {
         return Array(metadatas.map { tableMetadata.init(value:$0) })
     }
 
-    @objc func addMetadatas(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
-                    }
-                    
-                    if !CCUtility.getShowHiddenFiles() && file.fileName.first == "." {
-                        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
-                    
-                    CCUtility.insertTypeFileIconName(file.fileName, metadata: metadata)
-                                    
-                    realm.add(metadata, update: .all)
-                    
-                    // Directory
-                    if file.directory {
-                            
-                        let directory = tableDirectory()
-                        
-                        directory.account = account
-                        directory.e2eEncrypted = file.e2eEncrypted
-                        directory.favorite = file.favorite
-                        directory.ocId = file.ocId
-                        directory.permissions = file.permissions
-                        directory.serverUrl = CCUtility.stringAppendServerUrl(serverUrl, addFileName: file.fileName)
-                        
-                        realm.add(directory, update: .all)
-                    }
-                }
-            }
-        } catch let error {
-            print("[LOG] Could not write to database: ", error)
-            return
-        }
-        
-        self.setDateReadDirectory(serverUrl: serverUrl, account: account)
-    }
-    
     @objc func deleteMetadata(predicate: NSPredicate) {
         
         var directoryToClearDate = [String:String]()
@@ -2521,7 +2450,7 @@ class NCManageDatabase: NSObject {
         }
     }
     
-    func createTableMedia(_ files: [NCFile], lteDate: Date, gteDate: Date, account: String) -> (isDifferent: Bool, newInsert: Int) {
+    func createTableMedia(_ metadatasSource: [tableMetadata], lteDate: Date, gteDate: Date, account: String) -> (isDifferent: Bool, newInsert: Int) {
 
         let realm = try! Realm()
         realm.refresh()
@@ -2538,17 +2467,17 @@ class NCManageDatabase: NSObject {
         var oldServerUrl = ""
         var isValidMetadata = true
         
-        var filesBuffer = [NCFile]()
+        var metadatas = [tableMetadata]()
         
         let serversUrlLocked = realm.objects(tableDirectory.self).filter(NSPredicate(format: "account == %@ AND lock == true", account)).map { $0.serverUrl } as Array
         if (serversUrlLocked.count > 0) {
-            for file in files {
+            for metadata in metadatasSource {
                 // Verify Lock
-                if (file.serverUrl != oldServerUrl) {
+                if (metadata.serverUrl != oldServerUrl) {
                     var foundLock = false
-                    oldServerUrl = file.serverUrl
+                    oldServerUrl = metadata.serverUrl
                     for serverUrlLocked in serversUrlLocked {
-                        if file.serverUrl.contains(serverUrlLocked) {
+                        if metadata.serverUrl.contains(serverUrlLocked) {
                             foundLock = true
                             break
                         }
@@ -2556,11 +2485,11 @@ class NCManageDatabase: NSObject {
                     isValidMetadata = !foundLock
                 }
                 if isValidMetadata {
-                    filesBuffer.append(file)
+                    metadatas.append(tableMetadata.init(value: metadata))
                 }
             }
         } else {
-            filesBuffer = files
+            metadatas = metadatasSource
         }
         
         do {
@@ -2570,8 +2499,11 @@ class NCManageDatabase: NSObject {
                 let results = realm.objects(tableMedia.self).filter("account == %@ AND date >= %@ AND date <= %@", account, gteDate, lteDate)
                 etagsDelete = Array(results.map { $0.etag })
                 numDelete = results.count
-                etagsInsert = Array(filesBuffer.map { $0.etag })
-                numInsert = filesBuffer.count
+                
+                // INSERT
+                let photos = Array(metadatas.map { tableMedia.init(value:$0) })
+                etagsInsert = Array(photos.map { $0.etag })
+                numInsert = photos.count
                 
                 // CALCULATE DIFFERENT RETURN
                 if etagsDelete.count == etagsInsert.count && etagsDelete.sorted() == etagsInsert.sorted() {
@@ -2581,9 +2513,7 @@ class NCManageDatabase: NSObject {
                     newInsert = numInsert - numDelete
                     
                     realm.delete(results)
-                    for file in filesBuffer {
-                        realm.add(convertFileToMedia(file, account: account), update: .all)
-                    }
+                    realm.add(photos, update: .all)
                 }
             }
         } catch let error {
@@ -2624,52 +2554,6 @@ class NCManageDatabase: NSObject {
         }
     }
     
-    private func convertFileToMedia(_ file: NCFile, account: String) -> tableMedia {
-        
-        let media = tableMedia()
-        
-        media.account = account
-        media.commentsUnread = file.commentsUnread
-        media.contentType = file.contentType
-        media.creationDate = file.creationDate
-        media.date = file.date
-        media.directory = file.directory
-        media.e2eEncrypted = file.e2eEncrypted
-        media.etag = file.etag
-        media.favorite = file.favorite
-        media.fileId = file.fileId
-        media.fileName = file.fileName
-        media.fileNameView = file.fileName
-        media.hasPreview = file.hasPreview
-        media.mountType = file.mountType
-        media.ocId = file.ocId
-        media.ownerId = file.ownerId
-        media.ownerDisplayName = file.ownerDisplayName
-        media.permissions = file.permissions
-        media.quotaUsedBytes = file.quotaUsedBytes
-        media.quotaAvailableBytes = file.quotaAvailableBytes
-        media.richWorkspace = file.richWorkspace
-        media.resourceType = file.resourceType
-        media.serverUrl = file.serverUrl
-        media.size = file.size
-        
-        if let unmanagedFileUTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (file.fileName as NSString).pathExtension as CFString, nil) {
-            let fileUTI = unmanagedFileUTI.takeRetainedValue()
-            if UTTypeConformsTo(fileUTI, kUTTypeImage) {
-                media.typeFile = k_metadataTypeFile_image
-                media.iconName = "file_photo"
-            } else if UTTypeConformsTo(fileUTI, kUTTypeMovie) {
-                media.typeFile = k_metadataTypeFile_video
-                media.iconName = "file_movie"
-            } else if UTTypeConformsTo(fileUTI, kUTTypeAudio) {
-                media.typeFile = k_metadataTypeFile_audio
-                media.iconName = "file_audio"
-            }
-        }
-        
-        return media
-    }
-    
     //MARK: -
     //MARK: Table Photo Library
     

+ 3 - 2
iOSClient/Media/NCMedia.swift

@@ -624,14 +624,15 @@ extension NCMedia {
             self.refreshControl.endRefreshing()
             NCUtility.sharedInstance.stopActivityIndicator()
             
-            if errorCode == 0 && account == self.appDelegate.activeAccount {
+            if errorCode == 0 && account == self.appDelegate.activeAccount && files != nil {
                                     
                 var isDifferent: Bool = false
                 var newInsert: Int = 0
+                let metadatas = NCNetworking.sharedInstance.convertFilesToMetadatas(files!, metadataFolder: nil)
             
                 let totalDistance = Calendar.current.dateComponents([Calendar.Component.day], from: gteDate, to: lteDate).value(for: .day) ?? 0
             
-                let difference = NCManageDatabase.sharedInstance.createTableMedia(files!, lteDate: lteDate, gteDate: gteDate, account: account)
+                let difference = NCManageDatabase.sharedInstance.createTableMedia(metadatas, lteDate: lteDate, gteDate: gteDate, account: account)
                 isDifferent = difference.isDifferent
                 newInsert = difference.newInsert
                 

+ 6 - 6
iOSClient/Select/NCSelect.swift

@@ -64,7 +64,7 @@ class NCSelect: UIViewController, UIGestureRecognizerDelegate, NCListCellDelegat
     
     private var serverUrlPush = ""
     private var metadataPush: tableMetadata?
-    private var metadataFolder: tableMetadata?
+    private var metadataFolder = tableMetadata()
     
     private var isEditMode = false
     private var networkInProgress = false
@@ -808,10 +808,10 @@ extension NCSelect {
             
             if errorCode == 0 && account == self.appDelegate.activeAccount {
                 
-                // update etag
-                self.metadataFolder = NCNetworking.sharedInstance.convertFileToMetadata(files![0])
-                
-                NCManageDatabase.sharedInstance.setDirectory(serverUrl: self.serverUrl, serverUrlTo: nil, etag: self.metadataFolder!.etag, ocId: self.metadataFolder!.ocId, encrypted: self.metadataFolder!.e2eEncrypted, richWorkspace: self.metadataFolder!.richWorkspace, account: account)
+                // Metadata conversion
+                let metadatas = NCNetworking.sharedInstance.convertFilesToMetadatas(files!, metadataFolder: &self.metadataFolder)
+                                
+                NCManageDatabase.sharedInstance.setDirectory(serverUrl: self.serverUrl, serverUrlTo: nil, etag: self.metadataFolder.etag, ocId: self.metadataFolder.ocId, encrypted: self.metadataFolder.e2eEncrypted, richWorkspace: self.metadataFolder.richWorkspace, account: account)
                 
                 // Update DB
                 NCManageDatabase.sharedInstance.deleteMetadata(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND status == %d", account, self.serverUrl, k_metadataStatusNormal))
@@ -821,7 +821,7 @@ extension NCSelect {
                 let metadatasInDownload = NCManageDatabase.sharedInstance.getMetadatas(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND (status == %d OR status == %d OR status == %d OR status == %d)", account, self.serverUrl, k_metadataStatusWaitDownload, k_metadataStatusInDownload, k_metadataStatusDownloading, k_metadataStatusDownloadError), sorted: nil, ascending: false)
                 let metadatasInUpload = NCManageDatabase.sharedInstance.getMetadatas(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND (status == %d OR status == %d OR status == %d OR status == %d)", account, self.serverUrl, k_metadataStatusWaitUpload, k_metadataStatusInUpload, k_metadataStatusUploading, k_metadataStatusUploadError), sorted: nil, ascending: false)
                 
-                NCManageDatabase.sharedInstance.addMetadatas(files: files!, account: account, serverUrl: self.serverUrl, removeFirst: true)
+                NCManageDatabase.sharedInstance.addMetadatas(metadatas)
                  
                 if metadatasInDownload != nil {
                     NCManageDatabase.sharedInstance.addMetadatas(metadatasInDownload!)