From 798f9ec7b4c8e87d2726168500b7ac4bc367d8e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20D=E2=80=99Aquino?= Date: Sun, 21 Sep 2025 11:29:46 -0700 Subject: [PATCH] Improve loading speeds for home timeline and universe view MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Daniel D’Aquino --- damus/ContentView.swift | 2 +- .../Search/Models/SearchHomeModel.swift | 26 ++++++++++++------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/damus/ContentView.swift b/damus/ContentView.swift index 2984943b..dc415752 100644 --- a/damus/ContentView.swift +++ b/damus/ContentView.swift @@ -744,7 +744,7 @@ struct ContentView: View { } damus_state.nostrNetwork.connect() // TODO: Move this to a better spot. Not sure what is the best signal to listen to for sending initial filters - DispatchQueue.main.asyncAfter(deadline: .now() + 3, execute: { + DispatchQueue.main.asyncAfter(deadline: .now() + 0.25, execute: { self.home.send_initial_filters() }) } diff --git a/damus/Features/Search/Models/SearchHomeModel.swift b/damus/Features/Search/Models/SearchHomeModel.swift index 8fbb293e..4c99fbca 100644 --- a/damus/Features/Search/Models/SearchHomeModel.swift +++ b/damus/Features/Search/Models/SearchHomeModel.swift @@ -62,16 +62,22 @@ class SearchHomeModel: ObservableObject { var follow_list_filter = NostrFilter(kinds: [.follow_list]) follow_list_filter.until = UInt32(Date.now.timeIntervalSince1970) - for await noteLender in damus_state.nostrNetwork.reader.streamExistingEvents(filters: [follow_list_filter], to: to_relays) { - await noteLender.justUseACopy({ await self.handleFollowPackEvent($0) }) - } - - for await noteLender in damus_state.nostrNetwork.reader.streamExistingEvents(filters: [get_base_filter()], to: to_relays) { - await noteLender.justUseACopy({ await self.handleEvent($0) }) - } - - DispatchQueue.main.async { - self.loading = false + for await item in damus_state.nostrNetwork.reader.advancedStream(filters: [get_base_filter(), follow_list_filter], to: to_relays) { + switch item { + case .event(lender: let lender): + await lender.justUseACopy({ event in + await self.handleFollowPackEvent(event) + await self.handleEvent(event) + }) + case .eose: + break + case .ndbEose: + DispatchQueue.main.async { + self.loading = false + } + case .networkEose: + break + } } }