marinofaggiana 4 éve
szülő
commit
6fecad37b9
1 módosított fájl, 71 hozzáadás és 68 törlés
  1. 71 68
      iOSClient/Database/NCManageDatabase.swift

+ 71 - 68
iOSClient/Database/NCManageDatabase.swift

@@ -305,7 +305,7 @@ class NCManageDatabase: NSObject {
         let realm = try! Realm()
         
         do {
-            try realm.write {
+            try realm.safeWrite {
                 realm.add(account, update: .all)
             }
         } catch let error {
@@ -419,7 +419,7 @@ class NCManageDatabase: NSObject {
         var accountReturn = tableAccount()
         
         do {
-            try realm.write {
+            try realm.safeWrite {
             
                 let results = realm.objects(tableAccount.self)
                 for result in results {
@@ -444,7 +444,7 @@ class NCManageDatabase: NSObject {
         let realm = try! Realm()
         
         do {
-            try realm.write {
+            try realm.safeWrite {
                 
                 guard let result = realm.objects(tableAccount.self).filter("account == %@", account).first else {
                     return
@@ -487,7 +487,7 @@ class NCManageDatabase: NSObject {
         let realm = try! Realm()
 
         do {
-            try realm.write {
+            try realm.safeWrite {
                 
                 if let result = realm.objects(tableAccount.self).filter("active == true").first {
                     
@@ -511,7 +511,7 @@ class NCManageDatabase: NSObject {
         let realm = try! Realm()
 
         do {
-            try realm.write {
+            try realm.safeWrite {
                 
                 if let result = realm.objects(tableAccount.self).filter("active == true").first {
                     
@@ -541,7 +541,7 @@ class NCManageDatabase: NSObject {
                 return nil
             }
             
-            try realm.write {
+            try realm.safeWrite {
                 
                 guard let result = realm.objects(tableAccount.self).filter("account == %@", account.account).first else {
                     return
@@ -590,7 +590,7 @@ class NCManageDatabase: NSObject {
                 return nil
             }
             
-            try realm.write {
+            try realm.safeWrite {
                 
                 guard let result = realm.objects(tableAccount.self).filter("account == %@", account.account).first else {
                     return
@@ -673,7 +673,7 @@ class NCManageDatabase: NSObject {
            
         let realm = try! Realm()
         do {
-            try realm.write {
+            try realm.safeWrite {
                 if let result = realm.objects(tableAccount.self).filter("account == %@", account).first {
                     result.mediaPath = path
                 }
@@ -957,7 +957,7 @@ class NCManageDatabase: NSObject {
         let realm = try! Realm()
         
         do {
-            try realm.write {
+            try realm.safeWrite {
                 
                 let results = realm.objects(tableComments.self).filter("account == %@ AND objectId == %@", account, objectId)
                 realm.delete(results)
@@ -1004,7 +1004,7 @@ class NCManageDatabase: NSObject {
         let realm = try! Realm()
 
         do {
-            try realm.write {
+            try realm.safeWrite {
             
                 let resultsCreators = realm.objects(tableDirectEditingCreators.self).filter("account == %@", account)
                 realm.delete(resultsCreators)
@@ -1150,7 +1150,7 @@ class NCManageDatabase: NSObject {
         
         // Delete table Dirrectory
         do {
-            try realm.write {
+            try realm.safeWrite {
                 realm.delete(results)
             }
         } catch let error {
@@ -1163,7 +1163,7 @@ class NCManageDatabase: NSObject {
         let realm = try! Realm()
 
         do {
-            try realm.write {
+            try realm.safeWrite {
             
                 guard let result = realm.objects(tableDirectory.self).filter("account == %@ AND serverUrl == %@", account, serverUrl).first else {
                     return
@@ -1246,7 +1246,7 @@ class NCManageDatabase: NSObject {
         let realm = try! Realm()
         
         do {
-            try realm.write {
+            try realm.safeWrite {
                 
                 guard let result = realm.objects(tableDirectory.self).filter("account == %@ AND serverUrl == %@", account, serverUrl).first else {
                     realm.cancelWrite()
@@ -1289,7 +1289,7 @@ class NCManageDatabase: NSObject {
         let realm = try! Realm()
 
         do {
-            try realm.write {
+            try realm.safeWrite {
                 realm.add(e2e, update: .all)
             }
         } catch let error {
@@ -1309,7 +1309,7 @@ class NCManageDatabase: NSObject {
         let realm = try! Realm()
 
         do {
-            try realm.write {
+            try realm.safeWrite {
                 
                 let results = realm.objects(tableE2eEncryption.self).filter(predicate)
                 realm.delete(results)
@@ -1459,7 +1459,7 @@ class NCManageDatabase: NSObject {
         let realm = try! Realm()
 
         do {
-            try realm.write {
+            try realm.safeWrite {
             
                 let addObject = tableExternalSites()
             
@@ -1483,7 +1483,7 @@ class NCManageDatabase: NSObject {
         let realm = try! Realm()
 
         do {
-            try realm.write {
+            try realm.safeWrite {
             
                 let results = realm.objects(tableExternalSites.self).filter("account == %@", account)
                 realm.delete(results)
@@ -1561,7 +1561,7 @@ class NCManageDatabase: NSObject {
         let realm = try! Realm()
         
         do {
-            try realm.write {
+            try realm.safeWrite {
             
                 let addObject = tableLocalFile()
                 
@@ -1587,7 +1587,7 @@ class NCManageDatabase: NSObject {
         let realm = try! Realm()
 
         do {
-            try realm.write {
+            try realm.safeWrite {
 
                 let results = realm.objects(tableLocalFile.self).filter(predicate)
                 realm.delete(results)
@@ -1602,7 +1602,7 @@ class NCManageDatabase: NSObject {
         let realm = try! Realm()
 
         do {
-            try realm.write {
+            try realm.safeWrite {
                 
                 guard let result = realm.objects(tableLocalFile.self).filter("ocId == %@", ocId).first else {
                     realm.cancelWrite()
@@ -1657,7 +1657,7 @@ class NCManageDatabase: NSObject {
         let realm = try! Realm()
         
         do {
-            try realm.write {
+            try realm.safeWrite {
                 
                 guard let result = realm.objects(tableLocalFile.self).filter("ocId == %@", ocId).first else {
                     realm.cancelWrite()
@@ -1803,7 +1803,7 @@ class NCManageDatabase: NSObject {
         let realm = try! Realm()
 
         do {
-            try realm.write {
+            try realm.safeWrite {
                 realm.add(metadata, update: .all)
             }
         } catch let error {
@@ -1816,7 +1816,7 @@ class NCManageDatabase: NSObject {
         let realm = try! Realm()
 
         do {
-            try realm.write {
+            try realm.safeWrite {
                 for metadata in metadatas {
                     realm.add(metadata, update: .all)
                 }
@@ -1833,7 +1833,7 @@ class NCManageDatabase: NSObject {
         let realm = try! Realm()
         
         do {
-            try realm.write {
+            try realm.safeWrite {
                 for file in files {
                     
                     let metadata = tableMetadata()
@@ -1890,7 +1890,7 @@ class NCManageDatabase: NSObject {
         let realm = try! Realm()
         
         do {
-            try realm.write {
+            try realm.safeWrite {
                 let results = realm.objects(tableMetadata.self).filter(predicate)
                 realm.delete(results)
             }
@@ -1904,7 +1904,7 @@ class NCManageDatabase: NSObject {
         let realm = try! Realm()
 
         do {
-            try realm.write {
+            try realm.safeWrite {
                 if let result = realm.objects(tableMetadata.self).filter("ocId == %@", ocId).first {
                     result.serverUrl = serverUrlTo
                 }
@@ -1919,7 +1919,7 @@ class NCManageDatabase: NSObject {
         let realm = try! Realm()
         
         do {
-            try realm.write {
+            try realm.safeWrite {
                 let results = realm.objects(tableMetadata.self).filter("ocId == %@", ocId)
                 for result in results {
                     result.serverUrl = serverUrl
@@ -1935,7 +1935,7 @@ class NCManageDatabase: NSObject {
         let realm = try! Realm()
         
         do {
-            try realm.write {
+            try realm.safeWrite {
                 if let result = realm.objects(tableMetadata.self).filter("ocId == %@", ocId).first {
                     result.fileName = fileNameTo
                     result.fileNameView = fileNameTo
@@ -1956,7 +1956,7 @@ class NCManageDatabase: NSObject {
         var metadatasLocalUpdate : [tableMetadata] = []
         
         do {
-            try realm.write {
+            try realm.safeWrite {
                 
                 // DELETE
                 for metadataResult in metadatasResult {
@@ -2025,7 +2025,8 @@ class NCManageDatabase: NSObject {
         DispatchQueue.main.async {
             let realm = try! Realm()
             do {
-                try realm.write {
+                try realm.safeWrite {
+                    
                     if let result = realm.objects(tableMetadata.self).filter("ocId == %@", ocId).first {
                         if let session = session {
                             result.session = session
@@ -2061,7 +2062,7 @@ class NCManageDatabase: NSObject {
         let realm = try! Realm()
         
         do {
-            try realm.write {
+            try realm.safeWrite {
                 if let result = realm.objects(tableMetadata.self).filter("ocId == %@", ocId).first {
                     result.status = status
                 }
@@ -2267,7 +2268,7 @@ class NCManageDatabase: NSObject {
         let realm = try! Realm()
         
         do {
-            try realm.write {
+            try realm.safeWrite {
                 
                 let results = realm.objects(tableMetadata.self).filter("account == %@ AND (status == %d OR status == %@)", account, k_metadataStatusWaitUpload, k_metadataStatusUploadError)
                 realm.delete(results)
@@ -2313,7 +2314,7 @@ class NCManageDatabase: NSObject {
         let realm = try! Realm()
 
         do {
-            try realm.write {
+            try realm.safeWrite {
             
                 let results = realm.objects(tableMetadata.self).filter("account == %@ AND assetLocalIdentifier IN %@", account, assetLocalIdentifiers)
 
@@ -2358,46 +2359,38 @@ class NCManageDatabase: NSObject {
         
         let realm = try! Realm()
 
-        if realm.isInWriteTransaction {
-            
-            NCCommunicationCommon.shared.writeLog("[LOG] Could not write to database, addPhotoLibrary is already in write transaction")
-            return false
+        do {
+            try realm.safeWrite {
             
-        } else {
-        
-            do {
-                try realm.write {
-                
-                    var creationDateString = ""
+                var creationDateString = ""
 
-                    for asset in assets {
-                    
-                        let addObject = tablePhotoLibrary()
+                for asset in assets {
+                
+                    let addObject = tablePhotoLibrary()
+                
+                    addObject.account = account
+                    addObject.assetLocalIdentifier = asset.localIdentifier
+                    addObject.mediaType = asset.mediaType.rawValue
+                
+                    if let creationDate = asset.creationDate {
+                        addObject.creationDate = creationDate as NSDate
+                        creationDateString = String(describing: creationDate)
+                    } else {
+                        creationDateString = ""
+                    }
                     
-                        addObject.account = account
-                        addObject.assetLocalIdentifier = asset.localIdentifier
-                        addObject.mediaType = asset.mediaType.rawValue
+                    if let modificationDate = asset.modificationDate {
+                        addObject.modificationDate = modificationDate as NSDate
+                    }
                     
-                        if let creationDate = asset.creationDate {
-                            addObject.creationDate = creationDate as NSDate
-                            creationDateString = String(describing: creationDate)
-                        } else {
-                            creationDateString = ""
-                        }
-                        
-                        if let modificationDate = asset.modificationDate {
-                            addObject.modificationDate = modificationDate as NSDate
-                        }
-                        
-                        addObject.idAsset = "\(account)\(asset.localIdentifier)\(creationDateString)"
+                    addObject.idAsset = "\(account)\(asset.localIdentifier)\(creationDateString)"
 
-                        realm.add(addObject, update: .all)
-                    }
+                    realm.add(addObject, update: .all)
                 }
-            } catch let error {
-                NCCommunicationCommon.shared.writeLog("[LOG] Could not write to database: \(error)")
-                return false
             }
+        } catch let error {
+            NCCommunicationCommon.shared.writeLog("[LOG] Could not write to database: \(error)")
+            return false
         }
         
         return true
@@ -2595,7 +2588,7 @@ class NCManageDatabase: NSObject {
         let realm = try! Realm()
         
         do {
-            try realm.write {
+            try realm.safeWrite {
                 
                 // Add new
                 let addObject = tableTag()
@@ -2655,7 +2648,7 @@ class NCManageDatabase: NSObject {
         let realm = try! Realm()
         
         do {
-            try realm.write {
+            try realm.safeWrite {
                 for trash in items {
                     let object = tableTrash()
                                     
@@ -2750,3 +2743,13 @@ class NCManageDatabase: NSObject {
     
     //MARK: -
 }
+
+extension Realm {
+    public func safeWrite(_ block: (() throws -> Void)) throws {
+        if isInWriteTransaction {
+            try block()
+        } else {
+            try write(block)
+        }
+    }
+}