diff --git a/damus/Features/Search/Models/SearchModel.swift b/damus/Features/Search/Models/SearchModel.swift index 36577e6a..af0168db 100644 --- a/damus/Features/Search/Models/SearchModel.swift +++ b/damus/Features/Search/Models/SearchModel.swift @@ -15,7 +15,7 @@ class SearchModel: ObservableObject { var search: NostrFilter let profiles_subid = UUID().description - var listener: Task? = nil + var listener: Task? = nil let limit: UInt32 = 500 init(state: DamusState, search: NostrFilter) { @@ -42,9 +42,13 @@ class SearchModel: ObservableObject { //likes_filter.ids = ref_events.referenced_ids! listener?.cancel() listener = Task { - self.loading = true + DispatchQueue.main.async { + self.loading = true + } print("subscribing to search") - for await item in await state.nostrNetwork.reader.subscribe(filters: [search]) { + try Task.checkCancellation() + outerLoop: for await item in await state.nostrNetwork.reader.subscribe(filters: [search]) { + try Task.checkCancellation() switch item { case .event(let borrow): try? borrow { ev in @@ -54,12 +58,15 @@ class SearchModel: ObservableObject { } } case .eose: - break + break outerLoop } - guard let txn = NdbTxn(ndb: state.ndb) else { return } - load_profiles(context: "search", load: .from_events(self.events.all_events), damus_state: state, txn: txn) } - self.loading = false + guard let txn = NdbTxn(ndb: state.ndb) else { return } + try Task.checkCancellation() + load_profiles(context: "search", load: .from_events(self.events.all_events), damus_state: state, txn: txn) + DispatchQueue.main.async { + self.loading = false + } } }