Pārlūkot izejas kodu

lint

Signed-off-by: Marino Faggiana <marino@marinofaggiana.com>
Marino Faggiana 1 gadu atpakaļ
vecāks
revīzija
50fd2c4475
2 mainītis faili ar 200 papildinājumiem un 205 dzēšanām
  1. 0 14
      .swiftlint.yml
  2. 200 191
      iOSClient/Data/NCManageDatabase.swift

+ 0 - 14
.swiftlint.yml

@@ -71,20 +71,6 @@ excluded:
   - iOSClient/AppDelegate.swift
   - iOSClient/BackgroundImageColor/NCBackgroundImageColor.swift
   - iOSClient/BrowserWeb/NCBrowserWeb.swift
-  - iOSClient/Data/NCDataSource.swift
-  - iOSClient/Data/NCDatabase.swift
-  - iOSClient/Data/NCElementsJSON.swift
-  - iOSClient/Data/NCManageDatabase+Capabilities.swift
-  - iOSClient/Data/NCManageDatabase+Activity.swift
-  - iOSClient/Data/NCManageDatabase+Avatar.swift
-  - iOSClient/Data/NCManageDatabase+E2EE.swift
-  - iOSClient/Data/NCManageDatabase.swift
-  - iOSClient/Data/NCManageDatabase+Metadata.swift
-  - iOSClient/Data/NCManageDatabase+Directory.swift
-  - iOSClient/Data/NCManageDatabase+Share.swift
-  - iOSClient/Data/NCManageDatabase+Video.swift
-  - iOSClient/Data/NCManageDatabase+LayoutForView.swift
-  - iOSClient/Data/NCManageDatabase+DashboardWidget.swift
   - iOSClient/Diagnostics/NCCapabilitiesViewController.swift
   - iOSClient/EmptyView/NCEmptyDataSet.swift
   - iOSClient/Extensions/UIColor+Extensions.swift

+ 200 - 191
iOSClient/Data/NCManageDatabase.swift

