From 9bcee298d4be72813e1bd3faacd910ccd5ceaff5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20D=E2=80=99Aquino?= Date: Fri, 5 Sep 2025 16:39:34 -0700 Subject: [PATCH] Fix forever-loading hashtag view MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Daniel D’Aquino --- .../Features/Search/Models/SearchModel.swift | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) 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 + } } }