From 5c6476d93ef8e1fb4a3ea2aa34ed0618532a1926 Mon Sep 17 00:00:00 2001 From: Marino Faggiana Date: Wed, 5 Jul 2023 11:59:32 +0200 Subject: [PATCH 01/26] fix Signed-off-by: Marino Faggiana --- .../NCCollectionViewCommon.swift | 35 ++----------------- 1 file changed, 2 insertions(+), 33 deletions(-) diff --git a/iOSClient/Main/Collection Common/NCCollectionViewCommon.swift b/iOSClient/Main/Collection Common/NCCollectionViewCommon.swift index ffafa6d1c3..425ff836eb 100644 --- a/iOSClient/Main/Collection Common/NCCollectionViewCommon.swift +++ b/iOSClient/Main/Collection Common/NCCollectionViewCommon.swift @@ -433,23 +433,13 @@ class NCCollectionViewCommon: UIViewController, UIGestureRecognizerDelegate, UIS @objc func downloadStartFile(_ notification: NSNotification) { guard let userInfo = notification.userInfo as NSDictionary?, - let ocId = userInfo["ocId"] as? String, let serverUrl = userInfo["serverUrl"] as? String, serverUrl == self.serverUrl, let account = userInfo["account"] as? String, account == appDelegate.account else { return } - let (indexPath, sameSections) = dataSource.reloadMetadata(ocId: ocId) - if let indexPath = indexPath { - if sameSections && (indexPath.section < collectionView.numberOfSections && indexPath.row < collectionView.numberOfItems(inSection: indexPath.section)) { - collectionView?.reloadItems(at: [indexPath]) - } else { - self.collectionView?.reloadData() - } - } else { - reloadDataSource() - } + reloadDataSource() } @objc func downloadedFile(_ notification: NSNotification) { @@ -514,34 +504,13 @@ class NCCollectionViewCommon: UIViewController, UIGestureRecognizerDelegate, UIS @objc func uploadedFile(_ notification: NSNotification) { guard let userInfo = notification.userInfo as NSDictionary?, - let ocId = userInfo["ocId"] as? String, - let ocIdTemp = userInfo["ocIdTemp"] as? String, let serverUrl = userInfo["serverUrl"] as? String, serverUrl == self.serverUrl, let account = userInfo["account"] as? String, account == appDelegate.account else { return } - // do not exists metadata ? - guard let metadata = NCManageDatabase.shared.getMetadataFromOcId(ocId) else { - reloadDataSource() - return - } - - let (indexPath, sameSections) = dataSource.reloadMetadata(ocId: metadata.ocId, ocIdTemp: ocIdTemp) - if let indexPath = indexPath { - if sameSections && (indexPath.section < collectionView.numberOfSections && indexPath.row < collectionView.numberOfItems(inSection: indexPath.section)) { - collectionView?.performBatchUpdates({ - collectionView?.reloadItems(at: [indexPath]) - }, completion: { _ in - self.collectionView?.reloadData() - }) - } else { - self.collectionView?.reloadData() - } - } else { - reloadDataSource() - } + reloadDataSource() } @objc func uploadCancelFile(_ notification: NSNotification) { From dab8c9b6d15aea7e03c9392921fb5269638c0541 Mon Sep 17 00:00:00 2001 From: Marino Faggiana Date: Wed, 5 Jul 2023 12:35:59 +0200 Subject: [PATCH 02/26] lint Signed-off-by: Marino Faggiana --- .swiftlint.yml | 2 +- iOSClient/Data/NCManageDatabase+Account.swift | 172 +++++++++--------- .../NCNetworkingProcessUpload.swift | 38 ++-- 3 files changed, 113 insertions(+), 99 deletions(-) diff --git a/.swiftlint.yml b/.swiftlint.yml index ba1e26797a..4c8e648fbf 100644 --- a/.swiftlint.yml +++ b/.swiftlint.yml @@ -38,6 +38,7 @@ disabled_rules: - nesting - shorthand_operator - force_try + - type_name excluded: - Carthage @@ -74,7 +75,6 @@ excluded: - iOSClient/Data/NCDatabase.swift - iOSClient/Data/NCElementsJSON.swift - iOSClient/Data/NCManageDatabase+Capabilities.swift - - iOSClient/Data/NCManageDatabase+Account.swift - iOSClient/Data/NCManageDatabase+Activity.swift - iOSClient/Data/NCManageDatabase+Avatar.swift - iOSClient/Data/NCManageDatabase+E2EE.swift diff --git a/iOSClient/Data/NCManageDatabase+Account.swift b/iOSClient/Data/NCManageDatabase+Account.swift index 6522d05cb8..51310d7782 100644 --- a/iOSClient/Data/NCManageDatabase+Account.swift +++ b/iOSClient/Data/NCManageDatabase+Account.swift @@ -103,9 +103,8 @@ extension NCManageDatabase { @objc func addAccount(_ account: String, urlBase: String, user: String, password: String) { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { let addObject = tableAccount() @@ -135,9 +134,8 @@ extension NCManageDatabase { @objc func updateAccount(_ account: tableAccount) { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { realm.add(account, update: .all) } @@ -148,9 +146,8 @@ extension NCManageDatabase { @objc func deleteAccount(_ account: String) { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { let result = realm.objects(tableAccount.self).filter("account == %@", account) realm.delete(result) @@ -162,23 +159,27 @@ extension NCManageDatabase { @objc func getActiveAccount() -> tableAccount? { - let realm = try! Realm() - - guard let result = realm.objects(tableAccount.self).filter("active == true").first else { - return nil + do { + let realm = try Realm() + guard let result = realm.objects(tableAccount.self).filter("active == true").first else { return nil } + return tableAccount.init(value: result) + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } - return tableAccount.init(value: result) + return nil } @objc func getAccounts() -> [String]? { - let realm = try! Realm() - - let results = realm.objects(tableAccount.self).sorted(byKeyPath: "account", ascending: true) - - if results.count > 0 { - return Array(results.map { $0.account }) + do { + let realm = try Realm() + let results = realm.objects(tableAccount.self).sorted(byKeyPath: "account", ascending: true) + if !results.isEmpty { + return Array(results.map { $0.account }) + } + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } return nil @@ -186,68 +187,82 @@ extension NCManageDatabase { @objc func getAccount(predicate: NSPredicate) -> tableAccount? { - let realm = try! Realm() - - guard let result = realm.objects(tableAccount.self).filter(predicate).first else { - return nil + do { + let realm = try Realm() + guard let result = realm.objects(tableAccount.self).filter(predicate).first else { return nil } + return tableAccount.init(value: result) + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } - return tableAccount.init(value: result) + return nil } @objc func getAllAccount() -> [tableAccount] { - let realm = try! Realm() - - let sorted = [SortDescriptor(keyPath: "active", ascending: false), SortDescriptor(keyPath: "user", ascending: true)] - let results = realm.objects(tableAccount.self).sorted(by: sorted) + do { + let realm = try Realm() + let sorted = [SortDescriptor(keyPath: "active", ascending: false), SortDescriptor(keyPath: "user", ascending: true)] + let results = realm.objects(tableAccount.self).sorted(by: sorted) + return Array(results.map { tableAccount.init(value: $0) }) + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") + } - return Array(results.map { tableAccount.init(value: $0) }) + return [] } @objc func getAllAccountOrderAlias() -> [tableAccount] { - let realm = try! Realm() - - let sorted = [SortDescriptor(keyPath: "active", ascending: false), SortDescriptor(keyPath: "alias", ascending: true), SortDescriptor(keyPath: "user", ascending: true)] - let results = realm.objects(tableAccount.self).sorted(by: sorted) + do { + let realm = try Realm() + let sorted = [SortDescriptor(keyPath: "active", ascending: false), SortDescriptor(keyPath: "alias", ascending: true), SortDescriptor(keyPath: "user", ascending: true)] + let results = realm.objects(tableAccount.self).sorted(by: sorted) + return Array(results.map { tableAccount.init(value: $0) }) + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") + } - return Array(results.map { tableAccount.init(value: $0) }) + return [] } @objc func getAccountAutoUploadFileName() -> String { - let realm = try! Realm() - - guard let result = realm.objects(tableAccount.self).filter("active == true").first else { - return "" + do { + let realm = try Realm() + guard let result = realm.objects(tableAccount.self).filter("active == true").first else { return "" } + if result.autoUploadFileName.isEmpty { + return NCBrandOptions.shared.folderDefaultAutoUpload + } else { + return result.autoUploadFileName + } + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } - if result.autoUploadFileName.count > 0 { - return result.autoUploadFileName - } else { - return NCBrandOptions.shared.folderDefaultAutoUpload - } + return "" } @objc func getAccountAutoUploadDirectory(urlBase: String, userId: String, account: String) -> String { - let realm = try! Realm() - - guard let result = realm.objects(tableAccount.self).filter("active == true").first else { - return "" - } - - if result.autoUploadDirectory.count > 0 { - // FIX change webdav -> /dav/files/ - if result.autoUploadDirectory.contains("/webdav") { + do { + let realm = try Realm() + guard let result = realm.objects(tableAccount.self).filter("active == true").first else { return "" } + if result.autoUploadDirectory.isEmpty { return NCUtilityFileSystem.shared.getHomeServer(urlBase: urlBase, userId: userId) } else { - return result.autoUploadDirectory + // FIX change webdav -> /dav/files/ + if result.autoUploadDirectory.contains("/webdav") { + return NCUtilityFileSystem.shared.getHomeServer(urlBase: urlBase, userId: userId) + } else { + return result.autoUploadDirectory + } } - } else { - return NCUtilityFileSystem.shared.getHomeServer(urlBase: urlBase, userId: userId) + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } + + return "" } @objc func getAccountAutoUploadPath(urlBase: String, userId: String, account: String) -> String { @@ -262,22 +277,24 @@ extension NCManageDatabase { @objc func getAccountAutoUploadSubfolderGranularity() -> Int64 { - let realm = try! Realm() - - guard let result = realm.objects(tableAccount.self).filter("active == true").first else { - return 1 + do { + let realm = try Realm() + guard let result = realm.objects(tableAccount.self).filter("active == true").first else { return 1 } + return result.autoUploadSubfolderGranularity + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } - return result.autoUploadSubfolderGranularity + return 1 } - + @discardableResult @objc func setAccountActive(_ account: String) -> tableAccount? { - let realm = try! Realm() var accountReturn = tableAccount() do { + let realm = try Realm() try realm.write { let results = realm.objects(tableAccount.self) @@ -300,9 +317,8 @@ extension NCManageDatabase { @objc func removePasswordAccount(_ account: String) { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { if let result = realm.objects(tableAccount.self).filter("account == %@", account).first { @@ -316,9 +332,8 @@ extension NCManageDatabase { @objc func setAccountAutoUploadProperty(_ property: String, state: Bool) { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { if let result = realm.objects(tableAccount.self).filter("active == true").first { if (tableAccount().objectSchema.properties.contains { $0.name == property }) { @@ -333,9 +348,8 @@ extension NCManageDatabase { @objc func setAccountAutoUploadGranularity(_ property: String, state: Int64) { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { if let result = realm.objects(tableAccount.self).filter("active == true").first { result.autoUploadSubfolderGranularity = state @@ -345,12 +359,11 @@ extension NCManageDatabase { NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } } - - @objc func setAccountAutoUploadFileName(_ fileName: String?) { - let realm = try! Realm() + @objc func setAccountAutoUploadFileName(_ fileName: String?) { do { + let realm = try Realm() try realm.write { if let result = realm.objects(tableAccount.self).filter("active == true").first { if let fileName = fileName { @@ -367,9 +380,8 @@ extension NCManageDatabase { @objc func setAccountAutoUploadDirectory(_ serverUrl: String?, urlBase: String, userId: String, account: String) { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { if let result = realm.objects(tableAccount.self).filter("active == true").first { if let serverUrl = serverUrl { @@ -386,9 +398,8 @@ extension NCManageDatabase { @objc func setAccountUserProfile(account: String, userProfile: NKUserProfile) -> tableAccount? { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { if let result = realm.objects(tableAccount.self).filter("account == %@", account).first { result.address = userProfile.address @@ -416,21 +427,20 @@ extension NCManageDatabase { result.website = userProfile.website } } + if let result = realm.objects(tableAccount.self).filter("account == %@", account).first { + return tableAccount.init(value: result) + } } catch let error { NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } - if let result = realm.objects(tableAccount.self).filter("account == %@", account).first { - return tableAccount.init(value: result) - } else { - return nil - } + return nil } @objc func setAccountMediaPath(_ path: String, account: String) { - let realm = try! Realm() do { + let realm = try Realm() try realm.write { if let result = realm.objects(tableAccount.self).filter("account == %@", account).first { result.mediaPath = path @@ -443,8 +453,8 @@ extension NCManageDatabase { @objc func setAccountUserStatus(userStatusClearAt: NSDate?, userStatusIcon: String?, userStatusMessage: String?, userStatusMessageId: String?, userStatusMessageIsPredefined: Bool, userStatusStatus: String?, userStatusStatusIsUserDefined: Bool, account: String) { - let realm = try! Realm() do { + let realm = try Realm() try realm.write { if let result = realm.objects(tableAccount.self).filter("account == %@", account).first { result.userStatusClearAt = userStatusClearAt @@ -463,10 +473,10 @@ extension NCManageDatabase { @objc func setAccountAlias(_ alias: String?) { - let realm = try! Realm() let alias = alias?.trimmingCharacters(in: .whitespacesAndNewlines) do { + let realm = try Realm() try realm.write { if let result = realm.objects(tableAccount.self).filter("active == true").first { if let alias = alias { diff --git a/iOSClient/Networking/NCNetworkingProcessUpload.swift b/iOSClient/Networking/NCNetworkingProcessUpload.swift index 4795e308e6..3e8733b9e8 100644 --- a/iOSClient/Networking/NCNetworkingProcessUpload.swift +++ b/iOSClient/Networking/NCNetworkingProcessUpload.swift @@ -39,25 +39,29 @@ class NCNetworkingProcessUpload: NSObject { private var pauseProcess: Bool = false func observeTableMetadata() { - let realm = try! Realm() - let results = realm.objects(tableMetadata.self).filter("session != '' || sessionError != ''") - notificationToken = results.observe { [weak self] (changes: RealmCollectionChange) in - switch changes { - case .initial: - print("Initial") - case .update(_, let deletions, let insertions, let modifications): - if (deletions.count > 0 || insertions.count > 0 || modifications.count > 0) { - self?.invalidateObserveTableMetadata() - self?.start(completition: { items in - print("[LOG] PROCESS-UPLOAD-OBSERVE \(items)") - DispatchQueue.main.async { - self?.observeTableMetadata() - } - }) + do { + let realm = try Realm() + let results = realm.objects(tableMetadata.self).filter("session != '' || sessionError != ''") + notificationToken = results.observe { [weak self] (changes: RealmCollectionChange) in + switch changes { + case .initial: + print("Initial") + case .update(_, let deletions, let insertions, let modifications): + if (deletions.count > 0 || insertions.count > 0 || modifications.count > 0) { + self?.invalidateObserveTableMetadata() + self?.start(completition: { items in + print("[LOG] PROCESS-UPLOAD-OBSERVE \(items)") + DispatchQueue.main.async { + self?.observeTableMetadata() + } + }) + } + case .error(let error): + NextcloudKit.shared.nkCommonInstance.writeLog("[ERROR] Could not write to TableMetadata: \(error)") } - case .error(let error): - NextcloudKit.shared.nkCommonInstance.writeLog("[ERROR] Could not write to TableMetadata: \(error)") } + } catch let error as NSError { + NSLog("Could not access database: ", error) } } From 50fd2c4475826f2518f898336c6a965af9a64d56 Mon Sep 17 00:00:00 2001 From: Marino Faggiana Date: Wed, 5 Jul 2023 14:27:50 +0200 Subject: [PATCH 03/26] lint Signed-off-by: Marino Faggiana --- .swiftlint.yml | 14 - iOSClient/Data/NCManageDatabase.swift | 391 +++++++++++++------------- 2 files changed, 200 insertions(+), 205 deletions(-) diff --git a/.swiftlint.yml b/.swiftlint.yml index 4c8e648fbf..63325c2440 100644 --- a/.swiftlint.yml +++ b/.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 diff --git a/iOSClient/Data/NCManageDatabase.swift b/iOSClient/Data/NCManageDatabase.swift index 22e88dcc49..fdfdd4fc3b 100644 --- a/iOSClient/Data/NCManageDatabase.swift +++ b/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 @@ -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? { - // 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) + 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) } } From 0053fb28c87f9209c06acfb4fac5e72c6b7c0152 Mon Sep 17 00:00:00 2001 From: Marino Faggiana Date: Wed, 5 Jul 2023 14:33:27 +0200 Subject: [PATCH 04/26] lint Signed-off-by: Marino Faggiana --- iOSClient/Data/NCDataSource.swift | 47 +++++++++++++++---------------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/iOSClient/Data/NCDataSource.swift b/iOSClient/Data/NCDataSource.swift index eeb4508bbb..cfcdc8f0f4 100644 --- a/iOSClient/Data/NCDataSource.swift +++ b/iOSClient/Data/NCDataSource.swift @@ -124,14 +124,14 @@ class NCDataSource: NSObject { // Unified search if let providers = self.providers, !providers.isEmpty { - let sectionsDictionary = ThreadSafeDictionary() + let sectionsDictionary = ThreadSafeDictionary() for section in self.sectionsValue { if let provider = providers.filter({ $0.id == section}).first { sectionsDictionary[section] = provider.order } } self.sectionsValue.removeAll() - let sectionsDictionarySorted = sectionsDictionary.sorted(by: { $0.value < $1.value } ) + let sectionsDictionarySorted = sectionsDictionary.sorted(by: {$0.value < $1.value }) for section in sectionsDictionarySorted { if section.key == NCGlobal.shared.appName { self.sectionsValue.insert(section.key, at: 0) @@ -173,15 +173,15 @@ class NCDataSource: NSObject { searchResult = searchResults.filter({ $0.id == sectionValue}).first } let metadatas = self.metadatas.filter({ getSectionValue(metadata: $0) == sectionValue}) - let metadataForSection = NCMetadataForSection.init(sectionValue: sectionValue, - metadatas: metadatas, - localFiles: self.localFiles, - lastSearchResult: searchResult, - sort: self.sort, - ascending: self.ascending, - directoryOnTop: self.directoryOnTop, - favoriteOnTop: self.favoriteOnTop, - filterLivePhoto: self.filterLivePhoto) + let metadataForSection = NCMetadataForSection(sectionValue: sectionValue, + metadatas: metadatas, + localFiles: self.localFiles, + lastSearchResult: searchResult, + sort: self.sort, + ascending: self.ascending, + directoryOnTop: self.directoryOnTop, + favoriteOnTop: self.favoriteOnTop, + filterLivePhoto: self.filterLivePhoto) metadatasForSection.append(metadataForSection) } @@ -200,8 +200,8 @@ class NCDataSource: NSObject { @discardableResult func appendMetadatasToSection(_ metadatas: [tableMetadata], metadataForSection: NCMetadataForSection, lastSearchResult: NKSearchResult) -> [IndexPath] { - - guard let sectionIndex = getSectionIndex(metadataForSection.sectionValue) else { return [] } + + guard let sectionIndex = getSectionIndex(metadataForSection.sectionValue) else { return [] } var indexPaths: [IndexPath] = [] self.metadatas.append(contentsOf: metadatas) @@ -268,7 +268,7 @@ class NCDataSource: NSObject { let (indexPath, metadataForSection) = self.getIndexPathMetadata(ocId: ocId) if let indexPath = indexPath, let metadataForSection = metadataForSection, indexPath.row < metadataForSection.metadatas.count { metadataForSection.metadatas.remove(at: indexPath.row) - if metadataForSection.metadatas.count == 0 { + if metadataForSection.metadatas.isEmpty { // REMOVE sectionsValue / metadatasForSection sectionValue = metadataForSection.sectionValue if let sectionIndex = getSectionIndex(sectionValue) { @@ -329,32 +329,32 @@ class NCDataSource: NSObject { } func isSameNumbersOfSections(numberOfSections: Int) -> Bool { - guard self.metadatasForSection.count > 0 else { return false } + guard !self.metadatasForSection.isEmpty else { return false } return numberOfSections == self.numberOfSections() } func numberOfSections() -> Int { - guard self.sectionsValue.count > 0 else { return 1 } + guard !self.sectionsValue.isEmpty else { return 1 } return self.sectionsValue.count } - + func numberOfItemsInSection(_ section: Int) -> Int { - guard self.sectionsValue.count > 0 && self.metadatas.count > 0, let metadataForSection = getMetadataForSection(section) else { return 0} + guard !self.sectionsValue.isEmpty && !self.metadatas.isEmpty, let metadataForSection = getMetadataForSection(section) else { return 0} return metadataForSection.metadatas.count } func cellForItemAt(indexPath: IndexPath) -> tableMetadata? { - guard metadatasForSection.count > 0 && indexPath.section < metadatasForSection.count, let metadataForSection = getMetadataForSection(indexPath.section), indexPath.row < metadataForSection.metadatas.count else { return nil } + guard !metadatasForSection.isEmpty && indexPath.section < metadatasForSection.count, let metadataForSection = getMetadataForSection(indexPath.section), indexPath.row < metadataForSection.metadatas.count else { return nil } return metadataForSection.metadatas[indexPath.row] } func getSectionValue(indexPath: IndexPath) -> String { - guard metadatasForSection.count > 0 , let metadataForSection = self.getMetadataForSection(indexPath.section) else { return ""} + guard !metadatasForSection.isEmpty, let metadataForSection = self.getMetadataForSection(indexPath.section) else { return ""} return metadataForSection.sectionValue } func getSectionValueLocalization(indexPath: IndexPath) -> String { - guard metadatasForSection.count > 0 , let metadataForSection = self.getMetadataForSection(indexPath.section) else { return ""} + guard !metadatasForSection.isEmpty, let metadataForSection = self.getMetadataForSection(indexPath.section) else { return ""} if let searchResults = self.searchResults, let searchResult = searchResults.filter({ $0.id == metadataForSection.sectionValue}).first { return searchResult.name } @@ -423,7 +423,7 @@ class NCMetadataForSection: NSObject { var lastSearchResult: NKSearchResult? var unifiedSearchInProgress: Bool = false - private var sort : String + private var sort: String private var ascending: Bool private var directoryOnTop: Bool private var favoriteOnTop: Bool @@ -478,7 +478,7 @@ class NCMetadataForSection: NSObject { // Metadata order // - if sort != "none" && sort != "" { + if sort != "none" && !sort.isEmpty { metadatasSorted = metadatas.sorted { switch sort { @@ -543,7 +543,6 @@ class NCMetadataForSection: NSObject { metadatasFile.append(metadata) } - //Info if metadata.directory { ocIds.append(metadata.ocId) numDirectory += 1 From 653100051b582425a929a1d8403f4fb9b8d79231 Mon Sep 17 00:00:00 2001 From: Marino Faggiana Date: Wed, 5 Jul 2023 14:34:53 +0200 Subject: [PATCH 05/26] lint Signed-off-by: Marino Faggiana --- iOSClient/Data/NCManageDatabase.swift | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/iOSClient/Data/NCManageDatabase.swift b/iOSClient/Data/NCManageDatabase.swift index fdfdd4fc3b..d3c3918e40 100644 --- a/iOSClient/Data/NCManageDatabase.swift +++ b/iOSClient/Data/NCManageDatabase.swift @@ -271,7 +271,6 @@ class NCManageDatabase: NSObject { func getChunks(account: String, ocId: String) -> [String] { - let realm = try! Realm() var filesNames: [String] = [] do { @@ -285,7 +284,7 @@ class NCManageDatabase: NSObject { NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } - return [] + return filesNames } func addChunks(account: String, ocId: String, chunkFolder: String, fileNames: [String]) { @@ -415,9 +414,6 @@ class NCManageDatabase: NSObject { func getDirectEditingCreators(account: String) -> [tableDirectEditingCreators]? { - let realm = try! Realm() - let results = realm.objects(tableDirectEditingCreators.self).filter("account == %@", account) - do { let realm = try Realm() let results = realm.objects(tableDirectEditingCreators.self).filter("account == %@", account) From ef948201e1e95ec328a1f22aed82ed0ab5e10ae4 Mon Sep 17 00:00:00 2001 From: Marino Faggiana Date: Wed, 5 Jul 2023 14:39:44 +0200 Subject: [PATCH 06/26] lint Signed-off-by: Marino Faggiana --- .../Data/NCManageDatabase+Activity.swift | 108 +++++++++++------- 1 file changed, 64 insertions(+), 44 deletions(-) diff --git a/iOSClient/Data/NCManageDatabase+Activity.swift b/iOSClient/Data/NCManageDatabase+Activity.swift index 0c9e5ec0a0..458017e0bf 100644 --- a/iOSClient/Data/NCManageDatabase+Activity.swift +++ b/iOSClient/Data/NCManageDatabase+Activity.swift @@ -102,12 +102,11 @@ class tableActivitySubjectRich: Object { } extension NCManageDatabase { - - func addActivity(_ activities: [NKActivity], account: String) { - let realm = try! Realm() + func addActivity(_ activities: [NKActivity], account: String) { do { + let realm = try Realm() try realm.write { for activity in activities { @@ -195,64 +194,80 @@ extension NCManageDatabase { func getActivity(predicate: NSPredicate, filterFileId: String?) -> (all: [tableActivity], filter: [tableActivity]) { - let realm = try! Realm() - - let results = realm.objects(tableActivity.self).filter(predicate).sorted(byKeyPath: "idActivity", ascending: false) - let allActivity = Array(results.map(tableActivity.init)) - guard let filterFileId = filterFileId else { - return (all: allActivity, filter: allActivity) + do { + let realm = try Realm() + let results = realm.objects(tableActivity.self).filter(predicate).sorted(byKeyPath: "idActivity", ascending: false) + let allActivity = Array(results.map(tableActivity.init)) + guard let filterFileId = filterFileId else { + return (all: allActivity, filter: allActivity) + } + // comments are loaded seperately, see NCManageDatabase.getComments + let filtered = allActivity.filter({ String($0.objectId) == filterFileId && $0.type != "comments" }) + return (all: allActivity, filter: filtered) + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } - // comments are loaded seperately, see NCManageDatabase.getComments - let filtered = allActivity.filter({ String($0.objectId) == filterFileId && $0.type != "comments" }) - return (all: allActivity, filter: filtered) + return([], []) } func getActivitySubjectRich(account: String, idActivity: Int, key: String) -> tableActivitySubjectRich? { - let realm = try! Realm() - - let results = realm.objects(tableActivitySubjectRich.self).filter("account == %@ && idActivity == %d && key == %@", account, idActivity, key).first + do { + let realm = try Realm() + let results = realm.objects(tableActivitySubjectRich.self).filter("account == %@ && idActivity == %d && key == %@", account, idActivity, key).first + return results.map { tableActivitySubjectRich.init(value: $0) } + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") + } - return results.map { tableActivitySubjectRich.init(value: $0) } + return nil } func getActivitySubjectRich(account: String, idActivity: Int, id: String) -> tableActivitySubjectRich? { - let realm = try! Realm() - - let results = realm.objects(tableActivitySubjectRich.self).filter("account == %@ && idActivity == %d && id == %@", account, idActivity, id) - var activitySubjectRich = results.first - if results.count == 2 { - for result in results { - if result.key == "newfile" { - activitySubjectRich = result + do { + let realm = try Realm() + let results = realm.objects(tableActivitySubjectRich.self).filter("account == %@ && idActivity == %d && id == %@", account, idActivity, id) + var activitySubjectRich = results.first + if results.count == 2 { + for result in results { + if result.key == "newfile" { + activitySubjectRich = result + } } } + return activitySubjectRich.map { tableActivitySubjectRich.init(value: $0) } + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } - return activitySubjectRich.map { tableActivitySubjectRich.init(value: $0) } + return nil } func getActivityPreview(account: String, idActivity: Int, orderKeysId: [String]) -> [tableActivityPreview] { - let realm = try! Realm() - var results: [tableActivityPreview] = [] - for id in orderKeysId { - if let result = realm.objects(tableActivityPreview.self).filter("account == %@ && idActivity == %d && fileId == %d", account, idActivity, Int(id) ?? 0).first { - results.append(result) + do { + let realm = try Realm() + for id in orderKeysId { + if let result = realm.objects(tableActivityPreview.self).filter("account == %@ && idActivity == %d && fileId == %d", account, idActivity, Int(id) ?? 0).first { + results.append(result) + } } + return results + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } - return results + return [] } func updateLatestActivityId(activityFirstKnown: Int, activityLastGiven: Int, account: String) { - let realm = try! Realm() do { + let realm = try Realm() try realm.write { let newRecentActivity = tableActivityLatestId() newRecentActivity.activityFirstKnown = activityFirstKnown @@ -267,10 +282,16 @@ extension NCManageDatabase { func getLatestActivityId(account: String) -> tableActivityLatestId? { - let realm = try! Realm() - return realm.objects(tableActivityLatestId.self).filter("account == %@", account).first + do { + let realm = try Realm() + return realm.objects(tableActivityLatestId.self).filter("account == %@", account).first + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") + } + + return nil } - + // MARK: - // MARK: Table Comments @@ -280,14 +301,10 @@ extension NCManageDatabase { do { try realm.write { - let results = realm.objects(tableComments.self).filter("account == %@ AND objectId == %@", account, objectId) realm.delete(results) - for comment in comments { - let object = tableComments() - object.account = account object.actorDisplayName = comment.actorDisplayName object.actorId = comment.actorId @@ -300,7 +317,6 @@ extension NCManageDatabase { object.objectType = comment.objectType object.path = comment.path object.verb = comment.verb - realm.add(object, update: .all) } } @@ -311,10 +327,14 @@ extension NCManageDatabase { func getComments(account: String, objectId: String) -> [tableComments] { - let realm = try! Realm() - - let results = realm.objects(tableComments.self).filter("account == %@ AND objectId == %@", account, objectId).sorted(byKeyPath: "creationDateTime", ascending: false) + do { + let realm = try Realm() + let results = realm.objects(tableComments.self).filter("account == %@ AND objectId == %@", account, objectId).sorted(byKeyPath: "creationDateTime", ascending: false) + return Array(results.map(tableComments.init)) + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") + } - return Array(results.map(tableComments.init)) + return [] } } From ff30f2f5c4c4e41c6b20b384122c6623c2c3d9ed Mon Sep 17 00:00:00 2001 From: Marino Faggiana Date: Wed, 5 Jul 2023 14:42:51 +0200 Subject: [PATCH 07/26] lint Signed-off-by: Marino Faggiana --- iOSClient/Data/NCManageDatabase+Avatar.swift | 48 ++++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/iOSClient/Data/NCManageDatabase+Avatar.swift b/iOSClient/Data/NCManageDatabase+Avatar.swift index 69bc860cb0..c40fdf044e 100644 --- a/iOSClient/Data/NCManageDatabase+Avatar.swift +++ b/iOSClient/Data/NCManageDatabase+Avatar.swift @@ -41,19 +41,14 @@ extension NCManageDatabase { func addAvatar(fileName: String, etag: String) { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { - - // Add new let addObject = tableAvatar() - addObject.date = NSDate() addObject.etag = etag addObject.fileName = fileName addObject.loaded = true - realm.add(addObject, update: .all) } } catch let error { @@ -63,22 +58,22 @@ extension NCManageDatabase { func getTableAvatar(fileName: String) -> tableAvatar? { - let realm = try! Realm() - - guard let result = realm.objects(tableAvatar.self).filter("fileName == %@", fileName).first else { - return nil + do { + let realm = try Realm() + guard let result = realm.objects(tableAvatar.self).filter("fileName == %@", fileName).first else { return nil } + return tableAvatar.init(value: result) + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } - return tableAvatar.init(value: result) + return nil } func clearAllAvatarLoaded() { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { - let results = realm.objects(tableAvatar.self) for result in results { result.loaded = false @@ -93,11 +88,11 @@ extension NCManageDatabase { @discardableResult func setAvatarLoaded(fileName: String) -> UIImage? { - let realm = try! Realm() let fileNameLocalPath = String(CCUtility.getDirectoryUserData()) + "/" + fileName var image: UIImage? do { + let realm = try Realm() try realm.write { if let result = realm.objects(tableAvatar.self).filter("fileName == %@", fileName).first { if let imageAvatar = UIImage(contentsOfFile: fileNameLocalPath) { @@ -117,18 +112,23 @@ extension NCManageDatabase { func getImageAvatarLoaded(fileName: String) -> UIImage? { - let realm = try! Realm() let fileNameLocalPath = String(CCUtility.getDirectoryUserData()) + "/" + fileName - let result = realm.objects(tableAvatar.self).filter("fileName == %@", fileName).first - if result == nil { - NCUtilityFileSystem.shared.deleteFile(filePath: fileNameLocalPath) - return nil - } else if result?.loaded == false { - return nil + do { + let realm = try Realm() + let result = realm.objects(tableAvatar.self).filter("fileName == %@", fileName).first + if result == nil { + NCUtilityFileSystem.shared.deleteFile(filePath: fileNameLocalPath) + return nil + } else if result?.loaded == false { + return nil + } + return UIImage(contentsOfFile: fileNameLocalPath) + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } - return UIImage(contentsOfFile: fileNameLocalPath) + NCUtilityFileSystem.shared.deleteFile(filePath: fileNameLocalPath) + return nil } - } From f0204a6b7e7b1186d00e849510c9771d5e7c410f Mon Sep 17 00:00:00 2001 From: Marino Faggiana Date: Wed, 5 Jul 2023 14:48:40 +0200 Subject: [PATCH 08/26] lint Signed-off-by: Marino Faggiana --- .../Data/NCManageDatabase+Capabilities.swift | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/iOSClient/Data/NCManageDatabase+Capabilities.swift b/iOSClient/Data/NCManageDatabase+Capabilities.swift index c502abdfb8..4306606265 100644 --- a/iOSClient/Data/NCManageDatabase+Capabilities.swift +++ b/iOSClient/Data/NCManageDatabase+Capabilities.swift @@ -40,15 +40,12 @@ extension NCManageDatabase { func addCapabilitiesJSon(_ data: Data, account: String) { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { let addObject = tableCapabilities() - addObject.account = account addObject.jsondata = data - realm.add(addObject, update: .all) } } catch let error { @@ -58,28 +55,35 @@ extension NCManageDatabase { func getCapabilities(account: String) -> Data? { - let realm = try! Realm() - - guard let result = realm.objects(tableCapabilities.self).filter("account == %@", account).first else { - return nil + do { + let realm = try Realm() + guard let result = realm.objects(tableCapabilities.self).filter("account == %@", account).first else { return nil } + return result.jsondata + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } - return result.jsondata + return nil } func setCapabilities(account: String, data: Data? = nil) { - let realm = try! Realm() let json: JSON? if let data = data { json = JSON(data) } else { - guard let result = realm.objects(tableCapabilities.self).filter("account == %@", account).first, - let data = result.jsondata else { + do { + let realm = try Realm() + guard let result = realm.objects(tableCapabilities.self).filter("account == %@", account).first, + let data = result.jsondata else { + return + } + json = JSON(data) + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") return } - json = JSON(data) } guard let json = json else { return } @@ -106,7 +110,6 @@ extension NCManageDatabase { NCGlobal.shared.capabilityE2EEEnabled = json["ocs", "data", "capabilities", "end-to-end-encryption", "enabled"].boolValue NCGlobal.shared.capabilityE2EEApiVersion = json["ocs", "data", "capabilities", "end-to-end-encryption", "api-version"].stringValue - NCGlobal.shared.capabilityRichdocumentsMimetypes.removeAll() let mimetypes = json["ocs", "data", "capabilities", "richdocuments", "mimetypes"].arrayValue for mimetype in mimetypes { From 4968a28a176dc4f0bb498ca44e361cc0118c8e05 Mon Sep 17 00:00:00 2001 From: Marino Faggiana Date: Wed, 5 Jul 2023 14:51:25 +0200 Subject: [PATCH 09/26] lint Signed-off-by: Marino Faggiana --- .../NCManageDatabase+DashboardWidget.swift | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/iOSClient/Data/NCManageDatabase+DashboardWidget.swift b/iOSClient/Data/NCManageDatabase+DashboardWidget.swift index e9bbe7ce47..e1f67ef722 100644 --- a/iOSClient/Data/NCManageDatabase+DashboardWidget.swift +++ b/iOSClient/Data/NCManageDatabase+DashboardWidget.swift @@ -51,42 +51,47 @@ class tableDashboardWidgetButton: Object { extension NCManageDatabase { func getDashboardWidget(account: String, id: String) -> (tableDashboardWidget?, [tableDashboardWidgetButton]?) { - - let realm = try! Realm() - guard let resultDashboard = realm.objects(tableDashboardWidget.self).filter("account == %@ AND id == %@", account, id).first else { - return (nil, nil) + + do { + let realm = try Realm() + guard let resultDashboard = realm.objects(tableDashboardWidget.self).filter("account == %@ AND id == %@", account, id).first else { return (nil, nil) } + let resultsButton = realm.objects(tableDashboardWidgetButton.self).filter("account == %@ AND id == %@", account, id).sorted(byKeyPath: "type", ascending: true) + return (tableDashboardWidget.init(value: resultDashboard), Array(resultsButton.map { tableDashboardWidgetButton.init(value: $0) })) + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } - let resultsButton = realm.objects(tableDashboardWidgetButton.self).filter("account == %@ AND id == %@", account, id).sorted(byKeyPath: "type", ascending: true) - - return (tableDashboardWidget.init(value: resultDashboard), Array(resultsButton.map { tableDashboardWidgetButton.init(value: $0) })) + + return (nil, nil) } func getDashboardWidgetApplications(account: String) -> [tableDashboardWidget] { - let realm = try! Realm() - let sortProperties = [SortDescriptor(keyPath: "order", ascending: true), SortDescriptor(keyPath: "title", ascending: true)] - let results = realm.objects(tableDashboardWidget.self).filter("account == %@", account).sorted(by: sortProperties) + do { + let realm = try Realm() + let sortProperties = [SortDescriptor(keyPath: "order", ascending: true), SortDescriptor(keyPath: "title", ascending: true)] + let results = realm.objects(tableDashboardWidget.self).filter("account == %@", account).sorted(by: sortProperties) + return Array(results.map { tableDashboardWidget.init(value: $0) }) + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") + } - return Array(results.map { tableDashboardWidget.init(value: $0) }) + return [] } - + func addDashboardWidget(account: String, dashboardWidgets: [NCCDashboardWidget]) { - - let realm = try! Realm() do { + let realm = try Realm() try realm.write { - + let resultDashboard = realm.objects(tableDashboardWidget.self).filter("account == %@", account) realm.delete(resultDashboard) - + let resultDashboardButton = realm.objects(tableDashboardWidgetButton.self).filter("account == %@", account) realm.delete(resultDashboardButton) - + for widget in dashboardWidgets { - let addObject = tableDashboardWidget() - addObject.index = account + " " + widget.id addObject.account = account addObject.id = widget.id @@ -96,23 +101,18 @@ extension NCManageDatabase { addObject.iconUrl = widget.iconUrl addObject.widgetUrl = widget.widgetUrl addObject.itemIconsRound = widget.itemIconsRound - if let buttons = widget.button { for button in buttons { - let addObject = tableDashboardWidgetButton() - addObject.account = account addObject.id = widget.id addObject.type = button.type addObject.text = button.text addObject.link = button.link addObject.index = account + " " + widget.id + " " + button.type - realm.add(addObject, update: .all) } } - realm.add(addObject, update: .all) } } From e2d242a6492d08f90d5eb60f31aa93a7fbbb4384 Mon Sep 17 00:00:00 2001 From: Marino Faggiana Date: Wed, 5 Jul 2023 14:55:57 +0200 Subject: [PATCH 10/26] lint Signed-off-by: Marino Faggiana --- .../Data/NCManageDatabase+Directory.swift | 78 ++++++++----------- 1 file changed, 32 insertions(+), 46 deletions(-) diff --git a/iOSClient/Data/NCManageDatabase+Directory.swift b/iOSClient/Data/NCManageDatabase+Directory.swift index 84d43d924b..60149bbb72 100644 --- a/iOSClient/Data/NCManageDatabase+Directory.swift +++ b/iOSClient/Data/NCManageDatabase+Directory.swift @@ -48,19 +48,16 @@ extension NCManageDatabase { func addDirectory(encrypted: Bool, favorite: Bool, ocId: String, fileId: String, etag: String? = nil, permissions: String? = nil, serverUrl: String, account: String) { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { var addObject = tableDirectory() let result = realm.objects(tableDirectory.self).filter("ocId == %@", ocId).first - if result != nil { addObject = result! } else { addObject.ocId = ocId } - addObject.account = account addObject.e2eEncrypted = encrypted addObject.favorite = favorite @@ -72,7 +69,6 @@ extension NCManageDatabase { addObject.permissions = permissions } addObject.serverUrl = serverUrl - realm.add(addObject, update: .all) } } catch let error { @@ -82,19 +78,13 @@ extension NCManageDatabase { func deleteDirectoryAndSubDirectory(serverUrl: String, account: String) { - let realm = try! Realm() - - let results = realm.objects(tableDirectory.self).filter("account == %@ AND serverUrl BEGINSWITH %@", account, serverUrl) - - // Delete table Metadata & LocalFile - for result in results { - - self.deleteMetadata(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", result.account, result.serverUrl)) - self.deleteLocalFile(predicate: NSPredicate(format: "ocId == %@", result.ocId)) - } - - // Delete table Dirrectory do { + let realm = try Realm() + let results = realm.objects(tableDirectory.self).filter("account == %@ AND serverUrl BEGINSWITH %@", account, serverUrl) + for result in results { + self.deleteMetadata(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", result.account, result.serverUrl)) + self.deleteLocalFile(predicate: NSPredicate(format: "ocId == %@", result.ocId)) + } try realm.write { realm.delete(results) } @@ -105,19 +95,12 @@ extension NCManageDatabase { func setDirectory(serverUrl: String, serverUrlTo: String? = nil, etag: String? = nil, ocId: String? = nil, fileId: String? = nil, encrypted: Bool, richWorkspace: String? = nil, account: String) { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { - - guard let result = realm.objects(tableDirectory.self).filter("account == %@ AND serverUrl == %@", account, serverUrl).first else { - return - } - + guard let result = realm.objects(tableDirectory.self).filter("account == %@ AND serverUrl == %@", account, serverUrl).first else { return } let directory = tableDirectory.init(value: result) - realm.delete(result) - directory.e2eEncrypted = encrypted if let etag = etag { directory.etag = etag @@ -134,7 +117,6 @@ extension NCManageDatabase { if let richWorkspace = richWorkspace { directory.richWorkspace = richWorkspace } - realm.add(directory, update: .all) } } catch let error { @@ -144,33 +126,38 @@ extension NCManageDatabase { func getTableDirectory(predicate: NSPredicate) -> tableDirectory? { - let realm = try! Realm() - - guard let result = realm.objects(tableDirectory.self).filter(predicate).first else { - return nil + do { + let realm = try Realm() + guard let result = realm.objects(tableDirectory.self).filter(predicate).first else { return nil } + return tableDirectory.init(value: result) + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } - return tableDirectory.init(value: result) + return nil } func getTablesDirectory(predicate: NSPredicate, sorted: String, ascending: Bool) -> [tableDirectory]? { - let realm = try! Realm() - - let results = realm.objects(tableDirectory.self).filter(predicate).sorted(byKeyPath: sorted, ascending: ascending) - - if results.count > 0 { - return Array(results.map { tableDirectory.init(value: $0) }) - } else { - return nil + do { + let realm = try Realm() + let results = realm.objects(tableDirectory.self).filter(predicate).sorted(byKeyPath: sorted, ascending: ascending) + if results.isEmpty { + return nil + } else { + return Array(results.map { tableDirectory.init(value: $0) }) + } + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } + + return nil } func renameDirectory(ocId: String, serverUrl: String) { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { let result = realm.objects(tableDirectory.self).filter("ocId == %@", ocId).first result?.serverUrl = serverUrl @@ -182,9 +169,8 @@ extension NCManageDatabase { func setDirectory(serverUrl: String, offline: Bool, account: String) { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { let result = realm.objects(tableDirectory.self).filter("account == %@ AND serverUrl == %@", account, serverUrl).first result?.offline = offline @@ -197,10 +183,10 @@ extension NCManageDatabase { @discardableResult func setDirectory(serverUrl: String, richWorkspace: String?, account: String) -> tableDirectory? { - let realm = try! Realm() var result: tableDirectory? do { + let realm = try Realm() try realm.write { result = realm.objects(tableDirectory.self).filter("account == %@ AND serverUrl == %@", account, serverUrl).first result?.richWorkspace = richWorkspace @@ -219,10 +205,10 @@ extension NCManageDatabase { @discardableResult func setDirectory(serverUrl: String, colorFolder: String?, account: String) -> tableDirectory? { - let realm = try! Realm() var result: tableDirectory? do { + let realm = try Realm() try realm.write { result = realm.objects(tableDirectory.self).filter("account == %@ AND serverUrl == %@", account, serverUrl).first result?.colorFolder = colorFolder From a5bed6e5900c0b08246b204011de0cc0354d51b4 Mon Sep 17 00:00:00 2001 From: Marino Faggiana Date: Wed, 5 Jul 2023 15:01:08 +0200 Subject: [PATCH 11/26] lint Signed-off-by: Marino Faggiana --- iOSClient/Data/NCManageDatabase+E2EE.swift | 103 +++++++++++---------- 1 file changed, 52 insertions(+), 51 deletions(-) diff --git a/iOSClient/Data/NCManageDatabase+E2EE.swift b/iOSClient/Data/NCManageDatabase+E2EE.swift index e8224affc3..d3a937bdae 100644 --- a/iOSClient/Data/NCManageDatabase+E2EE.swift +++ b/iOSClient/Data/NCManageDatabase+E2EE.swift @@ -76,9 +76,8 @@ extension NCManageDatabase { @objc func addE2eEncryption(_ e2e: tableE2eEncryption) { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { realm.add(e2e, update: .all) } @@ -89,11 +88,9 @@ extension NCManageDatabase { @objc func deleteE2eEncryption(predicate: NSPredicate) { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { - let results = realm.objects(tableE2eEncryption.self).filter(predicate) realm.delete(results) } @@ -104,32 +101,35 @@ extension NCManageDatabase { @objc func getE2eEncryption(predicate: NSPredicate) -> tableE2eEncryption? { - let realm = try! Realm() - - guard let result = realm.objects(tableE2eEncryption.self).filter(predicate).sorted(byKeyPath: "metadataKeyIndex", ascending: false).first else { - return nil + do { + let realm = try Realm() + guard let result = realm.objects(tableE2eEncryption.self).filter(predicate).sorted(byKeyPath: "metadataKeyIndex", ascending: false).first else { return nil } + return tableE2eEncryption.init(value: result) + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } - return tableE2eEncryption.init(value: result) + return nil } @objc func getE2eEncryptions(predicate: NSPredicate) -> [tableE2eEncryption]? { - guard self.getActiveAccount() != nil else { - return nil - } - - let realm = try! Realm() - - let results: Results - - results = realm.objects(tableE2eEncryption.self).filter(predicate) + guard self.getActiveAccount() != nil else { return nil } - if results.count > 0 { - return Array(results.map { tableE2eEncryption.init(value: $0) }) - } else { - return nil + do { + let realm = try Realm() + let results: Results + results = realm.objects(tableE2eEncryption.self).filter(predicate) + if results.isEmpty { + return nil + } else { + return Array(results.map { tableE2eEncryption.init(value: $0) }) + } + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } + + return nil } @objc func renameFileE2eEncryption(serverUrl: String, fileNameIdentifier: String, newFileName: String, newFileNamePath: String) { @@ -168,41 +168,44 @@ extension NCManageDatabase { @objc func getE2ETokenLock(account: String, serverUrl: String) -> tableE2eEncryptionLock? { - let realm = try! Realm() - - guard let result = realm.objects(tableE2eEncryptionLock.self).filter("account == %@ AND serverUrl == %@", account, serverUrl).first else { - return nil + do { + let realm = try Realm() + guard let result = realm.objects(tableE2eEncryptionLock.self).filter("account == %@ AND serverUrl == %@", account, serverUrl).first else { return nil } + return tableE2eEncryptionLock.init(value: result) + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } - return tableE2eEncryptionLock.init(value: result) + return nil } @objc func getE2EAllTokenLock(account: String) -> [tableE2eEncryptionLock] { - let realm = try! Realm() - - let results = realm.objects(tableE2eEncryptionLock.self).filter("account == %@", account) - - if results.count > 0 { - return Array(results.map { tableE2eEncryptionLock.init(value: $0) }) - } else { - return [] + do { + let realm = try Realm() + let results = realm.objects(tableE2eEncryptionLock.self).filter("account == %@", account) + if results.isEmpty { + return [] + } else { + return Array(results.map { tableE2eEncryptionLock.init(value: $0) }) + } + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } + + return [] } @objc func setE2ETokenLock(account: String, serverUrl: String, fileId: String, e2eToken: String) { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { let addObject = tableE2eEncryptionLock() - addObject.account = account addObject.fileId = fileId addObject.serverUrl = serverUrl addObject.e2eToken = e2eToken - realm.add(addObject, update: .all) } } catch let error { @@ -212,9 +215,8 @@ extension NCManageDatabase { @objc func deleteE2ETokenLock(account: String, serverUrl: String) { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { if let result = realm.objects(tableE2eEncryptionLock.self).filter("account == %@ AND serverUrl == %@", account, serverUrl).first { realm.delete(result) @@ -230,28 +232,27 @@ extension NCManageDatabase { func getE2eMetadata(account: String, serverUrl: String) -> tableE2eMetadata? { - let realm = try! Realm() - - guard let result = realm.objects(tableE2eMetadata.self).filter("account == %@ AND serverUrl == %@", account, serverUrl).first else { - return nil + do { + let realm = try Realm() + guard let result = realm.objects(tableE2eMetadata.self).filter("account == %@ AND serverUrl == %@", account, serverUrl).first else { return nil } + return tableE2eMetadata.init(value: result) + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } - return tableE2eMetadata.init(value: result) + return nil } func setE2eMetadata(account: String, serverUrl: String, metadataKey: String, version: Double) { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { let addObject = tableE2eMetadata() - addObject.account = account addObject.metadataKey = metadataKey addObject.serverUrl = serverUrl addObject.version = version - realm.add(addObject, update: .all) } } catch let error { From 1826096ca1489dd051137951366b80cb843d342e Mon Sep 17 00:00:00 2001 From: Marino Faggiana Date: Wed, 5 Jul 2023 15:03:48 +0200 Subject: [PATCH 12/26] lint Signed-off-by: Marino Faggiana --- .../Data/NCManageDatabase+Groupfolders.swift | 6 +--- .../Data/NCManageDatabase+LayoutForView.swift | 29 ++++++++++--------- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/iOSClient/Data/NCManageDatabase+Groupfolders.swift b/iOSClient/Data/NCManageDatabase+Groupfolders.swift index ae53095bda..b14410b3eb 100644 --- a/iOSClient/Data/NCManageDatabase+Groupfolders.swift +++ b/iOSClient/Data/NCManageDatabase+Groupfolders.swift @@ -57,9 +57,8 @@ extension NCManageDatabase { func addGroupfolders(account: String, groupfolders: [NKGroupfolders]) { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { let tableGroupfolders = realm.objects(TableGroupfolders.self).filter("account == %@", account) @@ -69,9 +68,7 @@ extension NCManageDatabase { realm.delete(tableGroupfoldersGroups) for groupfolder in groupfolders { - let obj = TableGroupfolders() - obj.account = account obj.acl = groupfolder.acl for group in groupfolder.groups ?? [:] { @@ -83,7 +80,6 @@ extension NCManageDatabase { obj.mountPoint = groupfolder.mountPoint obj.quota = groupfolder.quota obj.size = groupfolder.size - realm.add(obj) } } diff --git a/iOSClient/Data/NCManageDatabase+LayoutForView.swift b/iOSClient/Data/NCManageDatabase+LayoutForView.swift index 3e0f08b58f..860cd54490 100644 --- a/iOSClient/Data/NCManageDatabase+LayoutForView.swift +++ b/iOSClient/Data/NCManageDatabase+LayoutForView.swift @@ -44,15 +44,13 @@ extension NCManageDatabase { @discardableResult func setLayoutForView(account: String, key: String, serverUrl: String, layout: String? = nil, sort: String? = nil, ascending: Bool? = nil, groupBy: String? = nil, directoryOnTop: Bool? = nil, titleButtonHeader: String? = nil, itemForLine: Int? = nil) -> NCDBLayoutForView? { - let realm = try! Realm() - var keyStore = key if !serverUrl.isEmpty { keyStore = serverUrl} let index = account + " " + keyStore - var addObject = NCDBLayoutForView() do { + let realm = try Realm() try realm.write { if let result = realm.objects(NCDBLayoutForView.self).filter("index == %@", index).first { addObject = result @@ -91,16 +89,16 @@ extension NCManageDatabase { NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } - return NCDBLayoutForView.init(value: addObject) + return NCDBLayoutForView(value: addObject) } @discardableResult func setLayoutForView(layoutForView: NCDBLayoutForView) -> NCDBLayoutForView? { - let realm = try! Realm() - let result = NCDBLayoutForView.init(value: layoutForView) + let result = NCDBLayoutForView(value: layoutForView) do { + let realm = try Realm() try realm.write { realm.add(result, update: .all) } @@ -108,21 +106,26 @@ extension NCManageDatabase { NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") return nil } - return NCDBLayoutForView.init(value: result) + return NCDBLayoutForView(value: result) } func getLayoutForView(account: String, key: String, serverUrl: String) -> NCDBLayoutForView? { - let realm = try! Realm() - var keyStore = key if !serverUrl.isEmpty { keyStore = serverUrl} let index = account + " " + keyStore - if let result = realm.objects(NCDBLayoutForView.self).filter("index == %@", index).first { - return NCDBLayoutForView.init(value: result) - } else { - return setLayoutForView(account: account, key: key, serverUrl: serverUrl) + do { + let realm = try Realm() + if let result = realm.objects(NCDBLayoutForView.self).filter("index == %@", index).first { + return NCDBLayoutForView(value: result) + } else { + return setLayoutForView(account: account, key: key, serverUrl: serverUrl) + } + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } + + return setLayoutForView(account: account, key: key, serverUrl: serverUrl) } } From fb8340cc1ed932c15a9d7ab7c13bb4bc5c27bbf8 Mon Sep 17 00:00:00 2001 From: Marino Faggiana Date: Wed, 5 Jul 2023 15:05:43 +0200 Subject: [PATCH 13/26] lint Signed-off-by: Marino Faggiana --- iOSClient/Data/NCManageDatabase+Video.swift | 29 +++++++++------------ 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/iOSClient/Data/NCManageDatabase+Video.swift b/iOSClient/Data/NCManageDatabase+Video.swift index 4492d6cb34..90f463c0e1 100644 --- a/iOSClient/Data/NCManageDatabase+Video.swift +++ b/iOSClient/Data/NCManageDatabase+Video.swift @@ -49,12 +49,11 @@ extension NCManageDatabase { func addVideo(metadata: tableMetadata, position: Float? = nil, width: Int? = nil, height: Int? = nil, length: Int? = nil, currentAudioTrackIndex: Int? = nil, currentVideoSubTitleIndex: Int? = nil) { if metadata.livePhoto { return } - let realm = try! Realm() do { + let realm = try Realm() try realm.write { if let result = realm.objects(tableVideo.self).filter("account == %@ AND ocId == %@", metadata.account, metadata.ocId).first { - if let position = position { result.position = position } @@ -73,16 +72,11 @@ extension NCManageDatabase { if let currentVideoSubTitleIndex = currentVideoSubTitleIndex { result.currentVideoSubTitleIndex = currentVideoSubTitleIndex } - realm.add(result, update: .all) - } else { - let result = tableVideo() - result.account = metadata.account result.ocId = metadata.ocId - if let position = position { result.position = position } @@ -101,7 +95,6 @@ extension NCManageDatabase { if let currentVideoSubTitleIndex = currentVideoSubTitleIndex { result.currentVideoSubTitleIndex = currentVideoSubTitleIndex } - realm.add(result, update: .all) } } @@ -112,9 +105,8 @@ extension NCManageDatabase { func addVideoCodec(metadata: tableMetadata, codecNameVideo: String?, codecNameAudio: String?, codecAudioChannelLayout: String?, codecAudioLanguage: String?, codecMaxCompatibility: Bool, codecQuality: String?) { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { if let result = realm.objects(tableVideo.self).filter("account == %@ AND ocId == %@", metadata.account, metadata.ocId).first { if let codecNameVideo = codecNameVideo { result.codecNameVideo = codecNameVideo } @@ -143,21 +135,24 @@ extension NCManageDatabase { } func getVideo(metadata: tableMetadata?) -> tableVideo? { + guard let metadata = metadata else { return nil } - let realm = try! Realm() - guard let result = realm.objects(tableVideo.self).filter("account == %@ AND ocId == %@", metadata.account, metadata.ocId).first else { - return nil + do { + let realm = try Realm() + guard let result = realm.objects(tableVideo.self).filter("account == %@ AND ocId == %@", metadata.account, metadata.ocId).first else { return nil } + return tableVideo.init(value: result) + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } - return tableVideo.init(value: result) + return nil } - - func deleteVideo(metadata: tableMetadata) { - let realm = try! Realm() + func deleteVideo(metadata: tableMetadata) { do { + let realm = try Realm() try realm.write { let result = realm.objects(tableVideo.self).filter("account == %@ AND ocId == %@", metadata.account, metadata.ocId) realm.delete(result) From 70a252e806925040a626d5f5bc07cddb130fb8c0 Mon Sep 17 00:00:00 2001 From: Marino Faggiana Date: Wed, 5 Jul 2023 15:10:54 +0200 Subject: [PATCH 14/26] lint Signed-off-by: Marino Faggiana --- iOSClient/Data/NCManageDatabase+Share.swift | 110 ++++++++++---------- 1 file changed, 55 insertions(+), 55 deletions(-) diff --git a/iOSClient/Data/NCManageDatabase+Share.swift b/iOSClient/Data/NCManageDatabase+Share.swift index 3558887258..1da04923cd 100644 --- a/iOSClient/Data/NCManageDatabase+Share.swift +++ b/iOSClient/Data/NCManageDatabase+Share.swift @@ -77,26 +77,18 @@ extension NCManageDatabase { func addShare(account: String, home: String, shares: [NKShare]) { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { - for share in shares { - let serverUrlPath = home + share.path - guard let serverUrl = NCUtilityFileSystem.shared.deleteLastPath(serverUrlPath: serverUrlPath, home: home) else { - continue - } - + guard let serverUrl = NCUtilityFileSystem.shared.deleteLastPath(serverUrlPath: serverUrlPath, home: home) else { continue } let object = tableShare() - object.account = account if let fileName = share.path.components(separatedBy: "/").last { object.fileName = fileName } object.serverUrl = serverUrl - object.canEdit = share.canEdit object.canDelete = share.canDelete object.date = share.date @@ -133,7 +125,6 @@ extension NCManageDatabase { object.userIcon = share.userIcon object.userMessage = share.userMessage object.userStatus = share.userStatus - realm.add(object, update: .all) } } @@ -144,39 +135,49 @@ extension NCManageDatabase { func getTableShares(account: String) -> [tableShare] { - let realm = try! Realm() - - let sortProperties = [SortDescriptor(keyPath: "shareType", ascending: false), SortDescriptor(keyPath: "idShare", ascending: false)] - let results = realm.objects(tableShare.self).filter("account == %@", account).sorted(by: sortProperties) + do { + let realm = try Realm() + let sortProperties = [SortDescriptor(keyPath: "shareType", ascending: false), SortDescriptor(keyPath: "idShare", ascending: false)] + let results = realm.objects(tableShare.self).filter("account == %@", account).sorted(by: sortProperties) + return Array(results.map { tableShare.init(value: $0) }) + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") + } - return Array(results.map { tableShare.init(value: $0) }) + return [] } func getTableShares(metadata: tableMetadata) -> (firstShareLink: tableShare?, share: [tableShare]?) { - let realm = try! Realm() - - let sortProperties = [SortDescriptor(keyPath: "shareType", ascending: false), SortDescriptor(keyPath: "idShare", ascending: false)] - let firstShareLink = realm.objects(tableShare.self).filter("account == %@ AND serverUrl == %@ AND fileName == %@ AND shareType == 3", metadata.account, metadata.serverUrl, metadata.fileName).first - - if let firstShareLink = firstShareLink { - let results = realm.objects(tableShare.self).filter("account == %@ AND serverUrl == %@ AND fileName == %@ AND idShare != %d", metadata.account, metadata.serverUrl, metadata.fileName, firstShareLink.idShare).sorted(by: sortProperties) - return(firstShareLink: tableShare.init(value: firstShareLink), share: Array(results.map { tableShare.init(value: $0) })) - } else { - let results = realm.objects(tableShare.self).filter("account == %@ AND serverUrl == %@ AND fileName == %@", metadata.account, metadata.serverUrl, metadata.fileName).sorted(by: sortProperties) - return(firstShareLink: firstShareLink, share: Array(results.map { tableShare.init(value: $0) })) + do { + let realm = try Realm() + let sortProperties = [SortDescriptor(keyPath: "shareType", ascending: false), SortDescriptor(keyPath: "idShare", ascending: false)] + let firstShareLink = realm.objects(tableShare.self).filter("account == %@ AND serverUrl == %@ AND fileName == %@ AND shareType == 3", metadata.account, metadata.serverUrl, metadata.fileName).first + if let firstShareLink = firstShareLink { + let results = realm.objects(tableShare.self).filter("account == %@ AND serverUrl == %@ AND fileName == %@ AND idShare != %d", metadata.account, metadata.serverUrl, metadata.fileName, firstShareLink.idShare).sorted(by: sortProperties) + return(firstShareLink: tableShare.init(value: firstShareLink), share: Array(results.map { tableShare.init(value: $0) })) + } else { + let results = realm.objects(tableShare.self).filter("account == %@ AND serverUrl == %@ AND fileName == %@", metadata.account, metadata.serverUrl, metadata.fileName).sorted(by: sortProperties) + return(firstShareLink: firstShareLink, share: Array(results.map { tableShare.init(value: $0) })) + } + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } + + return (nil, nil) } func getTableShare(account: String, idShare: Int) -> tableShare? { - let realm = try! Realm() - - guard let result = realm.objects(tableShare.self).filter("account = %@ AND idShare = %d", account, idShare).first else { - return nil + do { + let realm = try Realm() + guard let result = realm.objects(tableShare.self).filter("account = %@ AND idShare = %d", account, idShare).first else { return nil } + return tableShare.init(value: result) + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } - return tableShare.init(value: result) + return nil } func getTableShares(account: String, serverUrl: String) -> [tableShare] { @@ -191,42 +192,41 @@ extension NCManageDatabase { func getTableShares(account: String, serverUrl: String, fileName: String) -> [tableShare] { - let realm = try! Realm() - - let sortProperties = [SortDescriptor(keyPath: "shareType", ascending: false), SortDescriptor(keyPath: "idShare", ascending: false)] - let results = realm.objects(tableShare.self).filter("account == %@ AND serverUrl == %@ AND fileName == %@", account, serverUrl, fileName).sorted(by: sortProperties) + do { + let realm = try Realm() + let sortProperties = [SortDescriptor(keyPath: "shareType", ascending: false), SortDescriptor(keyPath: "idShare", ascending: false)] + let results = realm.objects(tableShare.self).filter("account == %@ AND serverUrl == %@ AND fileName == %@", account, serverUrl, fileName).sorted(by: sortProperties) + return Array(results.map { tableShare.init(value: $0) }) + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") + } - return Array(results.map { tableShare.init(value: $0) }) + return [] } func deleteTableShare(account: String, idShare: Int) { - let realm = try! Realm() - - realm.beginWrite() - - let result = realm.objects(tableShare.self).filter("account == %@ AND idShare == %d", account, idShare) - realm.delete(result) - do { - try realm.commitWrite() - } catch let error { + let realm = try Realm() + try realm.write { + let result = realm.objects(tableShare.self).filter("account == %@ AND idShare == %d", account, idShare) + realm.delete(result) + } + } catch let error as NSError { NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } } func deleteTableShare(account: String) { - let realm = try! Realm() - - realm.beginWrite() - - let result = realm.objects(tableShare.self).filter("account == %@", account) - realm.delete(result) - do { - try realm.commitWrite() - } catch let error { + let realm = try Realm() + + try realm.write { + let result = realm.objects(tableShare.self).filter("account == %@", account) + realm.delete(result) + } + } catch let error as NSError { NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } } From 522d411653181889de2c66726ef64995b9151b7a Mon Sep 17 00:00:00 2001 From: Marino Faggiana Date: Wed, 5 Jul 2023 15:31:20 +0200 Subject: [PATCH 15/26] lint Signed-off-by: Marino Faggiana --- .../Data/NCManageDatabase+Metadata.swift | 368 ++++++++++-------- 1 file changed, 197 insertions(+), 171 deletions(-) diff --git a/iOSClient/Data/NCManageDatabase+Metadata.swift b/iOSClient/Data/NCManageDatabase+Metadata.swift index 7c48c8665c..8e79b88650 100644 --- a/iOSClient/Data/NCManageDatabase+Metadata.swift +++ b/iOSClient/Data/NCManageDatabase+Metadata.swift @@ -125,7 +125,7 @@ extension tableMetadata { } return true } - + var isPrintable: Bool { if isDocumentViewableOnly { return false @@ -206,10 +206,8 @@ extension tableMetadata { if isDocumentViewableOnly { return false } - let editors = NCUtility.shared.isDirectEditing(account: account, contentType: contentType) let isRichDocument = NCUtility.shared.isRichDocument(self) - return classFile == NKCommon.TypeClassFile.document.rawValue && editors.contains(NCGlobal.shared.editorText) && ((editors.contains(NCGlobal.shared.editorOnlyoffice) || isRichDocument)) } @@ -234,7 +232,7 @@ extension tableMetadata { return !lock || (lockOwner == user && lockOwnerType == 0) } - /// Return if is sharable (temp) + // Return if is sharable (temp) // TODO: modifify for E2EE 2.0 func isSharable() -> Bool { guard NCGlobal.shared.capabilityFileSharingApiEnabled else { return false } @@ -309,7 +307,7 @@ extension NCManageDatabase { } metadata.size = file.size metadata.classFile = file.classFile - //FIXME: iOS 12.0,* don't detect UTI text/markdown, text/x-markdown + // iOS 12.0,* don't detect UTI text/markdown, text/x-markdown if (metadata.contentType == "text/markdown" || metadata.contentType == "text/x-markdown") && metadata.classFile == NKCommon.TypeClassFile.unknow.rawValue { metadata.classFile = NKCommon.TypeClassFile.document.rawValue } @@ -340,7 +338,7 @@ extension NCManageDatabase { var counter: Int = 0 var isDirectoryE2EE: Bool = false - let listServerUrl = ThreadSafeDictionary() + let listServerUrl = ThreadSafeDictionary() var metadataFolder = tableMetadata() var metadataFolders: [tableMetadata] = [] @@ -378,10 +376,10 @@ extension NCManageDatabase { for index in metadatas.indices { let metadata = metadatas[index] if index < metadatas.count - 1, - metadata.fileNoExtension == metadatas[index+1].fileNoExtension, - ((metadata.classFile == NKCommon.TypeClassFile.image.rawValue && metadatas[index+1].classFile == NKCommon.TypeClassFile.video.rawValue) || (metadata.classFile == NKCommon.TypeClassFile.video.rawValue && metadatas[index+1].classFile == NKCommon.TypeClassFile.image.rawValue)){ + metadata.fileNoExtension == metadatas[index + 1].fileNoExtension, + ((metadata.classFile == NKCommon.TypeClassFile.image.rawValue && metadatas[index + 1].classFile == NKCommon.TypeClassFile.video.rawValue) || (metadata.classFile == NKCommon.TypeClassFile.video.rawValue && metadatas[index + 1].classFile == NKCommon.TypeClassFile.image.rawValue)) { metadata.livePhoto = true - metadatas[index+1].livePhoto = true + metadatas[index + 1].livePhoto = true } metadataOutput.append(metadata) } @@ -405,7 +403,7 @@ extension NCManageDatabase { metadata.contentType = mimeType metadata.iconName = iconName metadata.classFile = classFile - //FIXME: iOS 12.0,* don't detect UTI text/markdown, text/x-markdown + // iOS 12.0,* don't detect UTI text/markdown, text/x-markdown if classFile == NKCommon.TypeClassFile.unknow.rawValue && (mimeType == "text/x-markdown" || mimeType == "text/markdown") { metadata.iconName = NKCommon.TypeIconFile.txt.rawValue metadata.classFile = NKCommon.TypeClassFile.document.rawValue @@ -436,7 +434,7 @@ extension NCManageDatabase { metadata.urlBase = urlBase metadata.user = user metadata.userId = userId - + if !metadata.urlBase.isEmpty, metadata.serverUrl.hasPrefix(metadata.urlBase) { metadata.path = String(metadata.serverUrl.dropFirst(metadata.urlBase.count)) + "/" } @@ -447,10 +445,10 @@ extension NCManageDatabase { @discardableResult func addMetadata(_ metadata: tableMetadata) -> tableMetadata? { - let realm = try! Realm() let result = tableMetadata.init(value: metadata) do { + let realm = try Realm() try realm.write { realm.add(result, update: .all) } @@ -463,9 +461,8 @@ extension NCManageDatabase { func addMetadatas(_ metadatas: [tableMetadata]) { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { for metadata in metadatas { realm.add(metadata, update: .all) @@ -478,9 +475,8 @@ extension NCManageDatabase { func deleteMetadata(predicate: NSPredicate) { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { let results = realm.objects(tableMetadata.self).filter(predicate) realm.delete(results) @@ -492,9 +488,8 @@ extension NCManageDatabase { func moveMetadata(ocId: String, serverUrlTo: String) { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { if let result = realm.objects(tableMetadata.self).filter("ocId == %@", ocId).first { result.serverUrl = serverUrlTo @@ -507,9 +502,8 @@ extension NCManageDatabase { func renameMetadata(fileNameTo: String, ocId: String) { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { if let result = realm.objects(tableMetadata.self).filter("ocId == %@", ocId).first { let resultsType = NextcloudKit.shared.nkCommonInstance.getInternalType(fileName: fileNameTo, mimeType: "", directory: result.directory) @@ -528,7 +522,6 @@ extension NCManageDatabase { @discardableResult func updateMetadatas(_ metadatas: [tableMetadata], metadatasResult: [tableMetadata], addCompareLivePhoto: Bool = true, addExistsInLocal: Bool = false, addCompareEtagLocal: Bool = false, addDirectorySynchronized: Bool = false) -> (metadatasUpdate: [tableMetadata], metadatasLocalUpdate: [tableMetadata], metadatasDelete: [tableMetadata]) { - let realm = try! Realm() var ocIdsUdate: [String] = [] var ocIdsLocalUdate: [String] = [] var metadatasDelete: [tableMetadata] = [] @@ -536,6 +529,7 @@ extension NCManageDatabase { var metadatasLocalUpdate: [tableMetadata] = [] do { + let realm = try Realm() try realm.write { // DELETE @@ -599,30 +593,31 @@ extension NCManageDatabase { } } } - } catch let error { - NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") - } - for ocId in ocIdsUdate { - if let result = realm.objects(tableMetadata.self).filter(NSPredicate(format: "ocId == %@", ocId)).first { - metadatasUpdate.append(tableMetadata.init(value: result)) + for ocId in ocIdsUdate { + if let result = realm.objects(tableMetadata.self).filter(NSPredicate(format: "ocId == %@", ocId)).first { + metadatasUpdate.append(tableMetadata.init(value: result)) + } } - } - for ocId in ocIdsLocalUdate { - if let result = realm.objects(tableMetadata.self).filter(NSPredicate(format: "ocId == %@", ocId)).first { - metadatasLocalUpdate.append(tableMetadata.init(value: result)) + for ocId in ocIdsLocalUdate { + if let result = realm.objects(tableMetadata.self).filter(NSPredicate(format: "ocId == %@", ocId)).first { + metadatasLocalUpdate.append(tableMetadata.init(value: result)) + } } + + return (metadatasUpdate, metadatasLocalUpdate, metadatasDelete) + } catch let error { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } - return (metadatasUpdate, metadatasLocalUpdate, metadatasDelete) + return ([], [], []) } func setMetadataSession(ocId: String, newFileName: String? = nil, session: String? = nil, sessionError: String? = nil, sessionSelector: String? = nil, sessionTaskIdentifier: Int? = nil, status: Int? = nil, etag: String? = nil) { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { let result = realm.objects(tableMetadata.self).filter("ocId == %@", ocId).first if let newFileName = newFileName { @@ -656,10 +651,10 @@ extension NCManageDatabase { @discardableResult func setMetadataStatus(ocId: String, status: Int) -> tableMetadata? { - let realm = try! Realm() var result: tableMetadata? do { + let realm = try Realm() try realm.write { result = realm.objects(tableMetadata.self).filter("ocId == %@", ocId).first result?.status = status @@ -677,11 +672,11 @@ extension NCManageDatabase { func setMetadataEtagResource(ocId: String, etagResource: String?) { - let realm = try! Realm() var result: tableMetadata? guard let etagResource = etagResource else { return } do { + let realm = try Realm() try realm.write { result = realm.objects(tableMetadata.self).filter("ocId == %@", ocId).first result?.etagResource = etagResource @@ -693,9 +688,8 @@ extension NCManageDatabase { func setMetadataFavorite(ocId: String, favorite: Bool) { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { let result = realm.objects(tableMetadata.self).filter("ocId == %@", ocId).first result?.favorite = favorite @@ -707,9 +701,8 @@ extension NCManageDatabase { func updateMetadatasFavorite(account: String, metadatas: [tableMetadata]) { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { let results = realm.objects(tableMetadata.self).filter("account == %@ AND favorite == true", account) for result in results { @@ -726,9 +719,8 @@ extension NCManageDatabase { func setMetadataEncrypted(ocId: String, encrypted: Bool) { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { let result = realm.objects(tableMetadata.self).filter("ocId == %@", ocId).first result?.e2eEncrypted = encrypted @@ -740,9 +732,8 @@ extension NCManageDatabase { func setMetadataFileNameView(serverUrl: String, fileName: String, newFileNameView: String, account: String) { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { let result = realm.objects(tableMetadata.self).filter("account == %@ AND serverUrl == %@ AND fileName == %@", account, serverUrl, fileName).first result?.fileNameView = newFileNameView @@ -754,144 +745,159 @@ extension NCManageDatabase { func getMetadata(predicate: NSPredicate) -> tableMetadata? { - let realm = try! Realm() - realm.refresh() - - guard let result = realm.objects(tableMetadata.self).filter(predicate).first else { - return nil + do { + let realm = try Realm() + guard let result = realm.objects(tableMetadata.self).filter(predicate).first else { return nil } + return tableMetadata.init(value: result) + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } - return tableMetadata.init(value: result) + return nil } func getMetadata(predicate: NSPredicate, sorted: String, ascending: Bool) -> tableMetadata? { - let realm = try! Realm() - realm.refresh() - - guard let result = realm.objects(tableMetadata.self).filter(predicate).sorted(byKeyPath: sorted, ascending: ascending).first else { - return nil + do { + let realm = try Realm() + guard let result = realm.objects(tableMetadata.self).filter(predicate).sorted(byKeyPath: sorted, ascending: ascending).first else { return nil } + return tableMetadata.init(value: result) + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } - return tableMetadata.init(value: result) + return nil } func getMetadatasViewer(predicate: NSPredicate, sorted: String, ascending: Bool) -> [tableMetadata]? { - let realm = try! Realm() - realm.refresh() - let results: Results var finals: [tableMetadata] = [] - if (tableMetadata().objectSchema.properties.contains { $0.name == sorted }) { - results = realm.objects(tableMetadata.self).filter(predicate).sorted(byKeyPath: sorted, ascending: ascending) - } else { - results = realm.objects(tableMetadata.self).filter(predicate) - } + do { + let realm = try Realm() + if (tableMetadata().objectSchema.properties.contains { $0.name == sorted }) { + results = realm.objects(tableMetadata.self).filter(predicate).sorted(byKeyPath: sorted, ascending: ascending) + } else { + results = realm.objects(tableMetadata.self).filter(predicate) + } - // For Live Photo - var fileNameImages: [String] = [] - let filtered = results.filter { $0.classFile.contains(NKCommon.TypeClassFile.image.rawValue) } - filtered.forEach { print($0) - let fileName = ($0.fileNameView as NSString).deletingPathExtension - fileNameImages.append(fileName) - } + // For Live Photo + var fileNameImages: [String] = [] + let filtered = results.filter { $0.classFile.contains(NKCommon.TypeClassFile.image.rawValue) } + filtered.forEach { print($0) + let fileName = ($0.fileNameView as NSString).deletingPathExtension + fileNameImages.append(fileName) + } - for result in results { + for result in results { - let ext = (result.fileNameView as NSString).pathExtension.uppercased() - let fileName = (result.fileNameView as NSString).deletingPathExtension + let ext = (result.fileNameView as NSString).pathExtension.uppercased() + let fileName = (result.fileNameView as NSString).deletingPathExtension - if !(ext == "MOV" && fileNameImages.contains(fileName)) { - finals.append(result) + if !(ext == "MOV" && fileNameImages.contains(fileName)) { + finals.append(result) + } } + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } - if finals.count > 0 { - return Array(finals.map { tableMetadata.init(value: $0) }) - } else { + if finals.isEmpty { return nil + } else { + return Array(finals.map { tableMetadata.init(value: $0) }) } } func getMetadatas(predicate: NSPredicate) -> [tableMetadata] { - let realm = try! Realm() - realm.refresh() - - let results = realm.objects(tableMetadata.self).filter(predicate) + do { + let realm = try Realm() + let results = realm.objects(tableMetadata.self).filter(predicate) + return Array(results.map { tableMetadata.init(value: $0) }) + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") + } - return Array(results.map { tableMetadata.init(value: $0) }) + return [] } func getAdvancedMetadatas(predicate: NSPredicate, page: Int = 0, limit: Int = 0, sorted: String, ascending: Bool) -> [tableMetadata] { - let realm = try! Realm() - realm.refresh() var metadatas: [tableMetadata] = [] - let results = realm.objects(tableMetadata.self).filter(predicate).sorted(byKeyPath: sorted, ascending: ascending) - - if results.count > 0 { - if page == 0 || limit == 0 { - return Array(results.map { tableMetadata.init(value: $0) }) - } else { - - let nFrom = (page - 1) * limit - let nTo = nFrom + (limit - 1) - - for n in nFrom...nTo { - if n == results.count { - break + do { + let realm = try Realm() + let results = realm.objects(tableMetadata.self).filter(predicate).sorted(byKeyPath: sorted, ascending: ascending) + if !results.isEmpty { + if page == 0 || limit == 0 { + return Array(results.map { tableMetadata.init(value: $0) }) + } else { + let nFrom = (page - 1) * limit + let nTo = nFrom + (limit - 1) + for n in nFrom...nTo { + if n == results.count { + break + } + metadatas.append(tableMetadata.init(value: results[n])) } - metadatas.append(tableMetadata.init(value: results[n])) } } + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } + return metadatas } func getMetadataAtIndex(predicate: NSPredicate, sorted: String, ascending: Bool, index: Int) -> tableMetadata? { - let realm = try! Realm() - realm.refresh() - - let results = realm.objects(tableMetadata.self).filter(predicate).sorted(byKeyPath: sorted, ascending: ascending) - - if results.count > 0 && results.count > index { - return tableMetadata.init(value: results[index]) - } else { - return nil + do { + let realm = try Realm() + let results = realm.objects(tableMetadata.self).filter(predicate).sorted(byKeyPath: sorted, ascending: ascending) + if results.isEmpty { + return nil + } else { + return tableMetadata.init(value: results[index]) + } + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } + + return nil } func getMetadataFromOcId(_ ocId: String?) -> tableMetadata? { - let realm = try! Realm() - realm.refresh() - - guard let ocId = ocId else { return nil } - guard let result = realm.objects(tableMetadata.self).filter("ocId == %@", ocId).first else { return nil } + do { + let realm = try Realm() + guard let ocId = ocId else { return nil } + guard let result = realm.objects(tableMetadata.self).filter("ocId == %@", ocId).first else { return nil } + return tableMetadata.init(value: result) + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") + } - return tableMetadata.init(value: result) + return nil } func getMetadataFromFileId(_ fileId: String?) -> tableMetadata? { - let realm = try! Realm() - realm.refresh() - - guard let fileId = fileId else { return nil } - guard let result = realm.objects(tableMetadata.self).filter("fileId == %@", fileId).first else { return nil } + do { + let realm = try Realm() + guard let fileId = fileId else { return nil } + guard let result = realm.objects(tableMetadata.self).filter("fileId == %@", fileId).first else { return nil } + return tableMetadata.init(value: result) + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") + } - return tableMetadata.init(value: result) + return nil } func getMetadataFolder(account: String, urlBase: String, userId: String, serverUrl: String) -> tableMetadata? { - let realm = try! Realm() - realm.refresh() var serverUrl = serverUrl var fileName = "" @@ -906,22 +912,31 @@ extension NCManageDatabase { } } - guard let result = realm.objects(tableMetadata.self).filter("account == %@ AND serverUrl == %@ AND fileName == %@", account, serverUrl, fileName).first else { return nil } + do { + let realm = try Realm() + guard let result = realm.objects(tableMetadata.self).filter("account == %@ AND serverUrl == %@ AND fileName == %@", account, serverUrl, fileName).first else { return nil } + return tableMetadata.init(value: result) + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") + } - return tableMetadata.init(value: result) + return nil } func getTableMetadatasDirectoryFavoriteIdentifierRank(account: String) -> [String: NSNumber] { var listIdentifierRank: [String: NSNumber] = [:] - let realm = try! Realm() var counter = 10 as Int64 - let results = realm.objects(tableMetadata.self).filter("account == %@ AND directory == true AND favorite == true", account).sorted(byKeyPath: "fileNameView", ascending: true) - - for result in results { - counter += 1 - listIdentifierRank[result.ocId] = NSNumber(value: Int64(counter)) + do { + let realm = try Realm() + let results = realm.objects(tableMetadata.self).filter("account == %@ AND directory == true AND favorite == true", account).sorted(byKeyPath: "fileNameView", ascending: true) + for result in results { + counter += 1 + listIdentifierRank[result.ocId] = NSNumber(value: Int64(counter)) + } + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } return listIdentifierRank @@ -929,12 +944,9 @@ extension NCManageDatabase { @objc func clearMetadatasUpload(account: String) { - let realm = try! Realm() - realm.refresh() - do { + let realm = try Realm() try realm.write { - let results = realm.objects(tableMetadata.self).filter("account == %@ AND (status == %d OR status == %@)", account, NCGlobal.shared.metadataStatusWaitUpload, NCGlobal.shared.metadataStatusUploadError) realm.delete(results) } @@ -945,9 +957,8 @@ extension NCManageDatabase { func readMarkerMetadata(account: String, fileId: String) { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { let results = realm.objects(tableMetadata.self).filter("account == %@ AND fileId == %@", account, fileId) for result in results { @@ -961,14 +972,16 @@ extension NCManageDatabase { func getAssetLocalIdentifiersUploaded(account: String) -> [String] { - let realm = try! Realm() - realm.refresh() - var assetLocalIdentifiers: [String] = [] - let results = realm.objects(tableMetadata.self).filter("account == %@ AND assetLocalIdentifier != '' AND deleteAssetLocalIdentifier == true", account) - for result in results { - assetLocalIdentifiers.append(result.assetLocalIdentifier) + do { + let realm = try Realm() + let results = realm.objects(tableMetadata.self).filter("account == %@ AND assetLocalIdentifier != '' AND deleteAssetLocalIdentifier == true", account) + for result in results { + assetLocalIdentifiers.append(result.assetLocalIdentifier) + } + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } return assetLocalIdentifiers @@ -976,9 +989,8 @@ extension NCManageDatabase { func clearAssetLocalIdentifiers(_ assetLocalIdentifiers: [String], account: String) { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { let results = realm.objects(tableMetadata.self).filter("account == %@ AND assetLocalIdentifier IN %@", account, assetLocalIdentifiers) for result in results { @@ -993,7 +1005,6 @@ extension NCManageDatabase { func getMetadataLivePhoto(metadata: tableMetadata) -> tableMetadata? { - let realm = try! Realm() var classFile = metadata.classFile var fileName = (metadata.fileNameView as NSString).deletingPathExtension @@ -1009,31 +1020,35 @@ extension NCManageDatabase { fileName = fileName + ".jpg" } - guard let result = realm.objects(tableMetadata.self).filter(NSPredicate(format: "account == %@ AND serverUrl == %@ AND fileNameView CONTAINS[cd] %@ AND ocId != %@ AND classFile == %@", metadata.account, metadata.serverUrl, fileName, metadata.ocId, classFile)).first else { - return nil + do { + let realm = try Realm() + guard let result = realm.objects(tableMetadata.self).filter(NSPredicate(format: "account == %@ AND serverUrl == %@ AND fileNameView CONTAINS[cd] %@ AND ocId != %@ AND classFile == %@", metadata.account, metadata.serverUrl, fileName, metadata.ocId, classFile)).first else { return nil } + return tableMetadata.init(value: result) + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } - return tableMetadata.init(value: result) + return nil } func getMetadatasMedia(predicate: NSPredicate, livePhoto: Bool) -> [tableMetadata] { - let realm = try! Realm() var metadatas: [tableMetadata] = [] do { + let realm = try Realm() try realm.write { - let sortProperties = [SortDescriptor(keyPath: "serverUrl", ascending: false), SortDescriptor(keyPath: "fileNameView", ascending: false)] + let sortProperties = [SortDescriptor(keyPath: "serverUrl", ascending: false), SortDescriptor(keyPath: "fileNameView", ascending: false)] let results = realm.objects(tableMetadata.self).filter(predicate).sorted(by: sortProperties) if livePhoto { for index in results.indices { let metadata = results[index] - if index < results.count - 1, metadata.fileNoExtension == results[index+1].fileNoExtension { + if index < results.count - 1, metadata.fileNoExtension == results[index + 1].fileNoExtension { if !metadata.livePhoto { metadata.livePhoto = true } - if !results[index+1].livePhoto { - results[index+1].livePhoto = true + if !results[index + 1].livePhoto { + results[index + 1].livePhoto = true } } if metadata.livePhoto { @@ -1104,37 +1119,48 @@ extension NCManageDatabase { func getNumMetadatasInUpload() -> Int { - let realm = try! Realm() - - let num = realm.objects(tableMetadata.self).filter(NSPredicate(format: "status == %i || status == %i", NCGlobal.shared.metadataStatusInUpload, NCGlobal.shared.metadataStatusUploading)).count + do { + let realm = try Realm() + return realm.objects(tableMetadata.self).filter(NSPredicate(format: "status == %i || status == %i", NCGlobal.shared.metadataStatusInUpload, NCGlobal.shared.metadataStatusUploading)).count + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") + } - return num + return 0 } func getMetadataFromDirectory(account: String, serverUrl: String) -> tableMetadata? { - let realm = try! Realm() - - guard let directory = realm.objects(tableDirectory.self).filter("account == %@ AND serverUrl == %@", account, serverUrl).first else { return nil } - guard let result = realm.objects(tableMetadata.self).filter("ocId == %@", directory.ocId).first else { return nil } + do { + let realm = try Realm() + guard let directory = realm.objects(tableDirectory.self).filter("account == %@ AND serverUrl == %@", account, serverUrl).first else { return nil } + guard let result = realm.objects(tableMetadata.self).filter("ocId == %@", directory.ocId).first else { return nil } + return tableMetadata.init(value: result) + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") + } - return tableMetadata.init(value: result) + return nil } func getMetadatasFromGroupfolders(account: String, urlBase: String, userId: String) -> [tableMetadata] { - let realm = try! Realm() var metadatas: [tableMetadata] = [] let homeServerUrl = NCUtilityFileSystem.shared.getHomeServer(urlBase: urlBase, userId: userId) - let groupfolders = realm.objects(TableGroupfolders.self).filter("account == %@", account) - for groupfolder in groupfolders { - let mountPoint = groupfolder.mountPoint.hasPrefix("/") ? groupfolder.mountPoint : "/" + groupfolder.mountPoint - let serverUrlFileName = homeServerUrl + mountPoint - if let directory = realm.objects(tableDirectory.self).filter("account == %@ AND serverUrl == %@", account, serverUrlFileName).first, - let metadata = realm.objects(tableMetadata.self).filter("ocId == %@", directory.ocId).first { - metadatas.append(tableMetadata(value: metadata)) + do { + let realm = try Realm() + let groupfolders = realm.objects(TableGroupfolders.self).filter("account == %@", account) + for groupfolder in groupfolders { + let mountPoint = groupfolder.mountPoint.hasPrefix("/") ? groupfolder.mountPoint : "/" + groupfolder.mountPoint + let serverUrlFileName = homeServerUrl + mountPoint + if let directory = realm.objects(tableDirectory.self).filter("account == %@ AND serverUrl == %@", account, serverUrlFileName).first, + let metadata = realm.objects(tableMetadata.self).filter("ocId == %@", directory.ocId).first { + metadatas.append(tableMetadata(value: metadata)) + } } + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } return metadatas From af18e9af5169934fd1b5cb9ff25e5be65474e852 Mon Sep 17 00:00:00 2001 From: Marino Faggiana Date: Wed, 5 Jul 2023 15:44:05 +0200 Subject: [PATCH 16/26] lint Signed-off-by: Marino Faggiana --- .swiftlint.yml | 1 - .../Data/NCManageDatabase+Activity.swift | 3 +- iOSClient/Data/NCManageDatabase+E2EE.swift | 34 ++++++------------- iOSClient/Data/NCManageDatabase+Share.swift | 14 +++++--- iOSClient/Data/NCManageDatabase.swift | 6 +++- 5 files changed, 26 insertions(+), 32 deletions(-) diff --git a/.swiftlint.yml b/.swiftlint.yml index 63325c2440..8e4cadd6f7 100644 --- a/.swiftlint.yml +++ b/.swiftlint.yml @@ -37,7 +37,6 @@ disabled_rules: - cyclomatic_complexity - nesting - shorthand_operator - - force_try - type_name excluded: diff --git a/iOSClient/Data/NCManageDatabase+Activity.swift b/iOSClient/Data/NCManageDatabase+Activity.swift index 458017e0bf..f0bd8b6236 100644 --- a/iOSClient/Data/NCManageDatabase+Activity.swift +++ b/iOSClient/Data/NCManageDatabase+Activity.swift @@ -297,9 +297,8 @@ extension NCManageDatabase { func addComments(_ comments: [NKComments], account: String, objectId: String) { - let realm = try! Realm() - do { + let realm = try Realm() try realm.write { let results = realm.objects(tableComments.self).filter("account == %@ AND objectId == %@", account, objectId) realm.delete(results) diff --git a/iOSClient/Data/NCManageDatabase+E2EE.swift b/iOSClient/Data/NCManageDatabase+E2EE.swift index d3a937bdae..ac6b559ab4 100644 --- a/iOSClient/Data/NCManageDatabase+E2EE.swift +++ b/iOSClient/Data/NCManageDatabase+E2EE.swift @@ -134,31 +134,19 @@ extension NCManageDatabase { @objc func renameFileE2eEncryption(serverUrl: String, fileNameIdentifier: String, newFileName: String, newFileNamePath: String) { - guard let activeAccount = self.getActiveAccount() else { - return - } - - let realm = try! Realm() - - realm.beginWrite() - - guard let result = realm.objects(tableE2eEncryption.self).filter("account == %@ AND serverUrl == %@ AND fileNameIdentifier == %@", activeAccount.account, serverUrl, fileNameIdentifier).first else { - realm.cancelWrite() - return - } - - let object = tableE2eEncryption.init(value: result) - - realm.delete(result) - - object.fileName = newFileName - object.fileNamePath = newFileNamePath - - realm.add(object) + guard let activeAccount = self.getActiveAccount() else { return } do { - try realm.commitWrite() - } catch let error { + let realm = try Realm() + try realm.write { + guard let result = realm.objects(tableE2eEncryption.self).filter("account == %@ AND serverUrl == %@ AND fileNameIdentifier == %@", activeAccount.account, serverUrl, fileNameIdentifier).first else { return } + let object = tableE2eEncryption.init(value: result) + realm.delete(result) + object.fileName = newFileName + object.fileNamePath = newFileNamePath + realm.add(object) + } + } catch let error as NSError { NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } } diff --git a/iOSClient/Data/NCManageDatabase+Share.swift b/iOSClient/Data/NCManageDatabase+Share.swift index 1da04923cd..e531c54119 100644 --- a/iOSClient/Data/NCManageDatabase+Share.swift +++ b/iOSClient/Data/NCManageDatabase+Share.swift @@ -182,12 +182,16 @@ extension NCManageDatabase { func getTableShares(account: String, serverUrl: String) -> [tableShare] { - let realm = try! Realm() - - let sortProperties = [SortDescriptor(keyPath: "shareType", ascending: false), SortDescriptor(keyPath: "idShare", ascending: false)] - let results = realm.objects(tableShare.self).filter("account == %@ AND serverUrl == %@", account, serverUrl).sorted(by: sortProperties) + do { + let realm = try Realm() + let sortProperties = [SortDescriptor(keyPath: "shareType", ascending: false), SortDescriptor(keyPath: "idShare", ascending: false)] + let results = realm.objects(tableShare.self).filter("account == %@ AND serverUrl == %@", account, serverUrl).sorted(by: sortProperties) + return Array(results.map { tableShare.init(value: $0) }) + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") + } - return Array(results.map { tableShare.init(value: $0) }) + return [] } func getTableShares(account: String, serverUrl: String, fileName: String) -> [tableShare] { diff --git a/iOSClient/Data/NCManageDatabase.swift b/iOSClient/Data/NCManageDatabase.swift index d3c3918e40..4adafbd055 100644 --- a/iOSClient/Data/NCManageDatabase.swift +++ b/iOSClient/Data/NCManageDatabase.swift @@ -149,7 +149,11 @@ class NCManageDatabase: NSObject { } // Open Real - _ = try! Realm() + do { + _ = try Realm() + } catch let error as NSError { + NextcloudKit.shared.nkCommonInstance.writeLog("Could not open database: \(error)") + } } // MARK: - From 4e56fb8b1b336a681cf18e6a140f748843f283bc Mon Sep 17 00:00:00 2001 From: Marino Faggiana Date: Wed, 5 Jul 2023 15:48:32 +0200 Subject: [PATCH 17/26] lint Signed-off-by: Marino Faggiana --- Brand/Database.swift | 2 +- Nextcloud.xcodeproj/project.pbxproj | 8 ++++---- iOSClient/Data/NCManageDatabase+Account.swift | 13 ------------- 3 files changed, 5 insertions(+), 18 deletions(-) diff --git a/Brand/Database.swift b/Brand/Database.swift index bf85e69e29..8a08ff2f3e 100644 --- a/Brand/Database.swift +++ b/Brand/Database.swift @@ -26,4 +26,4 @@ import Foundation // Database Realm // let databaseName = "nextcloud.realm" -let databaseSchemaVersion: UInt64 = 297 +let databaseSchemaVersion: UInt64 = 298 diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj index eed84a8a60..1b7ee9de11 100644 --- a/Nextcloud.xcodeproj/project.pbxproj +++ b/Nextcloud.xcodeproj/project.pbxproj @@ -4566,7 +4566,7 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 4; + CURRENT_PROJECT_VERSION = 0; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = NKUJUXUJ3B; ENABLE_STRICT_OBJC_MSGSEND = YES; @@ -4592,7 +4592,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 4.8.4; + MARKETING_VERSION = 4.8.5; ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = ""; SDKROOT = iphoneos; @@ -4631,7 +4631,7 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 4; + CURRENT_PROJECT_VERSION = 0; DEVELOPMENT_TEAM = NKUJUXUJ3B; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; @@ -4654,7 +4654,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 4.8.4; + MARKETING_VERSION = 4.8.5; ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = ""; SDKROOT = iphoneos; diff --git a/iOSClient/Data/NCManageDatabase+Account.swift b/iOSClient/Data/NCManageDatabase+Account.swift index 51310d7782..50ca5641c8 100644 --- a/iOSClient/Data/NCManageDatabase+Account.swift +++ b/iOSClient/Data/NCManageDatabase+Account.swift @@ -81,19 +81,6 @@ class tableAccount: Object, NCUserBaseUrl { @objc dynamic var website = "" @objc dynamic var zip = "" - // HC - @objc dynamic var hcIsTrial: Bool = false - @objc dynamic var hcTrialExpired: Bool = false - @objc dynamic var hcTrialRemainingSec: Int64 = 0 - @objc dynamic var hcTrialEndTime: NSDate? - @objc dynamic var hcAccountRemoveExpired: Bool = false - @objc dynamic var hcAccountRemoveRemainingSec: Int64 = 0 - @objc dynamic var hcAccountRemoveTime: NSDate? - @objc dynamic var hcNextGroupExpirationGroup = "" - @objc dynamic var hcNextGroupExpirationGroupExpired: Bool = false - @objc dynamic var hcNextGroupExpirationExpiresTime: NSDate? - @objc dynamic var hcNextGroupExpirationExpires = "" - override static func primaryKey() -> String { return "account" } From a6504e99cda01f33eebd5ecc12051f81199c4e13 Mon Sep 17 00:00:00 2001 From: Marino Faggiana Date: Wed, 5 Jul 2023 15:52:32 +0200 Subject: [PATCH 18/26] lint Signed-off-by: Marino Faggiana --- iOSClient/Data/NCManageDatabase+Metadata.swift | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/iOSClient/Data/NCManageDatabase+Metadata.swift b/iOSClient/Data/NCManageDatabase+Metadata.swift index 8e79b88650..a2c63aa9ac 100644 --- a/iOSClient/Data/NCManageDatabase+Metadata.swift +++ b/iOSClient/Data/NCManageDatabase+Metadata.swift @@ -672,13 +672,12 @@ extension NCManageDatabase { func setMetadataEtagResource(ocId: String, etagResource: String?) { - var result: tableMetadata? guard let etagResource = etagResource else { return } do { let realm = try Realm() try realm.write { - result = realm.objects(tableMetadata.self).filter("ocId == %@", ocId).first + let result = realm.objects(tableMetadata.self).filter("ocId == %@", ocId).first result?.etagResource = etagResource } } catch let error { From 86b8e7fb398d4c52f1116145c750f588f2d72ec2 Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Thu, 6 Jul 2023 02:34:28 +0000 Subject: [PATCH 19/26] Fix(l10n): Update translations from Transifex Signed-off-by: Nextcloud bot --- .../ar.lproj/Localizable.strings | Bin 118872 -> 118804 bytes .../fa.lproj/Localizable.strings | Bin 121570 -> 121566 bytes .../uk.lproj/Localizable.strings | Bin 122882 -> 122894 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/iOSClient/Supporting Files/ar.lproj/Localizable.strings b/iOSClient/Supporting Files/ar.lproj/Localizable.strings index e9841e8af6cf1768dd7eec6e97761885e1bcd3df..b3f5d0e03fb63a0d017506128753d579a65e8c47 100644 GIT binary patch delta 497 zcmX|8Jxjwt7`}t{ZADQ^vC@L|&>?9|6WcUuiw?21P2(cCbaN6n5fNNFxVaP}oMV50 zgQY_j|AM=d;6HE?9DVMH4)^BXyXSpAF7MOa<23hjY5S;-@LL?Rji~)le75pfYSl9`omNqJal18JsnBZljmpjEO{siTM+gQX# z1uX&*&e9@3z)CD^?5(UUeY?3J%QCz3X5M={+iZnDTH&^xjV;pwR*hT|ZJehInm@EJVKn6Kf z24tYzq%*`*L>n{}R0vw4&hvc!OE%*?D!Xx>lQ$ub%J*R&@yl_}hrHa%P}oAXpd)z| z;)MU5G)btyx@cN>wC@R_hFFsx@YVmrg;#^%n}oRhRYCyBAF0ssjF49EZg delta 34 qcmcb&mHp9H_6T_W+V6gz}|F#eS-)0R-WIQgFu8z)?7vZ9INWIbb<%@>TL0@=Z;So|j&w#Gx*7L%>zWG9={noJf*Wr2#B zZvNQ%(R8xI9=^$+cCVSPz{AKQ;LKvp;>ThLBu#;~nzBrKD>3=O0hZ0T_B1R4Y1M!j z4U)8AaRoZc1?V74pz<&lBOni?#Re!6!ZKYUfl+L_Ogy8|_GR&mL5x6e@iE$M=S*Z| Gtp@;xbUl&) From 0e0cdb0ec0623e137a5a8d53699ac96970a585e5 Mon Sep 17 00:00:00 2001 From: Marino Faggiana Date: Thu, 6 Jul 2023 11:06:30 +0200 Subject: [PATCH 20/26] replace numbers Signed-off-by: Marino Faggiana --- Brand/Database.swift | 2 +- iOSClient/Data/NCManageDatabase+Account.swift | 10 +++++----- iOSClient/Main/Create cloud/NCUploadAssets.swift | 4 ++-- iOSClient/NCGlobal.swift | 6 ++++++ iOSClient/Networking/NCAutoUpload.swift | 4 ++-- iOSClient/Networking/NCNetworking.swift | 8 ++++---- iOSClient/Settings/CCManageAutoUpload.m | 6 +++--- 7 files changed, 23 insertions(+), 17 deletions(-) diff --git a/Brand/Database.swift b/Brand/Database.swift index 8a08ff2f3e..63d330a0a7 100644 --- a/Brand/Database.swift +++ b/Brand/Database.swift @@ -26,4 +26,4 @@ import Foundation // Database Realm // let databaseName = "nextcloud.realm" -let databaseSchemaVersion: UInt64 = 298 +let databaseSchemaVersion: UInt64 = 299 diff --git a/iOSClient/Data/NCManageDatabase+Account.swift b/iOSClient/Data/NCManageDatabase+Account.swift index 50ca5641c8..2435651dd2 100644 --- a/iOSClient/Data/NCManageDatabase+Account.swift +++ b/iOSClient/Data/NCManageDatabase+Account.swift @@ -33,7 +33,7 @@ class tableAccount: Object, NCUserBaseUrl { @objc dynamic var alias = "" @objc dynamic var autoUpload: Bool = false @objc dynamic var autoUploadCreateSubfolder: Bool = false - @objc dynamic var autoUploadSubfolderGranularity: Int64 = 1 + @objc dynamic var autoUploadSubfolderGranularity: Int = NCGlobal.shared.subfolderGranularityMonthly @objc dynamic var autoUploadDirectory = "" @objc dynamic var autoUploadFileName = "" @objc dynamic var autoUploadFull: Bool = false @@ -262,17 +262,17 @@ extension NCManageDatabase { return folderPhotos } - @objc func getAccountAutoUploadSubfolderGranularity() -> Int64 { + @objc func getAccountAutoUploadSubfolderGranularity() -> Int { do { let realm = try Realm() - guard let result = realm.objects(tableAccount.self).filter("active == true").first else { return 1 } + guard let result = realm.objects(tableAccount.self).filter("active == true").first else { return NCGlobal.shared.subfolderGranularityMonthly } return result.autoUploadSubfolderGranularity } catch let error as NSError { NextcloudKit.shared.nkCommonInstance.writeLog("Could not write to database: \(error)") } - return 1 + return NCGlobal.shared.subfolderGranularityMonthly } @discardableResult @@ -333,7 +333,7 @@ extension NCManageDatabase { } } - @objc func setAccountAutoUploadGranularity(_ property: String, state: Int64) { + @objc func setAccountAutoUploadGranularity(_ property: String, state: Int) { do { let realm = try Realm() diff --git a/iOSClient/Main/Create cloud/NCUploadAssets.swift b/iOSClient/Main/Create cloud/NCUploadAssets.swift index d2d646f5b3..403feae340 100644 --- a/iOSClient/Main/Create cloud/NCUploadAssets.swift +++ b/iOSClient/Main/Create cloud/NCUploadAssets.swift @@ -243,9 +243,9 @@ struct UploadAssetsView: View { let monthString = dateFormatter.string(from: creationDate) dateFormatter.dateFormat = "dd" let dayString = dateFormatter.string(from: creationDate) - if autoUploadSubfolderGranularity == 0 { + if autoUploadSubfolderGranularity == NCGlobal.shared.subfolderGranularityYearly { serverUrl = autoUploadPath + "/" + yearString - } else if autoUploadSubfolderGranularity == 2 { + } else if autoUploadSubfolderGranularity == NCGlobal.shared.subfolderGranularityDaily { serverUrl = autoUploadPath + "/" + yearString + "/" + monthString + "/" + dayString } else { // Month Granularity is default serverUrl = autoUploadPath + "/" + yearString + "/" + monthString diff --git a/iOSClient/NCGlobal.swift b/iOSClient/NCGlobal.swift index b36d649101..6b4432a21a 100644 --- a/iOSClient/NCGlobal.swift +++ b/iOSClient/NCGlobal.swift @@ -310,6 +310,12 @@ class NCGlobal: NSObject { // let includeHiddenFiles: [String] = [".LivePhoto"] + // Auto upload subfolder granularity + // + @objc let subfolderGranularityDaily = 2 + @objc let subfolderGranularityMonthly = 1 + @objc let subfolderGranularityYearly = 0 + // Notification Center // @objc let notificationCenterApplicationDidEnterBackground = "applicationDidEnterBackground" diff --git a/iOSClient/Networking/NCAutoUpload.swift b/iOSClient/Networking/NCAutoUpload.swift index ce18919225..650699e193 100644 --- a/iOSClient/Networking/NCAutoUpload.swift +++ b/iOSClient/Networking/NCAutoUpload.swift @@ -139,10 +139,10 @@ class NCAutoUpload: NSObject { } if account.autoUploadCreateSubfolder { - if (autoUploadSubfolderGranularity == 0) { + if (autoUploadSubfolderGranularity == NCGlobal.shared.subfolderGranularityYearly) { serverUrl = autoUploadPath + "/" + year } - else if (autoUploadSubfolderGranularity == 2) { + else if (autoUploadSubfolderGranularity == NCGlobal.shared.subfolderGranularityDaily) { serverUrl = autoUploadPath + "/" + year + "/" + month + "/" + day } else { // Month Granularity is default diff --git a/iOSClient/Networking/NCNetworking.swift b/iOSClient/Networking/NCNetworking.swift index 258638a6aa..1901fd1fbe 100644 --- a/iOSClient/Networking/NCNetworking.swift +++ b/iOSClient/Networking/NCNetworking.swift @@ -1120,9 +1120,9 @@ class NCNetworking: NSObject, NKCommonDelegate { let month = dateFormatter.string(from: date) dateFormatter.dateFormat = "dd" let day = dateFormatter.string(from: date) - if autoUploadSubfolderGranularity == 0 { + if autoUploadSubfolderGranularity == NCGlobal.shared.subfolderGranularityYearly { datesSubFolder.append("\(year)") - } else if autoUploadSubfolderGranularity == 2 { + } else if autoUploadSubfolderGranularity == NCGlobal.shared.subfolderGranularityDaily { datesSubFolder.append("\(year)/\(month)/\(day)") } else { // Month Granularity is default datesSubFolder.append("\(year)/\(month)") @@ -1140,11 +1140,11 @@ class NCNetworking: NSObject, NKCommonDelegate { let year = subfolderArray[0] let serverUrlYear = autoUploadPath result = createFolder(fileName: String(year), serverUrl: serverUrlYear) // Year always present independently of preference value - if result && autoUploadSubfolderGranularity >= 1 { + if result && autoUploadSubfolderGranularity >= NCGlobal.shared.subfolderGranularityMonthly { let month = subfolderArray[1] let serverUrlMonth = autoUploadPath + "/" + year result = createFolder(fileName: String(month), serverUrl: serverUrlMonth) - if result && autoUploadSubfolderGranularity == 2 { + if result && autoUploadSubfolderGranularity == NCGlobal.shared.subfolderGranularityDaily { let day = subfolderArray[2] let serverUrlDay = autoUploadPath + "/" + year + "/" + month result = createFolder(fileName: String(day), serverUrl: serverUrlDay) diff --git a/iOSClient/Settings/CCManageAutoUpload.m b/iOSClient/Settings/CCManageAutoUpload.m index 793ab1bafe..d193fdfca0 100644 --- a/iOSClient/Settings/CCManageAutoUpload.m +++ b/iOSClient/Settings/CCManageAutoUpload.m @@ -151,9 +151,9 @@ - (void)initializeForm row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; row.hidden = [NSString stringWithFormat:@"$%@==0", @"autoUpload"]; row.selectorOptions = @[ - [XLFormOptionsObject formOptionsObjectWithValue:@(0) displayText:NSLocalizedString(@"_yearly_", nil)], - [XLFormOptionsObject formOptionsObjectWithValue:@(1) displayText:NSLocalizedString(@"_monthly_", nil)], - [XLFormOptionsObject formOptionsObjectWithValue:@(2) displayText:NSLocalizedString(@"_daily_", nil)] + [XLFormOptionsObject formOptionsObjectWithValue:@(NCGlobal.shared.subfolderGranularityYearly) displayText:NSLocalizedString(@"_yearly_", nil)], + [XLFormOptionsObject formOptionsObjectWithValue:@(NCGlobal.shared.subfolderGranularityMonthly) displayText:NSLocalizedString(@"_monthly_", nil)], + [XLFormOptionsObject formOptionsObjectWithValue:@(NCGlobal.shared.subfolderGranularityDaily) displayText:NSLocalizedString(@"_daily_", nil)] ]; row.value = row.selectorOptions[activeAccount.autoUploadSubfolderGranularity]; row.required = true; From f820bae54fd41a0fce056252ebfad1c27a8b83b1 Mon Sep 17 00:00:00 2001 From: Milen Pivchev Date: Thu, 6 Jul 2023 16:31:32 +0200 Subject: [PATCH 21/26] WIP Signed-off-by: Milen Pivchev --- Cartfile | 2 +- .../Data/NCManageDatabase+Metadata.swift | 2 +- .../NCCollectionViewCommon.swift | 4 +-- iOSClient/Main/NCActionCenter.swift | 2 +- iOSClient/Media/NCMedia.swift | 2 +- iOSClient/Viewer/NCViewer.swift | 2 +- .../NCViewerMedia/NCPlayer/NCPlayer.swift | 26 ++----------------- .../NCPlayer/NCPlayerToolBar.swift | 6 ++--- .../Viewer/NCViewerMedia/NCViewerMedia.swift | 4 +-- .../NCViewerMedia/NCViewerMediaPage.swift | 8 +++--- 10 files changed, 18 insertions(+), 40 deletions(-) diff --git a/Cartfile b/Cartfile index 40df0842cb..3946734806 100644 --- a/Cartfile +++ b/Cartfile @@ -1,2 +1,2 @@ github "https://github.com/marinofaggiana/TOPasscodeViewController" "master" -binary "https://code.videolan.org/videolan/VLCKit/raw/master/Packaging/MobileVLCKit.json" ~> 3.3.0 \ No newline at end of file +binary "https://code.videolan.org/videolan/VLCKit/raw/master/Packaging/MobileVLCKit.json" ~> 3.5.1 \ No newline at end of file diff --git a/iOSClient/Data/NCManageDatabase+Metadata.swift b/iOSClient/Data/NCManageDatabase+Metadata.swift index 7c48c8665c..5d933c6483 100644 --- a/iOSClient/Data/NCManageDatabase+Metadata.swift +++ b/iOSClient/Data/NCManageDatabase+Metadata.swift @@ -144,7 +144,7 @@ extension tableMetadata { sharePermissionsCollaborationServices == NCGlobal.shared.permissionReadShare && classFile == NKCommon.TypeClassFile.document.rawValue } - var isMovie: Bool { + var isAudioOrVideo: Bool { return classFile == NKCommon.TypeClassFile.audio.rawValue || classFile == NKCommon.TypeClassFile.video.rawValue } diff --git a/iOSClient/Main/Collection Common/NCCollectionViewCommon.swift b/iOSClient/Main/Collection Common/NCCollectionViewCommon.swift index 86709d4b21..f78a2f24ea 100644 --- a/iOSClient/Main/Collection Common/NCCollectionViewCommon.swift +++ b/iOSClient/Main/Collection Common/NCCollectionViewCommon.swift @@ -1303,10 +1303,10 @@ extension NCCollectionViewCommon: UICollectionViewDelegate { let imageIcon = UIImage(contentsOfFile: CCUtility.getDirectoryProviderStorageIconOcId(metadata.ocId, etag: metadata.etag)) - if metadata.isImage || metadata.isMovie { + if metadata.isImage || metadata.isAudioOrVideo { var metadatas: [tableMetadata] = [] for metadata in metadataSourceForAllSections { - if metadata.isImage || metadata.isMovie { + if metadata.isImage || metadata.isAudioOrVideo { metadatas.append(metadata) } } diff --git a/iOSClient/Main/NCActionCenter.swift b/iOSClient/Main/NCActionCenter.swift index b2fe531c37..52ef6152dc 100644 --- a/iOSClient/Main/NCActionCenter.swift +++ b/iOSClient/Main/NCActionCenter.swift @@ -217,7 +217,7 @@ class NCActionCenter: NSObject, UIDocumentInteractionControllerDelegate, NCSelec let serverUrlFileName = metadata.serverUrl + "/" + metadata.fileName let fileNameLocalPath = CCUtility.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileNameView)! - if metadata.isMovie { + if metadata.isAudioOrVideo { NCViewer.shared.view(viewController: viewController, metadata: metadata, metadatas: [metadata], imageIcon: nil) } else { hud.show(in: hudView) diff --git a/iOSClient/Media/NCMedia.swift b/iOSClient/Media/NCMedia.swift index 8c72b02b48..40526f7601 100644 --- a/iOSClient/Media/NCMedia.swift +++ b/iOSClient/Media/NCMedia.swift @@ -402,7 +402,7 @@ extension NCMedia: UICollectionViewDataSource { cell.fileObjectId = metadata.ocId cell.fileUser = metadata.ownerId - if metadata.isMovie { + if metadata.isAudioOrVideo { cell.imageStatus.image = cacheImages.cellPlayImage } else if metadata.livePhoto && livePhoto { cell.imageStatus.image = cacheImages.cellLivePhotoImage diff --git a/iOSClient/Viewer/NCViewer.swift b/iOSClient/Viewer/NCViewer.swift index 5531f709de..be2dea07cb 100644 --- a/iOSClient/Viewer/NCViewer.swift +++ b/iOSClient/Viewer/NCViewer.swift @@ -69,7 +69,7 @@ class NCViewer: NSObject { } // IMAGE AUDIO VIDEO - if metadata.isImage || metadata.isMovie { + if metadata.isImage || metadata.isAudioOrVideo { if let navigationController = viewController.navigationController { diff --git a/iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayer.swift b/iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayer.swift index b1beeedc3e..085156ced0 100644 --- a/iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayer.swift +++ b/iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayer.swift @@ -242,6 +242,7 @@ extension NCPlayer: VLCMediaPlayerDelegate { activityIndicator.stopAnimating() } + print (aNotification) switch player.state { case .stopped: playerToolBar?.playButtonPlay() @@ -306,33 +307,10 @@ extension NCPlayer: VLCMediaPlayerDelegate { } func mediaPlayerTimeChanged(_ aNotification: Notification) { + print(player.position) activityIndicator.stopAnimating() playerToolBar?.update() } - - func mediaPlayerTitleChanged(_ aNotification: Notification) { - // Handle other states... - } - - func mediaPlayerChapterChanged(_ aNotification: Notification) { - // Handle other states... - } - - func mediaPlayerLoudnessChanged(_ aNotification: Notification) { - // Handle other states... - } - - func mediaPlayerSnapshot(_ aNotification: Notification) { - // Handle other states... - } - - func mediaPlayerStartedRecording(_ player: VLCMediaPlayer) { - // Handle other states... - } - - func mediaPlayer(_ player: VLCMediaPlayer, recordingStoppedAtPath path: String) { - // Handle other states... - } } extension NCPlayer: VLCMediaThumbnailerDelegate { diff --git a/iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayerToolBar.swift b/iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayerToolBar.swift index ec871b85a8..1295dd69e7 100644 --- a/iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayerToolBar.swift +++ b/iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayerToolBar.swift @@ -156,13 +156,13 @@ class NCPlayerToolBar: UIView { public func update() { - guard let ncplayer = self.ncplayer, - let length = ncplayer.player.media?.length.intValue - else { return } + guard let ncplayer = self.ncplayer, let length = ncplayer.player.media?.length.intValue else { return } let position = ncplayer.player.position let positionInSecond = position * Float(length / 1000) + print(position) + // SLIDER & TIME if playbackSliderEvent == .ended { playbackSlider.value = position diff --git a/iOSClient/Viewer/NCViewerMedia/NCViewerMedia.swift b/iOSClient/Viewer/NCViewerMedia/NCViewerMedia.swift index 9bfc1484af..4efc394d11 100644 --- a/iOSClient/Viewer/NCViewerMedia/NCViewerMedia.swift +++ b/iOSClient/Viewer/NCViewerMedia/NCViewerMedia.swift @@ -87,7 +87,7 @@ class NCViewerMedia: UIViewController { statusLabel.text = "" } - if metadata.isMovie { + if metadata.isAudioOrVideo { playerToolBar = Bundle.main.loadNibNamed("NCPlayerToolBar", owner: self, options: nil)?.first as? NCPlayerToolBar if let playerToolBar = playerToolBar { @@ -146,7 +146,7 @@ class NCViewerMedia: UIViewController { viewerMediaPage?.clearCommandCenter() - if metadata.isMovie { + if metadata.isAudioOrVideo { if let ncplayer = self.ncplayer { if ncplayer.url == nil { NCActivityIndicator.shared.startActivity(backgroundView: self.view, style: .medium) diff --git a/iOSClient/Viewer/NCViewerMedia/NCViewerMediaPage.swift b/iOSClient/Viewer/NCViewerMedia/NCViewerMediaPage.swift index 6b3f6fe8d6..f54ae97800 100644 --- a/iOSClient/Viewer/NCViewerMedia/NCViewerMediaPage.swift +++ b/iOSClient/Viewer/NCViewerMedia/NCViewerMediaPage.swift @@ -233,7 +233,7 @@ class NCViewerMediaPage: UIViewController { progressView.isHidden = false } - if metadata.isMovie { + if metadata.isAudioOrVideo { NCUtility.shared.colorNavigationController(navigationController, backgroundColor: .black, titleColor: .label, tintColor: nil, withoutShadow: false) currentViewController.playerToolBar?.show() view.backgroundColor = .black @@ -250,7 +250,7 @@ class NCViewerMediaPage: UIViewController { hideStatusBar = true progressView.isHidden = true - if metadata.isMovie { + if metadata.isVideo { currentViewController.playerToolBar?.hide() } @@ -282,7 +282,7 @@ class NCViewerMediaPage: UIViewController { @objc func autoHide() { let metadata = currentViewController.metadata - if metadata.isMovie, viewerMediaScreenMode == .normal { + if metadata.isVideo, viewerMediaScreenMode == .normal { changeScreenMode(mode: .full) } } @@ -301,7 +301,7 @@ class NCViewerMediaPage: UIViewController { let metadata = currentViewController.metadata if metadata.ocId == ocId, - metadata.isMovie, + metadata.isAudioOrVideo, CCUtility.fileProviderStorageExists(metadata), let ncplayer = currentViewController.ncplayer { let url = URL(fileURLWithPath: CCUtility.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileNameView)!) From 30881f2c99ecc7fc6163191749cbc6bb2e39e6a8 Mon Sep 17 00:00:00 2001 From: Milen Pivchev Date: Thu, 6 Jul 2023 18:17:37 +0200 Subject: [PATCH 22/26] Increase compression of rotated/cropped image Signed-off-by: Milen Pivchev --- .../NCViewerQuickLook/NCViewerQuickLook.swift | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/iOSClient/Viewer/NCViewerQuickLook/NCViewerQuickLook.swift b/iOSClient/Viewer/NCViewerQuickLook/NCViewerQuickLook.swift index a672ac4d75..3d881586ae 100644 --- a/iOSClient/Viewer/NCViewerQuickLook/NCViewerQuickLook.swift +++ b/iOSClient/Viewer/NCViewerQuickLook/NCViewerQuickLook.swift @@ -76,7 +76,7 @@ private var hasChangesQuickLook: Bool = false } if let metadata = metadata, metadata.isImage { - let buttonDone = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(dismission)) + let buttonDone = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(dismiss)) let buttonCrop = UIBarButtonItem(image: UIImage(systemName: "crop"), style: .plain, target: self, action: #selector(crop)) navigationItem.leftBarButtonItems = [buttonDone, buttonCrop] startTimer(navigationItem: navigationItem) @@ -94,7 +94,7 @@ private var hasChangesQuickLook: Bool = false super.viewDidDisappear(animated) if let metadata = metadata, metadata.classFile != NKCommon.TypeClassFile.image.rawValue { - dismission() + dismiss() } } @@ -116,7 +116,7 @@ private var hasChangesQuickLook: Bool = false }) } - @objc func dismission() { + @objc func dismiss() { guard isEditingEnabled, hasChangesQuickLook, let metadata = metadata else { dismiss(animated: true) @@ -256,12 +256,15 @@ extension NCViewerQuickLook: CropViewControllerDelegate { func cropViewControllerDidCrop(_ cropViewController: Mantis.CropViewController, cropped: UIImage, transformation: Mantis.Transformation, cropInfo: Mantis.CropInfo) { cropViewController.dismiss(animated: true) - guard let data = cropped.jpegData(compressionQuality: 1) else { return } + guard let data = cropped.jpegData(compressionQuality: 0.9) else { return } + do { try data.write(to: self.url) hasChangesQuickLook = true reloadData() - } catch { } + } catch { + print(error) + } } func cropViewControllerDidCancel(_ cropViewController: Mantis.CropViewController, original: UIImage) { From fb694a76347fce2635d24b506913ba55db56b603 Mon Sep 17 00:00:00 2001 From: Milen Pivchev Date: Thu, 6 Jul 2023 18:31:44 +0200 Subject: [PATCH 23/26] Refactor Signed-off-by: Milen Pivchev --- iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayer.swift | 2 -- iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayerToolBar.swift | 2 -- 2 files changed, 4 deletions(-) diff --git a/iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayer.swift b/iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayer.swift index 085156ced0..beaa115fb5 100644 --- a/iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayer.swift +++ b/iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayer.swift @@ -242,7 +242,6 @@ extension NCPlayer: VLCMediaPlayerDelegate { activityIndicator.stopAnimating() } - print (aNotification) switch player.state { case .stopped: playerToolBar?.playButtonPlay() @@ -307,7 +306,6 @@ extension NCPlayer: VLCMediaPlayerDelegate { } func mediaPlayerTimeChanged(_ aNotification: Notification) { - print(player.position) activityIndicator.stopAnimating() playerToolBar?.update() } diff --git a/iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayerToolBar.swift b/iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayerToolBar.swift index 1295dd69e7..4fe57ef714 100644 --- a/iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayerToolBar.swift +++ b/iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayerToolBar.swift @@ -161,8 +161,6 @@ class NCPlayerToolBar: UIView { let position = ncplayer.player.position let positionInSecond = position * Float(length / 1000) - print(position) - // SLIDER & TIME if playbackSliderEvent == .ended { playbackSlider.value = position From c62b1a82f9e28e4c2e09d40729441af74548454e Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Fri, 7 Jul 2023 02:29:53 +0000 Subject: [PATCH 24/26] Fix(l10n): Update translations from Transifex Signed-off-by: Nextcloud bot --- .../ar.lproj/Localizable.strings | Bin 118804 -> 118734 bytes .../gl.lproj/Localizable.strings | Bin 130090 -> 130082 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/iOSClient/Supporting Files/ar.lproj/Localizable.strings b/iOSClient/Supporting Files/ar.lproj/Localizable.strings index b3f5d0e03fb63a0d017506128753d579a65e8c47..531f8aa19ea1af140ef0aca08c7ccff8b0155871 100644 GIT binary patch delta 579 zcmYjOJxjw-6nzimR#ZfkR*FSSM4CqXMbxx9NZTZ>?V!+A+;wpmMVy3AN(#?Gu;5Z1 zN}-^etKi@d5EmymssF%p)A~V%+}v~SIVblvnt_+=K5aCuhSw+M<-9&0s5cm07>DA1JlVMmrTqS`pW8}ErSpk@_IM3 zUH5i7GMb>YpTHs4`|3@3_xfa2ryLae&Ia@xDA+WH4r>{H&K$C>qLYC>CuBc^=BWq< z&vIrcD<>vX-fn~D3;;~wpZpUoVK^!V=F>%du~`Q1B-UWUEKByU$O->l+TR)bIe=s6 zaGm$%%|Q}}N)WPv8o++`<3fxLIKVQkVZuheC$>ZlW;T%i-b|6kcg4R*)sLcybul6| zby}B}*E}0nk98U9K0keSg9|uR3M4+2K^EzdEvWaL46D}-IWc1a;S;kRb2xMv{5%!B qgO9Mr-6h)er}=ahT13q&O@fs|DDSEfQE!KGSh>eC^l*11_iNvYhG-)I delta 685 zcmah{u}T9$5S_(HEQMepu~@`L2qK6eRzd{9Mom(t+2robN-ha^7bOr#;~zv=vC%GC zD1w6c1vcVmSO|iDpl@~!o*>APyWN>LZ{C~9%X#+XB71v!IZ>r~^LZm?@;H#BBhu8w zBPk|Dhvegwn8#<4&o!t`34Rig7T)8^f~yRWiYP=?LIn#7@a`ZQP;dL|Q;;V4MzZBhqrR z3Pt;1kb{)X8V5k5k!DgwJw!ajoL3Jw7S63X*0A5S0Eg}%h}k<6xiw8YR0j9%FAEh|P!Qg* z(w(6dTE@+@LyED>r_%j!V=FWK*v?EUXzQ5kqL?+uBe8DYiekaMj>PmT?}tb0TRt8m ekB?d0PI&m4lAS5^a3_UGnmNsJ#36=Ujcu(5gGsh From a75f1a71e29fd8c57159b3dc205f53d97ff964eb Mon Sep 17 00:00:00 2001 From: Milen Pivchev Date: Fri, 7 Jul 2023 10:50:30 +0200 Subject: [PATCH 25/26] Rename Signed-off-by: Milen Pivchev --- .../Viewer/NCViewerQuickLook/NCViewerQuickLook.swift | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/iOSClient/Viewer/NCViewerQuickLook/NCViewerQuickLook.swift b/iOSClient/Viewer/NCViewerQuickLook/NCViewerQuickLook.swift index 3d881586ae..761b0ccaa7 100644 --- a/iOSClient/Viewer/NCViewerQuickLook/NCViewerQuickLook.swift +++ b/iOSClient/Viewer/NCViewerQuickLook/NCViewerQuickLook.swift @@ -76,7 +76,7 @@ private var hasChangesQuickLook: Bool = false } if let metadata = metadata, metadata.isImage { - let buttonDone = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(dismiss)) + let buttonDone = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(dismissView)) let buttonCrop = UIBarButtonItem(image: UIImage(systemName: "crop"), style: .plain, target: self, action: #selector(crop)) navigationItem.leftBarButtonItems = [buttonDone, buttonCrop] startTimer(navigationItem: navigationItem) @@ -94,7 +94,7 @@ private var hasChangesQuickLook: Bool = false super.viewDidDisappear(animated) if let metadata = metadata, metadata.classFile != NKCommon.TypeClassFile.image.rawValue { - dismiss() + dismissView() } } @@ -116,7 +116,7 @@ private var hasChangesQuickLook: Bool = false }) } - @objc func dismiss() { + @objc private func dismissView() { guard isEditingEnabled, hasChangesQuickLook, let metadata = metadata else { dismiss(animated: true) @@ -152,7 +152,7 @@ private var hasChangesQuickLook: Bool = false } } - @objc func crop() { + @objc private func crop() { guard let image = UIImage(contentsOfFile: url.path) else { return } From 0152f6a92973bc286d89169ea4f66f37f553e2e7 Mon Sep 17 00:00:00 2001 From: Marino Faggiana Date: Fri, 7 Jul 2023 12:04:43 +0200 Subject: [PATCH 26/26] build 1 Signed-off-by: Marino Faggiana --- Nextcloud.xcodeproj/project.pbxproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj index 1b7ee9de11..bdf7f9c928 100644 --- a/Nextcloud.xcodeproj/project.pbxproj +++ b/Nextcloud.xcodeproj/project.pbxproj @@ -4566,7 +4566,7 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0; + CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = NKUJUXUJ3B; ENABLE_STRICT_OBJC_MSGSEND = YES; @@ -4631,7 +4631,7 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0; + CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = NKUJUXUJ3B; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES;