From 431fd15d5a810598e0b27600f3e1d42792330de2 Mon Sep 17 00:00:00 2001 From: Niels Andriesse Date: Wed, 13 Nov 2019 14:30:12 +1100 Subject: [PATCH] Ensure device links are always up to date --- SignalServiceKit/src/Loki/API/LokiLongPoller.swift | 9 +++++++-- SignalServiceKit/src/Messages/OWSMessageManager.m | 2 -- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/SignalServiceKit/src/Loki/API/LokiLongPoller.swift b/SignalServiceKit/src/Loki/API/LokiLongPoller.swift index e5b1d807f..2dc171881 100644 --- a/SignalServiceKit/src/Loki/API/LokiLongPoller.swift +++ b/SignalServiceKit/src/Loki/API/LokiLongPoller.swift @@ -83,8 +83,13 @@ public final class LokiLongPoller : NSObject { return LokiAPI.getRawMessages(from: target, usingLongPolling: true).then(on: DispatchQueue.global()) { [weak self] rawResponse -> Promise in guard let strongSelf = self, !strongSelf.hasStopped else { return Promise.value(()) } let messages = LokiAPI.parseRawMessagesResponse(rawResponse, from: target) - strongSelf.onMessagesReceived(messages) - return strongSelf.longPoll(target, seal: seal) + let hexEncodedPublicKeys = Set(messages.compactMap { $0.source }) + let promises = hexEncodedPublicKeys.map { LokiAPI.getDestinations(for: $0) } + return when(resolved: promises).then(on: DispatchQueue.global()) { _ -> Promise in + guard let strongSelf = self, !strongSelf.hasStopped else { return Promise.value(()) } + strongSelf.onMessagesReceived(messages) + return strongSelf.longPoll(target, seal: seal) + } } } } diff --git a/SignalServiceKit/src/Messages/OWSMessageManager.m b/SignalServiceKit/src/Messages/OWSMessageManager.m index 31fc7ea25..772382fcf 100644 --- a/SignalServiceKit/src/Messages/OWSMessageManager.m +++ b/SignalServiceKit/src/Messages/OWSMessageManager.m @@ -1474,8 +1474,6 @@ NS_ASSUME_NONNULL_BEGIN } } else { - // TODO: Do we need to fetch the device mapping here? - // Loki: A message from a secondary device should appear as if it came from the primary device; the underlying // friend request logic, however, should still be specific to the secondary device.