Marino Faggiana преди 6 години
родител
ревизия
98ab68c72d
променени са 3 файла, в които са добавени 71 реда и са изтрити 102 реда
  1. 33 0
      iOSClient/Database/NCDatabase.swift
  2. 36 97
      iOSClient/Database/NCManageDatabase.swift
  3. 2 5
      iOSClient/Photos/CCPhotos.m

+ 33 - 0
iOSClient/Database/NCDatabase.swift

@@ -225,6 +225,39 @@ class tableMetadata: Object {
     }
 }
 
+class tablePhotos: Object {
+    
+    @objc dynamic var account = ""
+    @objc dynamic var assetLocalIdentifier = ""
+    @objc dynamic var date = NSDate()
+    @objc dynamic var directory: Bool = false
+    @objc dynamic var directoryID = ""
+    @objc dynamic var e2eEncrypted: 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 iconName = ""
+    @objc dynamic var permissions = ""
+    @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 thumbnailExists: Bool = false
+    @objc dynamic var typeFile = ""
+    
+    override static func primaryKey() -> String {
+        return "fileID"
+    }
+    
+    override static func indexedProperties() -> [String] {
+        return ["directoryID"]
+    }
+}
+
 class tablePhotoLibrary: Object {
     
     @objc dynamic var account = ""

+ 36 - 97
iOSClient/Database/NCManageDatabase.swift

@@ -57,7 +57,7 @@ class NCManageDatabase: NSObject {
         let config = Realm.Configuration(
         
             fileURL: dirGroup?.appendingPathComponent("\(k_appDatabaseNextcloud)/\(k_databaseDefault)"),
-            schemaVersion: 26,
+            schemaVersion: 27,
             
             // 10 : Version 2.18.0
             // 11 : Version 2.18.2
@@ -76,6 +76,7 @@ class NCManageDatabase: NSObject {
             // 24 : Version 2.21.2.5
             // 25 : Version 2.21.3.1
             // 26 : Version 2.22.0.4
+            // 27 : Version 2.22.0.7
             
             migrationBlock: { migration, oldSchemaVersion in
                 // We haven’t migrated anything yet, so oldSchemaVersion == 0
@@ -1930,130 +1931,68 @@ class NCManageDatabase: NSObject {
         return listIdentifierRank
     }
     
-    @objc func getTableMetadatasContentTypeImageVideo(_ startDirectory: String) -> [tableMetadata]? {
+    @objc func clearMetadatasUpload() {
         
         guard let tableAccount = self.getAccountActive() else {
-            return nil
-        }
-        
-        let realm = try! Realm()
-        realm.refresh()
-        
-        let directories = realm.objects(tableDirectory.self).filter(NSPredicate(format: "account == %@ AND e2eEncrypted == 0 AND serverUrl BEGINSWITH %@", tableAccount.account, startDirectory)).sorted(byKeyPath: "serverUrl", ascending: true)
-        let directoriesID = Array(directories.map { $0.directoryID })
-        let metadatas = realm.objects(tableMetadata.self).filter(NSPredicate(format: "account == %@ AND (typeFile == %@ OR typeFile == %@) AND directoryID IN %@", tableAccount.account, k_metadataTypeFile_image, k_metadataTypeFile_video, directoriesID)).sorted(byKeyPath: "date", ascending: false)
-        
-        return Array(metadatas.map { tableMetadata.init(value:$0) })
-    }
-    
-    /*
-    @objc func updateTableMetadatasContentTypeImageVideo(_ metadatas: [tableMetadata], startDirectory: String) {
-
-        var metadatasForAdd = [tableMetadata]()
-        var metadatasForDelete = [tableMetadata]()
-
-        let realm = try! Realm()
-        realm.refresh()
-        
-        let metadatasDBImageVideo = self.getTableMetadatasContentTypeImageVideo(startDirectory)
-        
-        // Delete
-        for metadata in metadatasDBImageVideo! {
-            let recordFound = metadatas.filter { $0.fileID == metadata.fileID }
-            if (recordFound.count == 0) {
-                if let result = realm.objects(tableMetadata.self).filter("fileID == %@", metadata.fileID).first {
-                    metadatasForDelete.append(result)
-                }
-            }
-        }
-        
-        // New
-        for metadata in metadatas {
-            let recordFound = metadatasDBImageVideo!.filter { $0.fileID == metadata.fileID }
-            if (recordFound.count == 0) {
-                metadatasForAdd.append(metadata)
-            }
+            return
         }
         
-        if (metadatasForDelete.count > 0 || metadatasForAdd.count > 0) {
-            do {
-                try realm.write {
-                    // DELETE
-                    realm.delete(metadatasForDelete)
-                    // INSERT
-                    realm.add(metadatasForAdd, update: true)
-                }
-            } catch let error {
-                print("[LOG] Could not write to database: ", error)
-                realm.cancelWrite()
-            }
-        }        
-    }
-    */
-    
-    @objc func updateTableMetadatasContentTypeImageVideo(_ metadatas: [tableMetadata], startDirectory: String) -> Bool {
-        
         let realm = try! Realm()
-        realm.refresh()
-        
-        let metadatasDBImageVideo = self.getTableMetadatasContentTypeImageVideo(startDirectory)
-        let fileIDArrayDB = metadatasDBImageVideo!.map({ $0.fileID }) as [String]
-        let fileIDArraySearch = metadatas.map({ $0.fileID }) as [String]
-        
-        // DELETE RECORD IF NOT PRESENT ON DB [From DB To SEARCH]
-        var resultsDelete = [tableMetadata]()
-        for fileID in fileIDArrayDB {
-            if !(fileIDArraySearch.contains(fileID)) {
-                if let result = realm.objects(tableMetadata.self).filter("fileID == %@", fileID).first {
-                    resultsDelete.append(result)
-                }
-            }
-        }
-        
-        // INSERT NEW RECORD ON DB [From SEARCH To DB]
-        var resultsInsert = [tableMetadata]()
-        for metadata in metadatas {
-            if !(fileIDArrayDB.contains(metadata.fileID)) {
-                resultsInsert.append(metadata)
-            }
-        }
         
         do {
             try realm.write {
-                // DELETE
-                realm.delete(resultsDelete)
-                // INSERT
-                realm.add(resultsInsert, update: true)
+                
+                let results = realm.objects(tableMetadata.self).filter("account == %@ AND (status == %d OR status == %@)", tableAccount.account, k_metadataStatusWaitUpload, k_metadataStatusUploadError)
+                
+                realm.delete(results)
             }
         } catch let error {
             print("[LOG] Could not write to database: ", error)
-            realm.cancelWrite()
-            return false
+        }
+    }
+    
+    //MARK: -
+    //MARK: Table Photos
+    @objc func getTablePhotos() -> [tableMetadata]? {
+
+        guard let tableAccount = self.getAccountActive() else {
+            return nil
         }
         
-        if (resultsDelete.count > 0 || resultsInsert.count > 0) {
-            return true
+        let realm = try! Realm()
+        realm.refresh()
+
+        let predicate = NSPredicate(format: "account == %@", tableAccount.account)
+        let results = realm.objects(tablePhotos.self).filter(predicate).sorted(byKeyPath: "date", ascending: false)
+
+        if (results.count > 0) {
+            return Array(results.map { tableMetadata.init(value:$0) })
+        } else {
+            return nil
         }
-        return false
     }
     
-    @objc func clearMetadatasUpload() {
-        
+    @objc func createTablePhotos(_ metadatas: [tableMetadata]) {
+
         guard let tableAccount = self.getAccountActive() else {
             return
         }
         
         let realm = try! Realm()
+        realm.refresh()
         
         do {
             try realm.write {
-                
-                let results = realm.objects(tableMetadata.self).filter("account == %@ AND (status == %d OR status == %@)", tableAccount.account, k_metadataStatusWaitUpload, k_metadataStatusUploadError)
-                
+                // DELETE ALL
+                let results = realm.objects(tablePhotos.self).filter("account = %@", tableAccount.account)
                 realm.delete(results)
+                // INSERT ALL
+                let photos = Array(metadatas.map { tablePhotos.init(value:$0) })
+                realm.add(photos, update: true)
             }
         } catch let error {
             print("[LOG] Could not write to database: ", error)
+            realm.cancelWrite()
         }
     }
     

+ 2 - 5
iOSClient/Photos/CCPhotos.m

@@ -606,9 +606,7 @@
     
         dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
             
-            NSString *startDirectory = [[NCManageDatabase sharedInstance] getAccountStartDirectoryPhotosTab:[CCUtility getHomeServerUrlActiveUrl:appDelegate.activeUrl]];
-
-            [[NCManageDatabase sharedInstance] updateTableMetadatasContentTypeImageVideo:metadatas startDirectory:startDirectory];
+            [[NCManageDatabase sharedInstance] createTablePhotos:metadatas];
             
             dispatch_async(dispatch_get_main_queue(), ^{
                 [self reloadDatasourceFromSearch:YES];
@@ -671,8 +669,7 @@
     
         dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
 
-            NSString *startDirectory = [[NCManageDatabase sharedInstance] getAccountStartDirectoryPhotosTab:[CCUtility getHomeServerUrlActiveUrl:appDelegate.activeUrl]];
-            NSArray *metadatasDBImageVideo = [[NCManageDatabase sharedInstance] getTableMetadatasContentTypeImageVideo:startDirectory];
+            NSArray *metadatasDBImageVideo = [[NCManageDatabase sharedInstance] getTablePhotos];
             CCSectionDataSourceMetadata *tempSectionDataSource = [CCSectionMetadata creataDataSourseSectionMetadata:metadatasDBImageVideo listProgressMetadata:nil groupByField:@"date" activeAccount:appDelegate.activeAccount];
         
             dispatch_async(dispatch_get_main_queue(), ^{