From d0abad32f41029ac10a1735096a8884a4ffb0b9f Mon Sep 17 00:00:00 2001 From: nielsandriesse Date: Thu, 7 May 2020 13:39:28 +1000 Subject: [PATCH] Fix missing device link fetch --- .../SessionManagementProtocol.swift | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/SignalServiceKit/src/Loki/Protocol/Session Management/SessionManagementProtocol.swift b/SignalServiceKit/src/Loki/Protocol/Session Management/SessionManagementProtocol.swift index 3cd451abe..844d1bbe3 100644 --- a/SignalServiceKit/src/Loki/Protocol/Session Management/SessionManagementProtocol.swift +++ b/SignalServiceKit/src/Loki/Protocol/Session Management/SessionManagementProtocol.swift @@ -182,22 +182,25 @@ public final class SessionManagementProtocol : NSObject { @objc(handleSessionRequestMessage:wrappedIn:using:) public static func handleSessionRequestMessage(_ dataMessage: SSKProtoDataMessage, wrappedIn envelope: SSKProtoEnvelope, using transaction: YapDatabaseReadWriteTransaction) { // The envelope source is set during UD decryption - // FIXME: Device links should probably update here if they're out of date let hexEncodedPublicKey = envelope.source! - var validHEPKs: Set = [] + var closedGroupMembers: Set = [] TSGroupThread.enumerateCollectionObjects(with: transaction) { object, _ in guard let group = object as? TSGroupThread, group.groupModel.groupType == .closedGroup, group.shouldThreadBeVisible else { return } - let closedGroupMembersIncludingLinkedDevices = group.groupModel.groupMemberIds.flatMap { - LokiDatabaseUtilities.getLinkedDeviceHexEncodedPublicKeys(for: $0, in: transaction) + closedGroupMembers.formUnion(group.groupModel.groupMemberIds) + } + LokiFileServerAPI.getDeviceLinks(associatedWith: closedGroupMembers).ensure { + storage.dbReadWriteConnection.readWrite { transaction in + let validHEPKs = closedGroupMembers.flatMap { + LokiDatabaseUtilities.getLinkedDeviceHexEncodedPublicKeys(for: $0, in: transaction) + } + guard validHEPKs.contains(hexEncodedPublicKey) else { return } + let thread = TSContactThread.getOrCreateThread(withContactId: hexEncodedPublicKey, transaction: transaction) + let ephemeralMessage = EphemeralMessage(in: thread) + let messageSenderJobQueue = SSKEnvironment.shared.messageSenderJobQueue + messageSenderJobQueue.add(message: ephemeralMessage, transaction: transaction) } - validHEPKs.formUnion(closedGroupMembersIncludingLinkedDevices) } - guard validHEPKs.contains(hexEncodedPublicKey) else { return } - let thread = TSContactThread.getOrCreateThread(withContactId: hexEncodedPublicKey, transaction: transaction) - let ephemeralMessage = EphemeralMessage(in: thread) - let messageSenderJobQueue = SSKEnvironment.shared.messageSenderJobQueue - messageSenderJobQueue.add(message: ephemeralMessage, transaction: transaction) } // TODO: This needs an explanation of when we expect pre key bundles to be attached