From 059061b995fa8919cc68e6a0e0207b4fa24eeb5b Mon Sep 17 00:00:00 2001 From: Stefan Ceriu Date: Thu, 6 Jun 2024 17:33:52 +0300 Subject: [PATCH] Debounce message sending queue re-enabling requests --- .../Sources/Services/Client/ClientProxy.swift | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/ElementX/Sources/Services/Client/ClientProxy.swift b/ElementX/Sources/Services/Client/ClientProxy.swift index 17d19f28f..b4b33c487 100644 --- a/ElementX/Sources/Services/Client/ClientProxy.swift +++ b/ElementX/Sources/Services/Client/ClientProxy.swift @@ -121,6 +121,8 @@ class ClientProxy: ClientProxyProtocol { verificationStateSubject.asCurrentValuePublisher() } + private let sendingQueueStatusSubject = CurrentValueSubject(false) + init(client: ClientProtocol, appSettings: AppSettings, networkMonitor: NetworkMonitorProtocol) async { @@ -166,15 +168,23 @@ class ClientProxy: ClientProxyProtocol { }) sendingQueueListenerTaskHandle = client.subscribeToSendingQueueStatus(listener: SendingQueueStatusListenerProxy { [weak self] enabled in - guard let self else { return } - - MXLog.error("Sending queue status changed to enabled: \(enabled)") - - if enabled == false, - networkMonitor.reachabilityPublisher.value == .reachable { - setSendingQueueEnabled(true) - } + self?.sendingQueueStatusSubject.send(enabled) }) + + sendingQueueStatusSubject + .removeDuplicates() + .debounce(for: 0.25, scheduler: DispatchQueue.main) + .sink { [weak self] enabled in + guard let self else { return } + + MXLog.info("Sending queue status changed to enabled: \(enabled)") + + if enabled == false, + networkMonitor.reachabilityPublisher.value == .reachable { + setSendingQueueEnabled(true) + } + } + .store(in: &cancellables) } private func updateVerificationState(_ verificationState: VerificationState) {