Move DM subscription to a dedicated stream

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 <daniel@daquino.me>
This commit is contained in:
Daniel D’Aquino
2025-12-08 11:37:03 -08:00
parent 89a56eebcd
commit ce461b58e6

View File

@@ -70,6 +70,7 @@ class HomeModel: ContactsDelegate, ObservableObject {
var homeHandlerTask: Task<Void, Never>? var homeHandlerTask: Task<Void, Never>?
var notificationsHandlerTask: Task<Void, Never>? var notificationsHandlerTask: Task<Void, Never>?
var generalHandlerTask: Task<Void, Never>? var generalHandlerTask: Task<Void, Never>?
var dmsHandlerTask: Task<Void, Never>?
var ndbOnlyHandlerTask: Task<Void, Never>? var ndbOnlyHandlerTask: Task<Void, Never>?
var nwcHandlerTask: Task<Void, Never>? var nwcHandlerTask: Task<Void, Never>?
@@ -603,9 +604,9 @@ class HomeModel: ContactsDelegate, ObservableObject {
} }
} }
} }
self.generalHandlerTask?.cancel() self.dmsHandlerTask?.cancel()
self.generalHandlerTask = Task { self.dmsHandlerTask = Task {
for await item in damus_state.nostrNetwork.reader.advancedStream(filters: dms_filters + contacts_filters, streamMode: .ndbAndNetworkParallel(networkOptimization: .sinceOptimization)) { for await item in damus_state.nostrNetwork.reader.advancedStream(filters: dms_filters, streamMode: .ndbAndNetworkParallel(networkOptimization: .sinceOptimization)) {
switch item { switch item {
case .event(let lender): case .event(let lender):
await lender.justUseACopy({ await process_event(ev: $0, context: .other) }) 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. // 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) // 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. // Therefore, we have this ndb-only stream for some low volume important items.