@@ -157,9 +157,8 @@ class NCManageDatabase: NSObject {
 
     @objc func clearTable(_ table: Object.Type, account: String? = nil) {
 
-        let realm = try! Realm()
-
         do {
+            let realm = try Realm()
             try realm.write {
                 var results: Results<Object>
 
@@ -232,21 +231,24 @@ class NCManageDatabase: NSObject {
         }
     }
 
-    @objc func getThreadConfined(_ object: Object) -> Any {
+    func getThreadConfined(_ object: Object) -> Any {
 
-        // id tradeReference = [[NCManageDatabase shared] getThreadConfined:metadata];
         return ThreadSafeReference(to: object)
     }
 
-    @objc func putThreadConfined(_ tableRef: Any) -> Object? {
+    func putThreadConfined(_ tableRef: ThreadSafeReference<Object>) -> Object? {
 
-        // tableMetadata *metadataThread = (tableMetadata *)[[NCManageDatabase shared] putThreadConfined:tradeReference];
-        let realm = try! Realm()
+        do {
+            let realm = try Realm()
+            return realm.resolve(tableRef)
+        } catch let error as NSError {
+            NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)")
+        }
 
-        return realm.resolve(tableRef as! ThreadSafeReference<Object>)
+        return nil
     }
 
-    @objc func isTableInvalidated(_ object: Object) -> Bool {
+    func isTableInvalidated(_ object: Object) -> Bool {
 
         return object.isInvalidated
     }
@@ -256,10 +258,12 @@ class NCManageDatabase: NSObject {
 
     func getChunkFolder(account: String, ocId: String) -> String {
 
-        let realm = try! Realm()
-
-        if let result = realm.objects(tableChunk.self).filter("account == %@ AND ocId == %@", account, ocId).first {
+        do {
+            let realm = try Realm()
+            guard let result = realm.objects(tableChunk.self).filter("account == %@ AND ocId == %@", account, ocId).first else { return NSUUID().uuidString }
             return result.chunkFolder
+        } catch let error as NSError {
+            NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)")
         }
 
         return NSUUID().uuidString
@@ -270,20 +274,26 @@ class NCManageDatabase: NSObject {
         let realm = try! Realm()
         var filesNames: [String] = []
 
-        let results = realm.objects(tableChunk.self).filter("account == %@ AND ocId == %@", account, ocId).sorted(byKeyPath: "fileName", ascending: true)
-        for result in results {
-            filesNames.append(result.fileName)
+        do {
+            let realm = try Realm()
+            let results = realm.objects(tableChunk.self).filter("account == %@ AND ocId == %@", account, ocId).sorted(byKeyPath: "fileName", ascending: true)
+            for result in results {
+                filesNames.append(result.fileName)
+            }
+            return filesNames
+        } catch let error as NSError {
+            NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)")
         }
 
-        return filesNames
+        return []
     }
 
     func addChunks(account: String, ocId: String, chunkFolder: String, fileNames: [String]) {
 
-        let realm = try! Realm()
         var size: Int64 = 0
 
         do {
+            let realm = try Realm()
             try realm.write {
 
                 for fileName in fileNames {
@@ -308,22 +318,22 @@ class NCManageDatabase: NSObject {
 
     func getChunk(account: String, fileName: String) -> tableChunk? {
 
-        let realm = try! Realm()
-
-        if let result = realm.objects(tableChunk.self).filter("account == %@ AND fileName == %@", account, fileName).first {
+        do {
+            let realm = try Realm()
+            guard let result = realm.objects(tableChunk.self).filter("account == %@ AND fileName == %@", account, fileName).first else { return nil }
             return tableChunk.init(value: result)
-        } else {
-            return nil
+        } catch let error as NSError {
+            NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)")
         }
+
+        return nil
     }
 
     func deleteChunk(account: String, ocId: String, fileName: String) {
 
-        let realm = try! Realm()
-
         do {
+            let realm = try Realm()
             try realm.write {
-
                 let result = realm.objects(tableChunk.self).filter(NSPredicate(format: "account == %@ AND ocId == %@ AND fileName == %@", account, ocId, fileName))
                 realm.delete(result)
             }
@@ -334,9 +344,8 @@ class NCManageDatabase: NSObject {
 
     func deleteChunks(account: String, ocId: String) {
 
-        let realm = try! Realm()
-
         do {
+            let realm = try Realm()
             try realm.write {
 
                 let result = realm.objects(tableChunk.self).filter(NSPredicate(format: "account == %@ AND ocId == %@", account, ocId))
@@ -352,9 +361,8 @@ class NCManageDatabase: NSObject {
 
     func addDirectEditing(account: String, editors: [NKEditorDetailsEditors], creators: [NKEditorDetailsCreators]) {
 
-        let realm = try! Realm()
-
         do {
+            let realm = try Realm()
             try realm.write {
 
                 let resultsCreators = realm.objects(tableDirectEditingCreators.self).filter("account == %@", account)
@@ -410,36 +418,53 @@ class NCManageDatabase: NSObject {
         let realm = try! Realm()
         let results = realm.objects(tableDirectEditingCreators.self).filter("account == %@", account)
 
-        if results.count > 0 {
-            return Array(results.map { tableDirectEditingCreators.init(value: $0) })
-        } else {
-            return nil
+        do {
+            let realm = try Realm()
+            let results = realm.objects(tableDirectEditingCreators.self).filter("account == %@", account)
+            if results.isEmpty {
+                return nil
+            } else {
+                return Array(results.map { tableDirectEditingCreators.init(value: $0) })
+            }
+        } catch let error as NSError {
+            NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)")
         }
+
+        return nil
     }
 
     func getDirectEditingCreators(predicate: NSPredicate) -> [tableDirectEditingCreators]? {
 
-        let realm = try! Realm()
-
-        let results = realm.objects(tableDirectEditingCreators.self).filter(predicate)
-
-        if results.count > 0 {
-            return Array(results.map { tableDirectEditingCreators.init(value: $0) })
-        } else {
-            return nil
+        do {
+            let realm = try Realm()
+            let results = realm.objects(tableDirectEditingCreators.self).filter(predicate)
+            if results.isEmpty {
+                return nil
+            } else {
+                return Array(results.map { tableDirectEditingCreators.init(value: $0) })
+            }
+        } catch let error as NSError {
+            NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)")
         }
+
+        return nil
     }
 
     func getDirectEditingEditors(account: String) -> [tableDirectEditingEditors]? {
 
-        let realm = try! Realm()
-        let results = realm.objects(tableDirectEditingEditors.self).filter("account == %@", account)
-
-        if results.count > 0 {
-            return Array(results.map { tableDirectEditingEditors.init(value: $0) })
-        } else {
-            return nil
+        do {
+            let realm = try Realm()
+            let results = realm.objects(tableDirectEditingEditors.self).filter("account == %@", account)
+            if results.isEmpty {
+                return nil
+            } else {
+                return Array(results.map { tableDirectEditingEditors.init(value: $0) })
+            }
+        } catch let error as NSError {
+            NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)")
         }
+
+        return nil
     }
 
     // MARK: -
@@ -447,9 +472,8 @@ class NCManageDatabase: NSObject {
 
     func addExternalSites(_ externalSite: NKExternalSite, account: String) {
 
-        let realm = try! Realm()
-
         do {
+            let realm = try Realm()
             try realm.write {
                 let addObject = tableExternalSites()
 
@@ -470,9 +494,8 @@ class NCManageDatabase: NSObject {
 
     func deleteExternalSites(account: String) {
 
-        let realm = try! Realm()
-
         do {
+            let realm = try Realm()
             try realm.write {
                 let results = realm.objects(tableExternalSites.self).filter("account == %@", account)
                 realm.delete(results)
@@ -484,15 +507,19 @@ class NCManageDatabase: NSObject {
 
     func getAllExternalSites(account: String) -> [tableExternalSites]? {
 
-        let realm = try! Realm()
-
-        let results = realm.objects(tableExternalSites.self).filter("account == %@", account).sorted(byKeyPath: "idExternalSite", ascending: true)
-
-        if results.count > 0 {
-            return Array(results.map { tableExternalSites.init(value: $0) })
-        } else {
-            return nil
+        do {
+            let realm = try Realm()
+            let results = realm.objects(tableExternalSites.self).filter("account == %@", account).sorted(byKeyPath: "idExternalSite", ascending: true)
+            if results.isEmpty {
+                return nil
+            } else {
+                return Array(results.map { tableExternalSites.init(value: $0) })
+            }
+        } catch let error as NSError {
+            NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)")
         }
+
+        return nil
     }
 
     // MARK: -
@@ -500,43 +527,37 @@ class NCManageDatabase: NSObject {
 
     @objc func addGeocoderLocation(_ location: String, placemarkAdministrativeArea: String, placemarkCountry: String, placemarkLocality: String, placemarkPostalCode: String, placemarkThoroughfare: String, latitude: String, longitude: String) {
 
-        let realm = try! Realm()
-
-        realm.beginWrite()
-
-        // Verify if exists
-        guard realm.objects(tableGPS.self).filter("latitude == %@ AND longitude == %@", latitude, longitude).first == nil else {
-            realm.cancelWrite()
-            return
-        }
-
-        // Add new GPS
-        let addObject = tableGPS()
-
-        addObject.latitude = latitude
-        addObject.location = location
-        addObject.longitude = longitude
-        addObject.placemarkAdministrativeArea = placemarkAdministrativeArea
-        addObject.placemarkCountry = placemarkCountry
-        addObject.placemarkLocality = placemarkLocality
-        addObject.placemarkPostalCode = placemarkPostalCode
-        addObject.placemarkThoroughfare = placemarkThoroughfare
-
-        realm.add(addObject)
-
         do {
-            try realm.commitWrite()
-        } catch let error {
+            let realm = try Realm()
+            guard realm.objects(tableGPS.self).filter("latitude == %@ AND longitude == %@", latitude, longitude).first == nil else { return }
+            try realm.write {
+                let addObject = tableGPS()
+                addObject.latitude = latitude
+                addObject.location = location
+                addObject.longitude = longitude
+                addObject.placemarkAdministrativeArea = placemarkAdministrativeArea
+                addObject.placemarkCountry = placemarkCountry
+                addObject.placemarkLocality = placemarkLocality
+                addObject.placemarkPostalCode = placemarkPostalCode
+                addObject.placemarkThoroughfare = placemarkThoroughfare
+                realm.add(addObject)
+            }
+        } catch let error as NSError {
             NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)")
         }
     }
 
     @objc func getLocationFromGeoLatitude(_ latitude: String, longitude: String) -> String? {
 
-        let realm = try! Realm()
+        do {
+            let realm = try Realm()
+            let result = realm.objects(tableGPS.self).filter("latitude == %@ AND longitude == %@", latitude, longitude).first
+            return result?.location
+        } catch let error as NSError {
+            NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)")
+        }
 
-        let result = realm.objects(tableGPS.self).filter("latitude == %@ AND longitude == %@", latitude, longitude).first
-        return result?.location
+        return nil
     }
 
     // MARK: -
@@ -544,13 +565,10 @@ class NCManageDatabase: NSObject {
 
     func addLocalFile(metadata: tableMetadata) {
 
-        let realm = try! Realm()
-
         do {
+            let realm = try Realm()
             try realm.write {
-
                 let addObject = getTableLocalFile(predicate: NSPredicate(format: "ocId == %@", metadata.ocId)) ?? tableLocalFile()
-
                 addObject.account = metadata.account
                 addObject.etag = metadata.etag
                 addObject.exifDate = NSDate()
@@ -558,7 +576,6 @@ class NCManageDatabase: NSObject {
                 addObject.exifLongitude = "-1"
                 addObject.ocId = metadata.ocId
                 addObject.fileName = metadata.fileName
-
                 realm.add(addObject, update: .all)
             }
         } catch let error {
@@ -568,13 +585,10 @@ class NCManageDatabase: NSObject {
 
     func addLocalFile(account: String, etag: String, ocId: String, fileName: String) {
 
-        let realm = try! Realm()
-
         do {
+            let realm = try Realm()
             try realm.write {
-
                 let addObject = tableLocalFile()
-
                 addObject.account = account
                 addObject.etag = etag
                 addObject.exifDate = NSDate()
@@ -582,7 +596,6 @@ class NCManageDatabase: NSObject {
                 addObject.exifLongitude = "-1"
                 addObject.ocId = ocId
                 addObject.fileName = fileName
-
                 realm.add(addObject, update: .all)
             }
         } catch let error {
@@ -592,9 +605,8 @@ class NCManageDatabase: NSObject {
 
     func deleteLocalFile(predicate: NSPredicate) {
 
-        let realm = try! Realm()
-
         do {
+            let realm = try Realm()
             try realm.write {
                 let results = realm.objects(tableLocalFile.self).filter(predicate)
                 realm.delete(results)
@@ -606,9 +618,8 @@ class NCManageDatabase: NSObject {
 
     func setLocalFile(ocId: String, fileName: String?, etag: String?) {
 
-        let realm = try! Realm()
-
         do {
+            let realm = try Realm()
             try realm.write {
                 let result = realm.objects(tableLocalFile.self).filter("ocId == %@", ocId).first
                 if let fileName = fileName {
@@ -625,9 +636,8 @@ class NCManageDatabase: NSObject {
 
     @objc func setLocalFile(ocId: String, exifDate: NSDate?, exifLatitude: String, exifLongitude: String, exifLensModel: String?) {
 
-        let realm = try! Realm()
-
         do {
+            let realm = try Realm()
             try realm.write {
                 if let result = realm.objects(tableLocalFile.self).filter("ocId == %@", ocId).first {
                     result.exifDate = exifDate
@@ -645,36 +655,47 @@ class NCManageDatabase: NSObject {
 
     func getTableLocalFile(account: String) -> [tableLocalFile] {
 
-        let realm = try! Realm()
+        do {
+            let realm = try Realm()
+            let results = realm.objects(tableLocalFile.self).filter("account == %@", account)
+            return Array(results.map { tableLocalFile.init(value: $0) })
+        } catch let error as NSError {
+            NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)")
+        }
 
-        let results = realm.objects(tableLocalFile.self).filter("account == %@", account)
-        return Array(results.map { tableLocalFile.init(value: $0) })
+        return []
     }
 
     func getTableLocalFile(predicate: NSPredicate) -> tableLocalFile? {
 
-        let realm = try! Realm()
-
-        guard let result = realm.objects(tableLocalFile.self).filter(predicate).first else {
-            return nil
+        do {
+            let realm = try Realm()
+            guard let result = realm.objects(tableLocalFile.self).filter(predicate).first else { return nil }
+            return tableLocalFile.init(value: result)
+        } catch let error as NSError {
+            NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)")
         }
 
-        return tableLocalFile.init(value: result)
+        return nil
     }
 
     func getTableLocalFiles(predicate: NSPredicate, sorted: String, ascending: Bool) -> [tableLocalFile] {
 
-        let realm = try! Realm()
+        do {
+            let realm = try Realm()
+            let results = realm.objects(tableLocalFile.self).filter(predicate).sorted(byKeyPath: sorted, ascending: ascending)
+            return Array(results.map { tableLocalFile.init(value: $0) })
+        } catch let error as NSError {
+            NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)")
+        }
 
-        let results = realm.objects(tableLocalFile.self).filter(predicate).sorted(byKeyPath: sorted, ascending: ascending)
-        return Array(results.map { tableLocalFile.init(value: $0) })
+        return []
     }
 
     func setLocalFile(ocId: String, offline: Bool) {
 
-        let realm = try! Realm()
-
         do {
+            let realm = try Realm()
             try realm.write {
                 let result = realm.objects(tableLocalFile.self).filter("ocId == %@", ocId).first
                 result?.offline = offline
@@ -690,16 +711,12 @@ class NCManageDatabase: NSObject {
     @discardableResult
     func addPhotoLibrary(_ assets: [PHAsset], account: String) -> Bool {
 
-        let realm = try! Realm()
-
         do {
+            let realm = try Realm()
             try realm.write {
-
                 for asset in assets {
-
                     var creationDateString = ""
                     let addObject = tablePhotoLibrary()
-
                     addObject.account = account
                     addObject.assetLocalIdentifier = asset.localIdentifier
                     addObject.mediaType = asset.mediaType.rawValue
@@ -711,7 +728,6 @@ class NCManageDatabase: NSObject {
                         addObject.modificationDate = modificationDate as NSDate
                     }
                     addObject.idAsset = account + asset.localIdentifier + creationDateString
-
                     realm.add(addObject, update: .all)
                 }
             }
@@ -725,46 +741,40 @@ class NCManageDatabase: NSObject {
 
     func getPhotoLibraryIdAsset(image: Bool, video: Bool, account: String) -> [String]? {
 
-        let realm = try! Realm()
         var predicate = NSPredicate()
 
         if image && video {
-
             predicate = NSPredicate(format: "account == %@ AND (mediaType == %d OR mediaType == %d)", account, PHAssetMediaType.image.rawValue, PHAssetMediaType.video.rawValue)
-
         } else if image {
-
             predicate = NSPredicate(format: "account == %@ AND mediaType == %d", account, PHAssetMediaType.image.rawValue)
-
         } else if video {
-
             predicate = NSPredicate(format: "account == %@ AND mediaType == %d", account, PHAssetMediaType.video.rawValue)
         }
 
-        let results = realm.objects(tablePhotoLibrary.self).filter(predicate)
-
-        let idsAsset = results.map { $0.idAsset }
+        do {
+            let realm = try Realm()
+            let results = realm.objects(tablePhotoLibrary.self).filter(predicate)
+            let idsAsset = results.map { $0.idAsset }
+            return Array(idsAsset)
+        } catch let error as NSError {
+            NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)")
+        }
 
-        return Array(idsAsset)
+        return nil
     }
-    
+
     // MARK: -
     // MARK: Table Tag
 
     func addTag(_ ocId: String, tagIOS: Data?, account: String) {
 
-        let realm = try! Realm()
-
         do {
+            let realm = try Realm()
             try realm.write {
-
-                // Add new
                 let addObject = tableTag()
-
                 addObject.account = account
                 addObject.ocId = ocId
                 addObject.tagIOS = tagIOS
-
                 realm.add(addObject, update: .all)
             }
         } catch let error {
@@ -774,15 +784,12 @@ class NCManageDatabase: NSObject {
 
     func deleteTag(_ ocId: String) {
 
-        let realm = try! Realm()
-
-        realm.beginWrite()
-
-        let result = realm.objects(tableTag.self).filter("ocId == %@", ocId)
-        realm.delete(result)
-
         do {
-            try realm.commitWrite()
+            let realm = try Realm()
+            try realm.write {
+                let results = realm.objects(tableTag.self).filter("ocId == %@", ocId)
+                realm.delete(results)
+            }
         } catch let error {
             NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)")
         }
@@ -790,22 +797,28 @@ class NCManageDatabase: NSObject {
 
     func getTags(predicate: NSPredicate) -> [tableTag] {
 
-        let realm = try! Realm()
-
-        let results = realm.objects(tableTag.self).filter(predicate)
+        do {
+            let realm = try Realm()
+            let results = realm.objects(tableTag.self).filter(predicate)
+            return Array(results.map { tableTag.init(value: $0) })
+        } catch let error as NSError {
+            NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)")
+        }
 
-        return Array(results.map { tableTag.init(value: $0) })
+        return []
     }
 
     func getTag(predicate: NSPredicate) -> tableTag? {
 
-        let realm = try! Realm()
-
-        guard let result = realm.objects(tableTag.self).filter(predicate).first else {
-            return nil
+        do {
+            let realm = try Realm()
+            guard let result = realm.objects(tableTag.self).filter(predicate).first else { return nil }
+            return tableTag.init(value: result)
+        } catch let error as NSError {
+            NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)")
         }
 
-        return tableTag.init(value: result)
+        return nil
     }
 
     // MARK: -
@@ -813,12 +826,15 @@ class NCManageDatabase: NSObject {
 
     func tipExists(_ tipName: String) -> Bool {
 
-        let realm = try! Realm()
-
-        guard (realm.objects(tableTip.self).where {
-            $0.tipName == tipName
-        }.first) == nil else {
-            return true
+        do {
+            let realm = try Realm()
+            guard (realm.objects(tableTip.self).where {
+                $0.tipName == tipName
+            }.first) == nil else {
+                return true
+            }
+        } catch let error as NSError {
+            NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)")
         }
 
         return false
@@ -826,9 +842,8 @@ class NCManageDatabase: NSObject {
 
     func addTip(_ tipName: String) {
 
-        let realm = try! Realm()
-
         do {
+            let realm = try Realm()
             try realm.write {
                 let addObject = tableTip()
                 addObject.tipName = tipName
@@ -844,13 +859,11 @@ class NCManageDatabase: NSObject {
 
     func addTrash(account: String, items: [NKTrash]) {
 
-        let realm = try! Realm()
-
         do {
+            let realm = try Realm()
             try realm.write {
                 for trash in items {
                     let object = tableTrash()
-
                     object.account = account
                     object.contentType = trash.contentType
                     object.date = trash.date
@@ -865,7 +878,6 @@ class NCManageDatabase: NSObject {
                     object.trashbinFileName = trash.trashbinFileName
                     object.trashbinOriginalLocation = trash.trashbinOriginalLocation
                     object.classFile = trash.classFile
-
                     realm.add(object, update: .all)
                 }
             }
@@ -876,18 +888,16 @@ class NCManageDatabase: NSObject {
 
     func deleteTrash(filePath: String?, account: String) {
 
-        let realm = try! Realm()
         var predicate = NSPredicate()
 
         do {
+            let realm = try Realm()
             try realm.write {
-
                 if filePath == nil {
                     predicate = NSPredicate(format: "account == %@", account)
                 } else {
                     predicate = NSPredicate(format: "account == %@ AND filePath == %@", account, filePath!)
                 }
-
                 let result = realm.objects(tableTrash.self).filter(predicate)
                 realm.delete(result)
             }
@@ -898,18 +908,16 @@ class NCManageDatabase: NSObject {
 
     func deleteTrash(fileId: String?, account: String) {
 
-        let realm = try! Realm()
         var predicate = NSPredicate()
 
         do {
+            let realm = try Realm()
             try realm.write {
-
                 if fileId == nil {
                     predicate = NSPredicate(format: "account == %@", account)
                 } else {
                     predicate = NSPredicate(format: "account == %@ AND fileId == %@", account, fileId!)
                 }
-
                 let result = realm.objects(tableTrash.self).filter(predicate)
                 realm.delete(result)
             }
@@ -920,24 +928,31 @@ class NCManageDatabase: NSObject {
 
     func getTrash(filePath: String, sort: String?, ascending: Bool?, account: String) -> [tableTrash]? {
 
-        let realm = try! Realm()
         let sort = sort ?? "date"
         let ascending = ascending ?? false
 
-        let results = realm.objects(tableTrash.self).filter("account == %@ AND filePath == %@", account, filePath).sorted(byKeyPath: sort, ascending: ascending)
+        do {
+            let realm = try Realm()
+            let results = realm.objects(tableTrash.self).filter("account == %@ AND filePath == %@", account, filePath).sorted(byKeyPath: sort, ascending: ascending)
+            return Array(results.map { tableTrash.init(value: $0) })
+        } catch let error as NSError {
+            NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)")
+        }
 
-        return Array(results.map { tableTrash.init(value: $0) })
+        return nil
     }
 
     func getTrashItem(fileId: String, account: String) -> tableTrash? {
 
-        let realm = try! Realm()
-
-        guard let result = realm.objects(tableTrash.self).filter("account == %@ AND fileId == %@", account, fileId).first else {
-            return nil
+        do {
+            let realm = try Realm()
+            guard let result = realm.objects(tableTrash.self).filter("account == %@ AND fileId == %@", account, fileId).first else { return nil }
+            return tableTrash.init(value: result)
+        } catch let error as NSError {
+            NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)")
         }
 
-        return tableTrash.init(value: result)
+        return nil
     }
 
     // MARK: -
@@ -945,18 +960,13 @@ class NCManageDatabase: NSObject {
 
     func addUserStatus(_ userStatuses: [NKUserStatus], account: String, predefined: Bool) {
 
-        let realm = try! Realm()
-
         do {
+            let realm = try Realm()
             try realm.write {
-
                 let results = realm.objects(tableUserStatus.self).filter("account == %@ AND predefined == %@", account, predefined)
                 realm.delete(results)
-
                 for userStatus in userStatuses {
-
                     let object = tableUserStatus()
-
                     object.account = account
                     object.clearAt = userStatus.clearAt
                     object.clearAtTime = userStatus.clearAtTime
@@ -967,7 +977,6 @@ class NCManageDatabase: NSObject {
                     object.predefined = userStatus.predefined
                     object.status = userStatus.status
                     object.userId = userStatus.userId
-
                     realm.add(object)
                 }
             }