From 3889c0af3958410b6fae83a80974e289a5b2690d Mon Sep 17 00:00:00 2001 From: nielsandriesse Date: Tue, 5 May 2020 11:24:28 +1000 Subject: [PATCH] Fix multi device open group syncing --- .../src/Loki/View Controllers/JoinPublicChatVC.swift | 2 ++ .../Loki/API/Open Groups/LokiPublicChatManager.swift | 2 +- .../Protocol/Sync Messages/SyncMessagesProtocol.swift | 10 ++++++---- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Signal/src/Loki/View Controllers/JoinPublicChatVC.swift b/Signal/src/Loki/View Controllers/JoinPublicChatVC.swift index 68e6160af..e65772e6b 100644 --- a/Signal/src/Loki/View Controllers/JoinPublicChatVC.swift +++ b/Signal/src/Loki/View Controllers/JoinPublicChatVC.swift @@ -152,6 +152,8 @@ final class JoinPublicChatVC : BaseVC, UIPageViewControllerDataSource, UIPageVie let _ = LokiPublicChatAPI.getMessages(for: channelID, on: urlAsString) let _ = LokiPublicChatAPI.setDisplayName(to: displayName, on: urlAsString) let _ = LokiPublicChatAPI.join(channelID, on: urlAsString) + let syncManager = SSKEnvironment.shared.syncManager + let _ = syncManager.syncAllOpenGroups() self?.presentingViewController!.dismiss(animated: true, completion: nil) } .catch(on: .main) { [weak self] _ in diff --git a/SignalServiceKit/src/Loki/API/Open Groups/LokiPublicChatManager.swift b/SignalServiceKit/src/Loki/API/Open Groups/LokiPublicChatManager.swift index 53bed33c7..1d1bf5e0e 100644 --- a/SignalServiceKit/src/Loki/API/Open Groups/LokiPublicChatManager.swift +++ b/SignalServiceKit/src/Loki/API/Open Groups/LokiPublicChatManager.swift @@ -125,7 +125,7 @@ public final class LokiPublicChatManager : NSObject { refreshChatsAndPollers() } - private func getChat(server: String, channel: UInt64) -> LokiPublicChat? { + public func getChat(server: String, channel: UInt64) -> LokiPublicChat? { return chats.values.first { chat in return chat.server == server && chat.channel == channel } diff --git a/SignalServiceKit/src/Loki/Protocol/Sync Messages/SyncMessagesProtocol.swift b/SignalServiceKit/src/Loki/Protocol/Sync Messages/SyncMessagesProtocol.swift index 684edb56e..9da85bb14 100644 --- a/SignalServiceKit/src/Loki/Protocol/Sync Messages/SyncMessagesProtocol.swift +++ b/SignalServiceKit/src/Loki/Protocol/Sync Messages/SyncMessagesProtocol.swift @@ -223,14 +223,16 @@ public final class SyncMessagesProtocol : NSObject { public static func handleOpenGroupSyncMessageIfNeeded(_ syncMessage: SSKProtoSyncMessage, wrappedIn envelope: SSKProtoEnvelope, using transaction: YapDatabaseReadTransaction) { // The envelope source is set during UD decryption let hexEncodedPublicKey = envelope.source! - guard let masterHexEncodedPublicKey = storage.getMasterHexEncodedPublicKey(for: getUserHexEncodedPublicKey(), in: transaction) else { return } - let wasSentByMasterDevice = (masterHexEncodedPublicKey == hexEncodedPublicKey) - guard wasSentByMasterDevice else { return } + let linkedDevices = LokiDatabaseUtilities.getLinkedDeviceHexEncodedPublicKeys(for: hexEncodedPublicKey, in: transaction) + let wasSentByLinkedDevice = linkedDevices.contains(hexEncodedPublicKey) + guard wasSentByLinkedDevice else { return } let groups = syncMessage.openGroups guard groups.count > 0 else { return } print("[Loki] Open group sync message received.") for openGroup in groups { - LokiPublicChatManager.shared.addChat(server: openGroup.url, channel: openGroup.channel) + let openGroupManager = LokiPublicChatManager.shared + guard openGroupManager.getChat(server: openGroup.url, channel: openGroup.channel) == nil else { return } + openGroupManager.addChat(server: openGroup.url, channel: openGroup.channel) } } }