Always flush events when switching timelines

This commit is contained in:
William Casarin
2023-02-20 14:21:21 -08:00
parent 587819c8eb
commit 54dd2035a1
2 changed files with 10 additions and 2 deletions

View File

@@ -79,6 +79,10 @@ class EventHolder: ObservableObject {
} }
func flush() { func flush() {
guard !incoming.isEmpty else {
return
}
var changed = false var changed = false
for event in incoming { for event in incoming {
if insert_uniq_sorted_event_created(events: &events, new_ev: event) { if insert_uniq_sorted_event_created(events: &events, new_ev: event) {

View File

@@ -56,14 +56,18 @@ struct TimelineView: View {
.buttonStyle(BorderlessButtonStyle()) .buttonStyle(BorderlessButtonStyle())
.coordinateSpace(name: "scroll") .coordinateSpace(name: "scroll")
.onReceive(NotificationCenter.default.publisher(for: .scroll_to_top)) { _ in .onReceive(NotificationCenter.default.publisher(for: .scroll_to_top)) { _ in
let delay = events.has_incoming ? 0.1 : 0.0
events.flush()
guard let event = events.events.filter(self.filter).first else { guard let event = events.events.filter(self.filter).first else {
return return
} }
self.events.should_queue = false self.events.should_queue = false
events.flush() scroll_to_event(scroller: scroller, id: event.id, delay: delay, animate: true, anchor: .top)
scroll_to_event(scroller: scroller, id: event.id, delay: 0.0, animate: true, anchor: .top)
} }
} }
.onAppear {
events.flush()
}
} }
} }