diff --git a/Signal/src/Jobs/SessionResetJob.swift b/Signal/src/Jobs/SessionResetJob.swift index 8cd368ad0..9cb4a2e1e 100644 --- a/Signal/src/Jobs/SessionResetJob.swift +++ b/Signal/src/Jobs/SessionResetJob.swift @@ -112,7 +112,7 @@ public class SessionResetOperation: OWSOperation, DurableOperation { * We don't want to delete the session. Ref: SignalServiceKit/Loki/Docs/SessionReset.md * ================ if firstAttempt { - self.dbConnection.readWrite { transaction in + try! Storage.writeSync { transaction in Logger.info("deleting sessions for recipient: \(self.recipientId)") self.primaryStorage.deleteAllSessions(forContact: self.recipientId, protocolContext: transaction) } @@ -127,7 +127,7 @@ public class SessionResetOperation: OWSOperation, DurableOperation { return self.messageSender.sendPromise(message: endSessionMessage) }.done { Logger.info("successfully sent EndSessionMessage.") - self.dbConnection.readWrite { transaction in + try! Storage.writeSync { transaction in // Archive the just-created session since the recipient should delete their corresponding // session upon receiving and decrypting our EndSession message. // Otherwise if we send another message before them, they wont have the session to decrypt it. @@ -160,7 +160,7 @@ public class SessionResetOperation: OWSOperation, DurableOperation { } override public func didSucceed() { - self.dbConnection.readWrite { transaction in + try! Storage.writeSync { transaction in self.durableOperationDelegate?.durableOperationDidSucceed(self, transaction: transaction) } } @@ -168,7 +168,7 @@ public class SessionResetOperation: OWSOperation, DurableOperation { override public func didReportError(_ error: Error) { Logger.debug("remainingRetries: \(self.remainingRetries)") - self.dbConnection.readWrite { transaction in + try! Storage.writeSync { transaction in self.durableOperationDelegate?.durableOperation(self, didReportError: error, transaction: transaction) } } @@ -192,7 +192,7 @@ public class SessionResetOperation: OWSOperation, DurableOperation { override public func didFail(error: Error) { Logger.error("failed to send EndSessionMessage with error: \(error.localizedDescription)") - self.dbConnection.readWrite { transaction in + try! Storage.writeSync { transaction in self.durableOperationDelegate?.durableOperation(self, didFailWithError: error, transaction: transaction) // Even though this is the failure handler - which means probably the recipient didn't receive the message diff --git a/Signal/src/Loki/Components/ConversationTitleView.swift b/Signal/src/Loki/Components/ConversationTitleView.swift index f1bd8d8ef..79f3f6d35 100644 --- a/Signal/src/Loki/Components/ConversationTitleView.swift +++ b/Signal/src/Loki/Components/ConversationTitleView.swift @@ -180,7 +180,7 @@ final class ConversationTitleView : UIView { if thread.groupModel.groupType == .closedGroup { userCount = GroupUtilities.getClosedGroupMemberCount(thread) } else if thread.groupModel.groupType == .openGroup { - storage.dbReadConnection.readWrite { transaction in + storage.dbReadConnection.read { transaction in if let publicChat = LokiDatabaseUtilities.getPublicChat(for: self.thread.uniqueId!, in: transaction) { userCount = storage.getUserCount(for: publicChat, in: transaction) } diff --git a/Signal/src/Loki/Shelved/LokiRSSFeedPoller.swift b/Signal/src/Loki/Shelved/LokiRSSFeedPoller.swift index f29e3a884..a0f15ea02 100644 --- a/Signal/src/Loki/Shelved/LokiRSSFeedPoller.swift +++ b/Signal/src/Loki/Shelved/LokiRSSFeedPoller.swift @@ -63,7 +63,7 @@ public final class LokiRSSFeedPoller : NSObject { envelope.setSource(NSLocalizedString("Loki", comment: "")) envelope.setSourceDevice(OWSDevicePrimaryDeviceId) envelope.setContent(try! content.build().serializedData()) - try! Storage.syncWrite { transaction in + try! Storage.writeSync { transaction in SSKEnvironment.shared.messageManager.throws_processEnvelope(try! envelope.build(), plaintextData: try! content.build().serializedData(), wasReceivedByUD: false, transaction: transaction, serverID: 0) } } diff --git a/Signal/src/Loki/View Controllers/DeviceLinkingModal.swift b/Signal/src/Loki/View Controllers/DeviceLinkingModal.swift index 5aa389ca1..46fb79ec4 100644 --- a/Signal/src/Loki/View Controllers/DeviceLinkingModal.swift +++ b/Signal/src/Loki/View Controllers/DeviceLinkingModal.swift @@ -186,7 +186,7 @@ final class DeviceLinkingModal : Modal, DeviceLinkingSessionDelegate { SSKEnvironment.shared.messageSender.send(linkingAuthorizationMessage, success: { let storage = OWSPrimaryStorage.shared() let slaveHexEncodedPublicKey = deviceLink.slave.hexEncodedPublicKey - try! Storage.syncWrite { transaction in + try! Storage.writeSync { transaction in let thread = TSContactThread.getOrCreateThread(withContactId: slaveHexEncodedPublicKey, transaction: transaction) thread.save(with: transaction) } @@ -196,7 +196,7 @@ final class DeviceLinkingModal : Modal, DeviceLinkingSessionDelegate { let _ = SSKEnvironment.shared.syncManager.syncAllContacts() } let _ = SSKEnvironment.shared.syncManager.syncAllOpenGroups() - try! Storage.syncWrite { transaction in + try! Storage.writeSync { transaction in storage.setFriendRequestStatus(.friends, for: slaveHexEncodedPublicKey, transaction: transaction) } DispatchQueue.main.async { @@ -251,7 +251,7 @@ final class DeviceLinkingModal : Modal, DeviceLinkingSessionDelegate { session.markLinkingRequestAsProcessed() // Only relevant in master mode delegate?.handleDeviceLinkingModalDismissed() // Only relevant in slave mode if let deviceLink = deviceLink { - try! Storage.syncWrite { transaction in + try! Storage.writeSync { transaction in OWSPrimaryStorage.shared().removePreKeyBundle(forContact: deviceLink.slave.hexEncodedPublicKey, transaction: transaction) } } diff --git a/Signal/src/Loki/View Controllers/DeviceLinksVC.swift b/Signal/src/Loki/View Controllers/DeviceLinksVC.swift index 85554b380..3f7960c03 100644 --- a/Signal/src/Loki/View Controllers/DeviceLinksVC.swift +++ b/Signal/src/Loki/View Controllers/DeviceLinksVC.swift @@ -146,14 +146,14 @@ final class DeviceLinksVC : BaseVC, UITableViewDataSource, UITableViewDelegate, let unlinkDeviceMessage = UnlinkDeviceMessage(thread: thread) SSKEnvironment.shared.messageSender.send(unlinkDeviceMessage, success: { let storage = OWSPrimaryStorage.shared() - try! Storage.syncWrite { transaction in + try! Storage.writeSync { transaction in storage.removePreKeyBundle(forContact: linkedDeviceHexEncodedPublicKey, transaction: transaction) storage.deleteAllSessions(forContact: linkedDeviceHexEncodedPublicKey, protocolContext: transaction) } }, failure: { _ in print("[Loki] Failed to send unlink device message.") let storage = OWSPrimaryStorage.shared() - try! Storage.syncWrite { transaction in + try! Storage.writeSync { transaction in storage.removePreKeyBundle(forContact: linkedDeviceHexEncodedPublicKey, transaction: transaction) storage.deleteAllSessions(forContact: linkedDeviceHexEncodedPublicKey, protocolContext: transaction) } diff --git a/Signal/src/Loki/View Controllers/HomeVC.swift b/Signal/src/Loki/View Controllers/HomeVC.swift index 28138f6c3..a8e502017 100644 --- a/Signal/src/Loki/View Controllers/HomeVC.swift +++ b/Signal/src/Loki/View Controllers/HomeVC.swift @@ -369,7 +369,7 @@ final class HomeVC : BaseVC, UITableViewDataSource, UITableViewDelegate, UIScrol let alert = UIAlertController(title: NSLocalizedString("CONVERSATION_DELETE_CONFIRMATION_ALERT_TITLE", comment: ""), message: NSLocalizedString("CONVERSATION_DELETE_CONFIRMATION_ALERT_MESSAGE", comment: ""), preferredStyle: .alert) alert.addAction(UIAlertAction(title: NSLocalizedString("TXT_DELETE_TITLE", comment: ""), style: .destructive) { _ in guard let self = self else { return } - self.editingDatabaseConnection.readWrite { transaction in + try! Storage.writeSync { transaction in if let publicChat = publicChat { var messageIDs: Set = [] thread.enumerateInteractions(with: transaction) { interaction, _ in diff --git a/Signal/src/Loki/View Controllers/JoinPublicChatVC.swift b/Signal/src/Loki/View Controllers/JoinPublicChatVC.swift index 9b0ad0188..ae09f4cde 100644 --- a/Signal/src/Loki/View Controllers/JoinPublicChatVC.swift +++ b/Signal/src/Loki/View Controllers/JoinPublicChatVC.swift @@ -135,7 +135,7 @@ final class JoinPublicChatVC : BaseVC, UIPageViewControllerDataSource, UIPageVie let urlAsString = url.absoluteString let displayName = OWSProfileManager.shared().localProfileName() // TODO: Profile picture & profile key - try! Storage.syncWrite { transaction in + try! Storage.writeSync { transaction in transaction.removeObject(forKey: "\(urlAsString).\(channelID)", inCollection: LokiPublicChatAPI.lastMessageServerIDCollection) transaction.removeObject(forKey: "\(urlAsString).\(channelID)", inCollection: LokiPublicChatAPI.lastDeletionServerIDCollection) } diff --git a/Signal/src/Loki/View Controllers/NewClosedGroupVC.swift b/Signal/src/Loki/View Controllers/NewClosedGroupVC.swift index ad4f87698..4dbf6411b 100644 --- a/Signal/src/Loki/View Controllers/NewClosedGroupVC.swift +++ b/Signal/src/Loki/View Controllers/NewClosedGroupVC.swift @@ -158,7 +158,7 @@ final class NewClosedGroupVC : BaseVC, UITableViewDataSource, UITableViewDelegat let userHexEncodedPublicKey = getUserHexEncodedPublicKey() let storage = OWSPrimaryStorage.shared() var masterHexEncodedPublicKey = "" - storage.dbReadConnection.readWrite { transaction in + storage.dbReadConnection.read { transaction in masterHexEncodedPublicKey = storage.getMasterHexEncodedPublicKey(for: userHexEncodedPublicKey, in: transaction) ?? userHexEncodedPublicKey } let members = selectedContacts + [ masterHexEncodedPublicKey ] diff --git a/Signal/src/UserInterface/Notifications/AppNotifications.swift b/Signal/src/UserInterface/Notifications/AppNotifications.swift index 5572c7801..525e801f9 100644 --- a/Signal/src/UserInterface/Notifications/AppNotifications.swift +++ b/Signal/src/UserInterface/Notifications/AppNotifications.swift @@ -659,7 +659,7 @@ class NotificationActionHandler { } private func markAsRead(thread: TSThread) -> Promise { - return dbConnection.readWritePromise { transaction in + return Storage.write { transaction in thread.markAllAsRead(with: transaction) } } diff --git a/Signal/src/ViewControllers/ExperienceUpgradesPageViewController.swift b/Signal/src/ViewControllers/ExperienceUpgradesPageViewController.swift index fda60e0ab..9eba6c0f1 100644 --- a/Signal/src/ViewControllers/ExperienceUpgradesPageViewController.swift +++ b/Signal/src/ViewControllers/ExperienceUpgradesPageViewController.swift @@ -889,7 +889,7 @@ public class ExperienceUpgradesPageViewController: OWSViewController, UIPageView @objc public override func dismiss(animated flag: Bool, completion: (() -> Void)? = nil) { // Blocking write before dismiss, to be sure they're marked as complete // before HomeView.didAppear is re-fired. - self.editingDBConnection.readWrite { transaction in + try! Storage.writeSync { transaction in Logger.info("marking all upgrades as seen.") ExperienceUpgradeFinder.shared.markAllAsSeen(transaction: transaction) } diff --git a/SignalMessaging/Loki/Migrations/LK001UpdateFriendRequestStatusStorage.swift b/SignalMessaging/Loki/Migrations/LK001UpdateFriendRequestStatusStorage.swift index 4878ad16d..c4814a518 100644 --- a/SignalMessaging/Loki/Migrations/LK001UpdateFriendRequestStatusStorage.swift +++ b/SignalMessaging/Loki/Migrations/LK001UpdateFriendRequestStatusStorage.swift @@ -19,7 +19,7 @@ public class LK001UpdateFriendRequestStatusStorage : OWSDatabaseMigration { private func doMigrationAsync(completion: @escaping OWSDatabaseMigrationCompletion) { DispatchQueue.global().async { - self.dbReadWriteConnection().readWrite { transaction in + try! Storage.writeSync { transaction in var threads: [TSContactThread] = [] TSContactThread.enumerateCollectionObjects(with: transaction) { object, _ in guard let thread = object as? TSContactThread else { return } diff --git a/SignalMessaging/environment/migrations/OWS110SortIdMigration.swift b/SignalMessaging/environment/migrations/OWS110SortIdMigration.swift index 3d9df150c..a433860f1 100644 --- a/SignalMessaging/environment/migrations/OWS110SortIdMigration.swift +++ b/SignalMessaging/environment/migrations/OWS110SortIdMigration.swift @@ -25,7 +25,7 @@ public class OWS110SortIdMigration: OWSDatabaseMigration { private func doMigration(completion: @escaping OWSDatabaseMigrationCompletion) { // TODO batch this? - self.dbReadWriteConnection().readWrite { transaction in + try! Storage.writeSync { transaction in var archivedThreads: [TSThread] = [] diff --git a/SignalMessaging/environment/migrations/OWS111UDAttributesMigration.swift b/SignalMessaging/environment/migrations/OWS111UDAttributesMigration.swift index 6556cfe6c..631159ff8 100644 --- a/SignalMessaging/environment/migrations/OWS111UDAttributesMigration.swift +++ b/SignalMessaging/environment/migrations/OWS111UDAttributesMigration.swift @@ -35,7 +35,7 @@ public class OWS111UDAttributesMigration: OWSDatabaseMigration { private func doMigration() { tsAccountManager.updateAccountAttributes().retainUntilComplete() - self.dbReadWriteConnection().readWrite { transaction in + try! Storage.writeSync { transaction in self.save(with: transaction) } } diff --git a/SignalMessaging/environment/migrations/OWS112TypingIndicatorsMigration.swift b/SignalMessaging/environment/migrations/OWS112TypingIndicatorsMigration.swift index 026a3d663..671c5c3ae 100644 --- a/SignalMessaging/environment/migrations/OWS112TypingIndicatorsMigration.swift +++ b/SignalMessaging/environment/migrations/OWS112TypingIndicatorsMigration.swift @@ -39,7 +39,7 @@ public class OWS112TypingIndicatorsMigration: OWSDatabaseMigration { self.typingIndicators.setTypingIndicatorsEnabled(value: false) DispatchQueue.global().async { - self.dbReadWriteConnection().readWrite { transaction in + try! Storage.writeSync { transaction in self.save(with: transaction) } diff --git a/SignalMessaging/environment/migrations/OWS113MultiAttachmentMediaMessages.swift b/SignalMessaging/environment/migrations/OWS113MultiAttachmentMediaMessages.swift index 6d6cc288b..601a1d54d 100644 --- a/SignalMessaging/environment/migrations/OWS113MultiAttachmentMediaMessages.swift +++ b/SignalMessaging/environment/migrations/OWS113MultiAttachmentMediaMessages.swift @@ -53,7 +53,7 @@ public class OWS113MultiAttachmentMediaMessages: OWSDatabaseMigration { } } } - self.dbReadWriteConnection().readWrite { transaction in + try! Storage.writeSync { transaction in for (attachmentId, messageId) in legacyAttachments { autoreleasepool { guard let attachment = TSAttachment.fetch(uniqueId: attachmentId, transaction: transaction) else { diff --git a/SignalMessaging/environment/migrations/OWS114RemoveDynamicInteractions.swift b/SignalMessaging/environment/migrations/OWS114RemoveDynamicInteractions.swift index e7b462fd7..a953d4958 100644 --- a/SignalMessaging/environment/migrations/OWS114RemoveDynamicInteractions.swift +++ b/SignalMessaging/environment/migrations/OWS114RemoveDynamicInteractions.swift @@ -30,7 +30,7 @@ public class OWS114RemoveDynamicInteractions: OWSDatabaseMigration { private func doMigrationAsync(completion : @escaping OWSDatabaseMigrationCompletion) { DispatchQueue.global().async { - self.dbReadWriteConnection().readWrite { transaction in + try! Storage.writeSync { transaction in guard let dbView = TSDatabaseView.threadSpecialMessagesDatabaseView(transaction) as? YapDatabaseViewTransaction else { owsFailDebug("Couldn't load db view.") return diff --git a/SignalServiceKit/src/Loki/API/LokiAPI+SwarmAPI.swift b/SignalServiceKit/src/Loki/API/LokiAPI+SwarmAPI.swift index 800758a59..060c189a3 100644 --- a/SignalServiceKit/src/Loki/API/LokiAPI+SwarmAPI.swift +++ b/SignalServiceKit/src/Loki/API/LokiAPI+SwarmAPI.swift @@ -53,7 +53,7 @@ public extension LokiAPI { } }.done(on: DispatchQueue.global()) { snode in seal.fulfill(snode) - try! Storage.syncWrite { transaction in + try! Storage.writeSync { transaction in print("[Loki] Persisting snode pool to database.") storage.setSnodePool(LokiAPI.snodePool, in: transaction) } @@ -87,7 +87,7 @@ public extension LokiAPI { parseTargets(from: $0) }.get { swarm in swarmCache[hexEncodedPublicKey] = swarm - try! Storage.syncWrite { transaction in + try! Storage.writeSync { transaction in storage.setSwarm(swarm, for: hexEncodedPublicKey, in: transaction) } } @@ -101,7 +101,7 @@ public extension LokiAPI { internal static func dropSnodeFromSnodePool(_ target: LokiAPITarget) { LokiAPI.snodePool.remove(target) - try! Storage.syncWrite { transaction in + try! Storage.writeSync { transaction in storage.dropSnodeFromSnodePool(target, in: transaction) } } @@ -111,7 +111,7 @@ public extension LokiAPI { if var swarm = swarm, let index = swarm.firstIndex(of: target) { swarm.remove(at: index) LokiAPI.swarmCache[hexEncodedPublicKey] = swarm - try! Storage.syncWrite { transaction in + try! Storage.writeSync { transaction in storage.setSwarm(swarm, for: hexEncodedPublicKey, in: transaction) } } @@ -120,7 +120,7 @@ public extension LokiAPI { // MARK: Public API @objc public static func clearSnodePool() { snodePool.removeAll() - try! Storage.syncWrite { transaction in + try! Storage.writeSync { transaction in storage.clearSnodePool(in: transaction) } } diff --git a/SignalServiceKit/src/Loki/API/LokiAPI.swift b/SignalServiceKit/src/Loki/API/LokiAPI.swift index e8cdd58e9..5f6aff3e7 100644 --- a/SignalServiceKit/src/Loki/API/LokiAPI.swift +++ b/SignalServiceKit/src/Loki/API/LokiAPI.swift @@ -194,14 +194,14 @@ public final class LokiAPI : NSObject { var result: String? = nil // Uses a read/write connection because getting the last message hash value also removes expired messages as needed // TODO: This shouldn't be the case; a getter shouldn't have an unexpected side effect - try! Storage.syncWrite { transaction in + try! Storage.writeSync { transaction in result = storage.getLastMessageHash(forSnode: target.address, transaction: transaction) } return result } private static func setLastMessageHashValue(for target: LokiAPITarget, hashValue: String, expirationDate: UInt64) { - try! Storage.syncWrite { transaction in + try! Storage.writeSync { transaction in storage.setLastMessageHash(forSnode: target.address, hash: hashValue, expiresAt: expirationDate, transaction: transaction) } } @@ -218,7 +218,7 @@ public final class LokiAPI : NSObject { } private static func setReceivedMessageHashValues(to receivedMessageHashValues: Set) { - try! Storage.syncWrite { transaction in + try! Storage.writeSync { transaction in transaction.setObject(receivedMessageHashValues, forKey: receivedMessageHashValuesKey, inCollection: receivedMessageHashValuesCollection) } } diff --git a/SignalServiceKit/src/Loki/API/LokiDotNetAPI.swift b/SignalServiceKit/src/Loki/API/LokiDotNetAPI.swift index 22cc15947..5210cbc60 100644 --- a/SignalServiceKit/src/Loki/API/LokiDotNetAPI.swift +++ b/SignalServiceKit/src/Loki/API/LokiDotNetAPI.swift @@ -38,7 +38,7 @@ public class LokiDotNetAPI : NSObject { return Promise.value(token) } else { return requestNewAuthToken(for: server).then(on: DispatchQueue.global()) { submitAuthToken($0, for: server) }.map(on: DispatchQueue.global()) { token in - try! Storage.syncWrite { transaction in + try! Storage.writeSync { transaction in setAuthToken(for: server, to: token, in: transaction) } return token @@ -51,7 +51,7 @@ public class LokiDotNetAPI : NSObject { } public static func clearAuthToken(for server: String) { - try! Storage.syncWrite { transaction in + try! Storage.writeSync { transaction in transaction.removeObject(forKey: server, inCollection: authTokenCollection) } } diff --git a/SignalServiceKit/src/Loki/API/Onion Requests/OnionRequestAPI.swift b/SignalServiceKit/src/Loki/API/Onion Requests/OnionRequestAPI.swift index 9ed5fb6f7..9e07c9c9e 100644 --- a/SignalServiceKit/src/Loki/API/Onion Requests/OnionRequestAPI.swift +++ b/SignalServiceKit/src/Loki/API/Onion Requests/OnionRequestAPI.swift @@ -123,7 +123,7 @@ public enum OnionRequestAPI { } }.map(on: LokiAPI.workQueue) { paths in OnionRequestAPI.paths = paths - try! Storage.syncWrite { transaction in + try! Storage.writeSync { transaction in print("[Loki] Persisting onion request paths to database.") OWSPrimaryStorage.shared().setOnionRequestPaths(paths, in: transaction) } @@ -163,7 +163,7 @@ public enum OnionRequestAPI { private static func dropAllPaths() { paths.removeAll() - try! Storage.syncWrite { transaction in + try! Storage.writeSync { transaction in OWSPrimaryStorage.shared().clearOnionRequestPaths(in: transaction) } } diff --git a/SignalServiceKit/src/Loki/API/Open Groups/LokiPublicChatAPI.swift b/SignalServiceKit/src/Loki/API/Open Groups/LokiPublicChatAPI.swift index 815002664..a6a7b8794 100644 --- a/SignalServiceKit/src/Loki/API/Open Groups/LokiPublicChatAPI.swift +++ b/SignalServiceKit/src/Loki/API/Open Groups/LokiPublicChatAPI.swift @@ -37,13 +37,13 @@ public final class LokiPublicChatAPI : LokiDotNetAPI { } private static func setLastMessageServerID(for group: UInt64, on server: String, to newValue: UInt64) { - try! Storage.syncWrite { transaction in + try! Storage.writeSync { transaction in transaction.setObject(newValue, forKey: "\(server).\(group)", inCollection: lastMessageServerIDCollection) } } private static func removeLastMessageServerID(for group: UInt64, on server: String) { - try! Storage.syncWrite { transaction in + try! Storage.writeSync { transaction in transaction.removeObject(forKey: "\(server).\(group)", inCollection: lastMessageServerIDCollection) } } @@ -57,13 +57,13 @@ public final class LokiPublicChatAPI : LokiDotNetAPI { } private static func setLastDeletionServerID(for group: UInt64, on server: String, to newValue: UInt64) { - try! Storage.syncWrite { transaction in + try! Storage.writeSync { transaction in transaction.setObject(newValue, forKey: "\(server).\(group)", inCollection: lastDeletionServerIDCollection) } } private static func removeLastDeletionServerID(for group: UInt64, on server: String) { - try! Storage.syncWrite { transaction in + try! Storage.writeSync { transaction in transaction.removeObject(forKey: "\(server).\(group)", inCollection: lastDeletionServerIDCollection) } } @@ -271,7 +271,7 @@ public final class LokiPublicChatAPI : LokiDotNetAPI { print("[Loki] Couldn't parse display names for users: \(hexEncodedPublicKeys) from: \(rawResponse).") throw LokiDotNetAPIError.parsingFailed } - try! Storage.syncWrite { transaction in + try! Storage.writeSync { transaction in data.forEach { data in guard let user = data["user"] as? JSON, let hexEncodedPublicKey = user["username"] as? String, let rawDisplayName = user["name"] as? String else { return } let endIndex = hexEncodedPublicKey.endIndex @@ -355,7 +355,7 @@ public final class LokiPublicChatAPI : LokiDotNetAPI { throw LokiDotNetAPIError.parsingFailed } let storage = OWSPrimaryStorage.shared() - try! Storage.syncWrite { transaction in + try! Storage.writeSync { transaction in storage.setUserCount(memberCount, forPublicChatWithID: "\(server).\(channel)", in: transaction) } // TODO: Use this to update open group names as needed diff --git a/SignalServiceKit/src/Loki/API/Open Groups/LokiPublicChatManager.swift b/SignalServiceKit/src/Loki/API/Open Groups/LokiPublicChatManager.swift index a04e20975..098f0853b 100644 --- a/SignalServiceKit/src/Loki/API/Open Groups/LokiPublicChatManager.swift +++ b/SignalServiceKit/src/Loki/API/Open Groups/LokiPublicChatManager.swift @@ -71,7 +71,7 @@ public final class LokiPublicChatManager : NSObject { let model = TSGroupModel(title: chat.displayName, memberIds: [userHexEncodedPublicKey!, chat.server], image: nil, groupId: LKGroupUtilities.getEncodedOpenGroupIDAsData(chat.id), groupType: .openGroup, adminIds: []) // Store the group chat mapping - try! Storage.syncWrite { transaction in + try! Storage.writeSync { transaction in let thread = TSGroupThread.getOrCreateThread(with: model, transaction: transaction) // Save the group chat @@ -118,7 +118,7 @@ public final class LokiPublicChatManager : NSObject { } // Remove the chat from the db - try! Storage.syncWrite { transaction in + try! Storage.writeSync { transaction in LokiDatabaseUtilities.removePublicChat(for: threadId, in: transaction) } diff --git a/SignalServiceKit/src/Loki/API/Open Groups/LokiPublicChatPoller.swift b/SignalServiceKit/src/Loki/API/Open Groups/LokiPublicChatPoller.swift index 9182ce78d..3e977185f 100644 --- a/SignalServiceKit/src/Loki/API/Open Groups/LokiPublicChatPoller.swift +++ b/SignalServiceKit/src/Loki/API/Open Groups/LokiPublicChatPoller.swift @@ -163,7 +163,7 @@ public final class LokiPublicChatPoller : NSObject { envelope.setSource(senderHexEncodedPublicKey) envelope.setSourceDevice(OWSDevicePrimaryDeviceId) envelope.setContent(try! content.build().serializedData()) - try! Storage.syncWrite { transaction in + try! Storage.writeSync { transaction in transaction.setObject(senderDisplayName, forKey: senderHexEncodedPublicKey, inCollection: publicChat.id) let messageServerID = message.serverID SSKEnvironment.shared.messageManager.throws_processEnvelope(try! envelope.build(), plaintextData: try! content.build().serializedData(), wasReceivedByUD: false, transaction: transaction, serverID: messageServerID ?? 0) @@ -213,7 +213,7 @@ public final class LokiPublicChatPoller : NSObject { private func pollForDeletedMessages() { let publicChat = self.publicChat let _ = LokiPublicChatAPI.getDeletedMessageServerIDs(for: publicChat.channel, on: publicChat.server).done(on: DispatchQueue.global()) { deletedMessageServerIDs in - try! Storage.syncWrite { transaction in + try! Storage.writeSync { transaction in let deletedMessageIDs = deletedMessageServerIDs.compactMap { OWSPrimaryStorage.shared().getIDForMessage(withServerID: UInt($0), in: transaction) } deletedMessageIDs.forEach { messageID in TSMessage.fetch(uniqueId: messageID)?.remove(with: transaction) diff --git a/SignalServiceKit/src/Loki/Database/Storage.swift b/SignalServiceKit/src/Loki/Database/Storage.swift index bf467b705..cf6a5ad8c 100644 --- a/SignalServiceKit/src/Loki/Database/Storage.swift +++ b/SignalServiceKit/src/Loki/Database/Storage.swift @@ -47,13 +47,13 @@ public final class Storage : NSObject { } /// Blocks the calling thread until the write has finished. - @objc(syncWriteWithBlock:error:) - public static func objc_syncWrite(with block: @escaping (YapDatabaseReadWriteTransaction) -> Void) throws { - try syncWrite(with: block) + @objc(writeSyncWithBlock:error:) + public static func objc_writeSync(with block: @escaping (YapDatabaseReadWriteTransaction) -> Void) throws { + try writeSync(with: block) } /// Blocks the calling thread until the write has finished. - public static func syncWrite(with block: @escaping (YapDatabaseReadWriteTransaction) -> Void) throws { + public static func writeSync(with block: @escaping (YapDatabaseReadWriteTransaction) -> Void) throws { try write(with: block).wait() } } diff --git a/SignalServiceKit/src/Loki/Protocol/Friend Requests/FriendRequestExpirationJob.swift b/SignalServiceKit/src/Loki/Protocol/Friend Requests/FriendRequestExpirationJob.swift index aac8c007e..78fff1784 100644 --- a/SignalServiceKit/src/Loki/Protocol/Friend Requests/FriendRequestExpirationJob.swift +++ b/SignalServiceKit/src/Loki/Protocol/Friend Requests/FriendRequestExpirationJob.swift @@ -66,7 +66,7 @@ public final class FriendRequestExpirationJob : NSObject { expireMessages() var nextExpirationTimestamp: UInt64? = nil - databaseConnection.readWrite { transaction in + try! Storage.writeSync { transaction in nextExpirationTimestamp = self.messageFinder.nextExpirationTimestamp(with: transaction) } @@ -108,7 +108,7 @@ public final class FriendRequestExpirationJob : NSObject { guard let strongSelf = self else { return } - strongSelf.databaseConnection.readWrite { transaction in + try! Storage.writeSync { transaction in strongSelf.messageFinder.enumurateMessagesPendingExpiration(with: { message in guard message.thread is TSContactThread else { return } diff --git a/SignalServiceKit/src/Messages/UD/OWSUDManager.swift b/SignalServiceKit/src/Messages/UD/OWSUDManager.swift index 9285fb0b4..000769c99 100644 --- a/SignalServiceKit/src/Messages/UD/OWSUDManager.swift +++ b/SignalServiceKit/src/Messages/UD/OWSUDManager.swift @@ -241,7 +241,7 @@ public class OWSUDManagerImpl: NSObject, OWSUDManager { } } - dbConnection.readWrite { (transaction) in + try! Storage.writeSync { (transaction) in let oldMode = self.unidentifiedAccessMode(forRecipientId: recipientId, isLocalNumber: isLocalNumber, transaction: transaction) transaction.setObject(mode.rawValue as Int, forKey: recipientId, inCollection: self.kUnidentifiedAccessCollection) diff --git a/SignalServiceKit/src/Network/MessageSenderJobQueue.swift b/SignalServiceKit/src/Network/MessageSenderJobQueue.swift index 33ebfd6bf..1ce758e63 100644 --- a/SignalServiceKit/src/Network/MessageSenderJobQueue.swift +++ b/SignalServiceKit/src/Network/MessageSenderJobQueue.swift @@ -51,11 +51,11 @@ public class MessageSenderJobQueue: NSObject, JobQueue { inMessage: mediaMessage, completionHandler: { error in if let error = error { - self.dbConnection.readWrite { transaction in + try! Storage.writeSync { transaction in mediaMessage.update(sendingError: error, transaction: transaction) } } else { - self.dbConnection.readWrite { transaction in + try! Storage.writeSync { transaction in self.add(message: mediaMessage, removeMessageAfterSending: isTemporaryAttachment, transaction: transaction) } } @@ -96,7 +96,7 @@ public class MessageSenderJobQueue: NSObject, JobQueue { /// Used when the user clears their database to cancel any outstanding jobs. @objc public func clearAllJobs() { - self.dbConnection.readWrite { transaction in + try! Storage.writeSync { transaction in let statuses: [SSKJobRecordStatus] = [ .unknown, .ready, .running, .permanentlyFailed ] var records: [SSKJobRecord] = [] statuses.forEach { @@ -196,7 +196,7 @@ public class MessageSenderOperation: OWSOperation, DurableOperation { } override public func didSucceed() { - self.dbConnection.readWrite { transaction in + try! Storage.writeSync { transaction in self.durableOperationDelegate?.durableOperationDidSucceed(self, transaction: transaction) if self.jobRecord.removeMessageAfterSending { self.message.remove(with: transaction) @@ -205,7 +205,7 @@ public class MessageSenderOperation: OWSOperation, DurableOperation { } override public func didReportError(_ error: Error) { - self.dbConnection.readWrite { transaction in + try! Storage.writeSync { transaction in self.durableOperationDelegate?.durableOperation(self, didReportError: error, transaction: transaction) } } @@ -227,7 +227,7 @@ public class MessageSenderOperation: OWSOperation, DurableOperation { } override public func didFail(error: Error) { - self.dbConnection.readWrite { transaction in + try! Storage.writeSync { transaction in self.durableOperationDelegate?.durableOperation(self, didFailWithError: error, transaction: transaction) self.message.update(sendingError: error, transaction: transaction) diff --git a/SignalServiceKit/src/Util/JobQueue.swift b/SignalServiceKit/src/Util/JobQueue.swift index f5ec89f8b..608001877 100644 --- a/SignalServiceKit/src/Util/JobQueue.swift +++ b/SignalServiceKit/src/Util/JobQueue.swift @@ -157,7 +157,7 @@ public extension JobQueue { return } - self.dbConnection.readWrite { transaction in + try! Storage.writeSync { transaction in guard let nextJob: JobRecordType = self.finder.getNextReady(label: self.jobRecordLabel, transaction: transaction) as? JobRecordType else { Logger.verbose("nothing left to enqueue") return @@ -197,7 +197,7 @@ public extension JobQueue { } public func restartOldJobs() { - self.dbConnection.readWrite { transaction in + try! Storage.writeSync { transaction in let runningRecords = self.finder.allRecords(label: self.jobRecordLabel, status: .running, transaction: transaction) Logger.info("marking old `running` JobRecords as ready: \(runningRecords.count)") for record in runningRecords {