marinofaggiana 4 年之前
父節點
當前提交
58b7c06d77

+ 1 - 1
iOSClient/CCGlobal.h

@@ -84,7 +84,7 @@
 
 // Database Realm
 #define k_databaseDefault                               @"nextcloud.realm"
-#define k_databaseSchemaVersion                         112
+#define k_databaseSchemaVersion                         113
 
 // Intro selector
 #define k_intro_login                                   0

+ 0 - 48
iOSClient/Database/NCDatabase.swift

@@ -294,54 +294,6 @@ class tableLocalFile: Object {
     }
 }
 
-class tableMedia: Object {
-    
-    @objc dynamic var account = ""
-    @objc dynamic var assetLocalIdentifier = ""
-    @objc dynamic var commentsUnread: Bool = false
-    @objc dynamic var contentType = ""
-    @objc dynamic var creationDate = NSDate()
-    @objc dynamic var date = NSDate()
-    @objc dynamic var directory: Bool = false
-    @objc dynamic var deleteAssetLocalIdentifier: Bool = false
-    @objc dynamic var e2eEncrypted: Bool = false
-    @objc dynamic var edited: Bool = false
-    @objc dynamic var etag = ""
-    @objc dynamic var favorite: Bool = false
-    @objc dynamic var fileId = ""
-    @objc dynamic var fileName = ""
-    @objc dynamic var fileNameView = ""
-    @objc dynamic var hasPreview: Bool = false
-    @objc dynamic var iconName = ""
-    @objc dynamic var mountType = ""
-    @objc dynamic var ocId = ""
-    @objc dynamic var ownerId = ""
-    @objc dynamic var ownerDisplayName = ""
-    @objc dynamic var permissions = ""
-    @objc dynamic var quotaUsedBytes: Double = 0
-    @objc dynamic var quotaAvailableBytes: Double = 0
-    @objc dynamic var resourceType = ""
-    @objc dynamic var richWorkspace: String?
-    @objc dynamic var serverUrl = ""
-    @objc dynamic var session = ""
-    @objc dynamic var sessionError = ""
-    @objc dynamic var sessionSelector = ""
-    @objc dynamic var sessionTaskIdentifier: Int = 0
-    @objc dynamic var size: Double = 0
-    @objc dynamic var status: Int = 0
-    @objc dynamic var trashbinFileName = ""
-    @objc dynamic var trashbinOriginalLocation = ""
-    @objc dynamic var trashbinDeletionTime = NSDate()
-    @objc dynamic var typeFile = ""
-    @objc dynamic var uploadDate = NSDate()
-    @objc dynamic var url = ""
-    @objc dynamic var urlBase = ""
-
-    override static func primaryKey() -> String {
-        return "ocId"
-    }
-}
-
 class tableMetadata: Object {
     
     @objc dynamic var account = ""

+ 11 - 105
iOSClient/Database/NCManageDatabase.swift

@@ -111,9 +111,8 @@ class NCManageDatabase: NSObject {
                         migration.deleteData(forType: tableComments.className())
                     }
                     
-                    if oldSchemaVersion < 111 {
+                    if oldSchemaVersion < 113 {
                         migration.deleteData(forType: tableMetadata.className())
-                        migration.deleteData(forType: tableMedia.className())
                         migration.deleteData(forType: tableDirectory.className())
                     }
                     
@@ -208,7 +207,6 @@ class NCManageDatabase: NSObject {
         self.clearTable(tableExternalSites.self, account: account)
         self.clearTable(tableGPS.self, account: nil)
         self.clearTable(tableLocalFile.self, account: account)
-        self.clearTable(tableMedia.self, account: account)
         self.clearTable(tableMetadata.self, account: account)
         self.clearTable(tablePhotoLibrary.self, account: account)
         self.clearTable(tableShare.self, account: account)
@@ -2369,96 +2367,22 @@ class NCManageDatabase: NSObject {
         return tableMetadata.init(value: result)
     }
     
-    //MARK: -
-    //MARK: Table Media
- 
-    @objc func getMedia(predicate: NSPredicate) -> tableMetadata? {
+    @objc func getMetadatasMedia(account: String) -> [tableMetadata]? {
         
         let realm = try! Realm()
         realm.refresh()
         
-        guard let result = realm.objects(tableMedia.self).filter(predicate).first else {
-            return nil
-        }
-        
-        return tableMetadata.init(value: result)
-    }
-   
-    @objc func getMedias(account: String, predicate: NSPredicate) -> [tableMetadata]? {
-        
-        let realm = try! Realm()
-        realm.refresh()
         
         let sortProperties = [SortDescriptor(keyPath: "date", ascending: false), SortDescriptor(keyPath: "fileNameView", ascending: false)]
-        let results = realm.objects(tableMedia.self).filter(predicate).sorted(by: sortProperties)
-        if results.count == 0 {
+        let results = realm.objects(tableMetadata.self).filter(NSPredicate(format: "account == %@ AND (typeFile == %@ OR typeFile == %@ OR typeFile == %@)", account, k_metadataTypeFile_image, k_metadataTypeFile_video, k_metadataTypeFile_audio)).sorted(by: sortProperties)
+        if (results.count > 0) {
+            return Array(results.map { tableMetadata.init(value:$0) })
+        } else {
             return nil
         }
-                
-        var metadatas = [tableMetadata]()
-        var metadatasMOVLivePhoto = [tableMetadata]()
-        
-        // For Live Photo
-        var fileNameImages = [String]()
-        let filtered = results.filter{ $0.typeFile.contains(k_metadataTypeFile_image) }
-        filtered.forEach { 
-            let fileName = ($0.fileNameView as NSString).deletingPathExtension
-            fileNameImages.append(fileName)
-        }
-                
-        for result in results {
-            let metadata = tableMetadata.init(value: result)
-            let ext = (metadata.fileNameView as NSString).pathExtension.uppercased()
-            let fileName = (metadata.fileNameView as NSString).deletingPathExtension
-
-            if !(ext == "MOV" && fileNameImages.contains(fileName)) {
-                metadatas.append(tableMetadata.init(value: metadata))
-            } else {
-                metadatasMOVLivePhoto.append(tableMetadata.init(value: metadata))
-            }
-        }
-        
-        if metadatasMOVLivePhoto.count > 0 {
-            self.addMetadatas(metadatasMOVLivePhoto)
-        }
-        
-        return metadatas
-    }
-    
-    @objc func deleteMedia(predicate: NSPredicate) {
-                
-        let realm = try! Realm()
-
-        realm.beginWrite()
-
-        let results = realm.objects(tableMedia.self).filter(predicate)
-        
-        realm.delete(results)
-        
-        do {
-            try realm.commitWrite()
-        } catch let error {
-            print("[LOG] Could not write to database: ", error)
-        }
-    }
-    
-    @objc func moveMedia(ocId: String, serverUrlTo: String) {
-        
-        let realm = try! Realm()
-
-        do {
-            try realm.write {
-                let result = realm.objects(tableMedia.self).filter("ocId == %@", ocId).first
-                if result != nil {
-                    result!.serverUrl = serverUrlTo
-                }
-            }
-        } catch let error {
-            print("[LOG] Could not write to database: ", error)
-        }
     }
     
-    func createTableMedia(_ metadatasSource: [tableMetadata], lteDate: Date, gteDate: Date, account: String) -> (isDifferent: Bool, newInsert: Int) {
+    func updateMetadatasMedia(_ metadatasSource: [tableMetadata], lteDate: Date, gteDate: Date, account: String) -> (isDifferent: Bool, newInsert: Int) {
 
         let realm = try! Realm()
         realm.refresh()
@@ -2476,12 +2400,12 @@ class NCManageDatabase: NSObject {
             try realm.write {
                 
                 // DELETE
-                let results = realm.objects(tableMedia.self).filter("account == %@ AND date >= %@ AND date <= %@", account, gteDate, lteDate)
+                let results = realm.objects(tableMetadata.self).filter("account == %@ AND date >= %@ AND date <= %@ AND (typeFile == %@ OR typeFile == %@ OR typeFile == %@)", account, gteDate, lteDate, k_metadataTypeFile_image, k_metadataTypeFile_video, k_metadataTypeFile_audio)
                 etagsDelete = Array(results.map { $0.etag })
                 numDelete = results.count
                 
                 // INSERT
-                let photos = Array(metadatasSource.map { tableMedia.init(value:$0) })
+                let photos = Array(metadatasSource.map { tableMetadata.init(value:$0) })
                 etagsInsert = Array(photos.map { $0.etag })
                 numInsert = photos.count
                 
@@ -2504,36 +2428,18 @@ class NCManageDatabase: NSObject {
         return(isDifferent, newInsert)
     }
     
-    @objc func getTableMediaDate(account: String, order: ComparisonResult) -> Date {
+    @objc func getMetadataMediaDate(account: String, order: ComparisonResult) -> Date {
         
         let realm = try! Realm()
         realm.refresh()
         
-        if let entities = realm.objects(tableMedia.self).filter("account == %@", account).max(by: { $0.date.compare($1.date as Date) == order }) {
+        if let entities = realm.objects(tableMetadata.self).filter("account == %@ AND (typeFile == %@ OR typeFile == %@ OR typeFile == %@)", account, k_metadataTypeFile_image, k_metadataTypeFile_video, k_metadataTypeFile_audio).max(by: { $0.date.compare($1.date as Date) == order }) {
             return Calendar.current.date(bySettingHour: 0, minute: 0, second: 0, of: entities.date as Date)!
         }
         
         return Calendar.current.date(bySettingHour: 0, minute: 0, second: 0, of: Date())!
     }
     
-    @objc func renameMedia(fileNameTo: String, ocId: String) {
-        
-        var result: tableMedia?
-        let realm = try! Realm()
-        
-        do {
-            try realm.write {
-                result = realm.objects(tableMedia.self).filter("ocId == %@", ocId).first
-                if result != nil {
-                    result!.fileName = fileNameTo
-                    result!.fileNameView = fileNameTo
-                }
-            }
-        } catch let error {
-            print("[LOG] Could not write to database: ", error)
-        }
-    }
-    
     //MARK: -
     //MARK: Table Photo Library
     

+ 6 - 6
iOSClient/Media/NCMedia.swift

@@ -595,8 +595,8 @@ extension NCMedia {
         
         DispatchQueue.global().async {
             
-            let metadatas = NCManageDatabase.sharedInstance.getMedias(account: self.appDelegate.activeAccount, predicate: NSPredicate(format: "account == %@", self.appDelegate.activeAccount))
-            self.sectionDatasource = CCSectionMetadata.creataDataSourseSectionMetadata(metadatas, listProgressMetadata: nil, groupByField: "date", filterTypeFileImage: self.filterTypeFileImage, filterTypeFileVideo: self.filterTypeFileVideo, filterLivePhoto: false, sorted: "date", ascending: false, activeAccount: self.appDelegate.activeAccount)
+            let metadatas = NCManageDatabase.sharedInstance.getMetadatasMedia(account: self.appDelegate.activeAccount)
+            self.sectionDatasource = CCSectionMetadata.creataDataSourseSectionMetadata(metadatas, listProgressMetadata: nil, groupByField: "date", filterTypeFileImage: self.filterTypeFileImage, filterTypeFileVideo: self.filterTypeFileVideo, filterLivePhoto: true, sorted: "date", ascending: false, activeAccount: self.appDelegate.activeAccount)
             
             DispatchQueue.main.async {
                 
@@ -625,7 +625,7 @@ extension NCMedia {
         
         // copy in arrayDeleteMetadata
         for ocId in selectocId {
-            if let metadata = NCManageDatabase.sharedInstance.getMedia(predicate: NSPredicate(format: "ocId == %@", ocId)) {
+            if let metadata = NCManageDatabase.sharedInstance.getMetadata(predicate: NSPredicate(format: "ocId == %@", ocId)) {
                 appDelegate.arrayDeleteMetadata.add(metadata)
             }
         }
@@ -682,7 +682,7 @@ extension NCMedia {
                     NCManageDatabase.sharedInstance.convertNCCommunicationFilesToMetadatas(files!, useMetadataFolder: false, account: account) { (metadataFolder, metadatasFolder, metadatas) in
                         
                         let totalDistance = Calendar.current.dateComponents([Calendar.Component.day], from: gteDate, to: lteDate).value(for: .day) ?? 0
-                        let difference = NCManageDatabase.sharedInstance.createTableMedia(metadatas, lteDate: lteDate, gteDate: gteDate, account: account)
+                        let difference = NCManageDatabase.sharedInstance.updateMetadatasMedia(metadatas, lteDate: lteDate, gteDate: gteDate, account: account)
                         isDifferent = difference.isDifferent
                         newInsert = difference.newInsert
                         
@@ -749,7 +749,7 @@ extension NCMedia {
             
         } else {
             
-            let gteDate = NCManageDatabase.sharedInstance.getTableMediaDate(account: self.appDelegate.activeAccount, order: .orderedAscending)
+            let gteDate = NCManageDatabase.sharedInstance.getMetadataMediaDate(account: self.appDelegate.activeAccount, order: .orderedAscending)
             search(lteDate: Date(), gteDate: gteDate, addPast: false, insertPrevius: 0, setDistantPast: false, debug: "search today, first date record")
         }
         
@@ -764,7 +764,7 @@ extension NCMedia {
         }
         
         let sections = NSMutableSet()
-        let lastDate = NCManageDatabase.sharedInstance.getTableMediaDate(account: self.appDelegate.activeAccount, order: .orderedDescending)
+        let lastDate = NCManageDatabase.sharedInstance.getMetadataMediaDate(account: self.appDelegate.activeAccount, order: .orderedDescending)
         var gteDate: Date?
         
         for item in collectionView.indexPathsForVisibleItems {

+ 0 - 3
iOSClient/Networking/NCNetworking.swift

@@ -760,7 +760,6 @@ import Alamofire
                 } 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 {
@@ -869,7 +868,6 @@ import Alamofire
             if errorCode == 0 {
                         
                 NCManageDatabase.sharedInstance.renameMetadata(fileNameTo: fileNameNew, ocId: metadata.ocId)
-                NCManageDatabase.sharedInstance.renameMedia(fileNameTo: fileNameNew, ocId: metadata.ocId)
                         
                 if metadata.directory {
                             
@@ -944,7 +942,6 @@ import Alamofire
                 if let metadataMove = NCManageDatabase.sharedInstance.moveMetadata(ocId: metadata.ocId, serverUrlTo: serverUrlTo) {
                     metadataNew = metadataMove
                 }
-                NCManageDatabase.sharedInstance.moveMedia(ocId: metadata.ocId, serverUrlTo: serverUrlTo)
                                 
                 NotificationCenter.default.post(name: Notification.Name.init(rawValue: k_notificationCenter_reloadDataSource), object: nil, userInfo: ["serverUrl":metadata.serverUrl])
                 NotificationCenter.default.post(name: Notification.Name.init(rawValue: k_notificationCenter_reloadDataSource), object: nil, userInfo: ["serverUrl":serverUrlTo])

+ 2 - 2
iOSClient/Networking/NCService.swift

@@ -69,8 +69,8 @@ class NCService: NSObject {
                 
                 self.appDelegate.settingActiveAccount(tableAccount.account, activeUrl: tableAccount.url, activeUser: tableAccount.user, activeUserID: tableAccount.userID, activePassword: CCUtility.getPassword(tableAccount.account))
                 
-                self.appDelegate.activeFavorites.listingFavorites()
-                self.appDelegate.activeMedia.reloadDataSource(loadNetworkDatasource: true) { }
+                //self.appDelegate.activeFavorites.listingFavorites()
+                //self.appDelegate.activeMedia.reloadDataSource(loadNetworkDatasource: true) { }
                 
                 // Synchronize Offline ---
                 let directories = NCManageDatabase.sharedInstance.getTablesDirectory(predicate: NSPredicate(format: "account == %@ AND offline == true", tableAccount.account), sorted: "serverUrl", ascending: true)