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.