From ce461b58e67932bec3fc2f7c86cd9aeb4bfff41d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20D=E2=80=99Aquino?= Date: Mon, 8 Dec 2025 11:37:03 -0800 Subject: [PATCH] Move DM subscription to a dedicated stream MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit splits a subscription that previously gathered DMs as well as new notes from the follow list, moving the DM subscription to is own dedicated stream. This prevents the issue of DM notes getting clipped off when the user follows too many other users. Changelog-Fixed: Fixed an issue where DMs may not appear for users with a large contact list Signed-off-by: Daniel D’Aquino --- damus/Features/Timeline/Models/HomeModel.swift | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/damus/Features/Timeline/Models/HomeModel.swift b/damus/Features/Timeline/Models/HomeModel.swift index f86c25ef..247977ab 100644 --- a/damus/Features/Timeline/Models/HomeModel.swift +++ b/damus/Features/Timeline/Models/HomeModel.swift @@ -70,6 +70,7 @@ class HomeModel: ContactsDelegate, ObservableObject { var homeHandlerTask: Task? var notificationsHandlerTask: Task? var generalHandlerTask: Task? + var dmsHandlerTask: Task? var ndbOnlyHandlerTask: Task? var nwcHandlerTask: Task? @@ -603,9 +604,9 @@ class HomeModel: ContactsDelegate, ObservableObject { } } } - self.generalHandlerTask?.cancel() - self.generalHandlerTask = Task { - for await item in damus_state.nostrNetwork.reader.advancedStream(filters: dms_filters + contacts_filters, streamMode: .ndbAndNetworkParallel(networkOptimization: .sinceOptimization)) { + self.dmsHandlerTask?.cancel() + self.dmsHandlerTask = Task { + for await item in damus_state.nostrNetwork.reader.advancedStream(filters: dms_filters, streamMode: .ndbAndNetworkParallel(networkOptimization: .sinceOptimization)) { switch item { case .event(let lender): await lender.justUseACopy({ await process_event(ev: $0, context: .other) }) @@ -619,6 +620,12 @@ class HomeModel: ContactsDelegate, ObservableObject { } } } + self.generalHandlerTask?.cancel() + self.generalHandlerTask = Task { + for await lender in damus_state.nostrNetwork.reader.streamIndefinitely(filters: contacts_filters, streamMode: .ndbAndNetworkParallel(networkOptimization: .sinceOptimization)) { + await lender.justUseACopy({ await process_event(ev: $0, context: .other) }) + } + } // Due to subscription volume limits in ndb and in relays, some important events may get clipped in the `generalHandlerTask` above. // This could lead to issues (e.g. The app overriding a mutelist because it does not have it) // Therefore, we have this ndb-only stream for some low volume important items.