From 2025fd263834dfcbbab39f12f8849d038aa3e0b9 Mon Sep 17 00:00:00 2001 From: Morgan Pretty Date: Mon, 8 Aug 2022 13:56:11 +1000 Subject: [PATCH] Fixed a crash and the SOGS deletion logic to continue to support the deprecated approach for the time being Fixed an issue where the app could crash when entering the background during migration Added the old 'messageServerIdsToRemove' code back for the time being to support the deprecated deletion behaviour --- Session/Meta/AppDelegate.swift | 2 +- .../Open Groups/OpenGroupManager.swift | 8 ++++++-- .../Pollers/ClosedGroupPoller.swift | 18 ++++++------------ 3 files changed, 13 insertions(+), 15 deletions(-) diff --git a/Session/Meta/AppDelegate.swift b/Session/Meta/AppDelegate.swift index affde2523..9e79ae3cf 100644 --- a/Session/Meta/AppDelegate.swift +++ b/Session/Meta/AppDelegate.swift @@ -521,7 +521,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD poller.stop() } - ClosedGroupPoller.shared.stop() + ClosedGroupPoller.shared.stopAllPollers() OpenGroupManager.shared.stopPolling() } diff --git a/SessionMessagingKit/Open Groups/OpenGroupManager.swift b/SessionMessagingKit/Open Groups/OpenGroupManager.swift index ea750d7cd..0c73af2cc 100644 --- a/SessionMessagingKit/Open Groups/OpenGroupManager.swift +++ b/SessionMessagingKit/Open Groups/OpenGroupManager.swift @@ -501,7 +501,7 @@ public final class OpenGroupManager: NSObject { let sortedMessages: [OpenGroupAPI.Message] = messages .filter { $0.deleted != true } .sorted { lhs, rhs in lhs.id < rhs.id } - let messageServerIdsToRemove: [Int64] = messages + var messageServerIdsToRemove: [Int64] = messages .filter { $0.deleted == true } .map { $0.id } let seqNo: Int64? = sortedMessages.map { $0.seqNo }.max() @@ -518,7 +518,11 @@ public final class OpenGroupManager: NSObject { guard let base64EncodedString: String = message.base64EncodedData, let data = Data(base64Encoded: base64EncodedString) - else { return } + else { + // FIXME: Once the SOGS Emoji Reacts update is live we should remove this line (deprecated by the `deleted` flag) + messageServerIdsToRemove.append(Int64(message.id)) + return + } do { let processedMessage: ProcessedMessage? = try Message.processReceivedOpenGroupMessage( diff --git a/SessionMessagingKit/Sending & Receiving/Pollers/ClosedGroupPoller.swift b/SessionMessagingKit/Sending & Receiving/Pollers/ClosedGroupPoller.swift index ad5c8cda5..e87643a1b 100644 --- a/SessionMessagingKit/Sending & Receiving/Pollers/ClosedGroupPoller.swift +++ b/SessionMessagingKit/Sending & Receiving/Pollers/ClosedGroupPoller.swift @@ -65,18 +65,12 @@ public final class ClosedGroupPoller { setUpPolling(for: groupPublicKey) } - @objc public func stop() { - Storage.shared - .read { db in - try ClosedGroup - .select(.threadId) - .asRequest(of: String.self) - .fetchAll(db) - } - .defaulting(to: []) - .forEach { [weak self] groupPublicKey in - self?.stopPolling(for: groupPublicKey) - } + public func stopAllPollers() { + let pollers: [String] = Array(isPolling.wrappedValue.keys) + + pollers.forEach { groupPublicKey in + self.stopPolling(for: groupPublicKey) + } } public func stopPolling(for groupPublicKey: String) {