don't bump timeline when adding notes
This is quite different than Damus iOS. The timeline will continually add new items without bumping scroll position, thanks to egui-virtual-list's `items_inserted_at_start` function. Closes: https://github.com/damus-io/notedeck/issues/38 Fixes: https://github.com/damus-io/notedeck/issues/59 Signed-off-by: William Casarin <jb55@jb55.com>
This commit is contained in:
19
src/app.rs
19
src/app.rs
@@ -135,7 +135,7 @@ fn try_process_event(damus: &mut Damus, ctx: &egui::Context) -> Result<()> {
|
|||||||
let txn = Transaction::new(&damus.ndb)?;
|
let txn = Transaction::new(&damus.ndb)?;
|
||||||
let mut unknown_ids: HashSet<UnknownId> = HashSet::new();
|
let mut unknown_ids: HashSet<UnknownId> = HashSet::new();
|
||||||
for timeline in 0..damus.timelines.len() {
|
for timeline in 0..damus.timelines.len() {
|
||||||
if let Err(err) = poll_notes_for_timeline(damus, &txn, timeline, &mut unknown_ids) {
|
if let Err(err) = poll_notes_for_timeline(ctx, damus, &txn, timeline, &mut unknown_ids) {
|
||||||
error!("{}", err);
|
error!("{}", err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -238,6 +238,7 @@ fn get_unknown_note_ids<'a>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn poll_notes_for_timeline<'a>(
|
fn poll_notes_for_timeline<'a>(
|
||||||
|
ctx: &egui::Context,
|
||||||
damus: &mut Damus,
|
damus: &mut Damus,
|
||||||
txn: &'a Transaction,
|
txn: &'a Transaction,
|
||||||
timeline: usize,
|
timeline: usize,
|
||||||
@@ -268,8 +269,20 @@ fn poll_notes_for_timeline<'a>(
|
|||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
damus.timelines[timeline].notes =
|
let timeline = &mut damus.timelines[timeline];
|
||||||
timeline::merge_sorted_vecs(&damus.timelines[timeline].notes, &new_refs);
|
let prev_items = timeline.notes.len();
|
||||||
|
timeline.notes = timeline::merge_sorted_vecs(&timeline.notes, &new_refs);
|
||||||
|
let new_items = timeline.notes.len() - prev_items;
|
||||||
|
|
||||||
|
// TODO: technically items could have been added inbetween
|
||||||
|
timeline
|
||||||
|
.list
|
||||||
|
.clone()
|
||||||
|
.lock()
|
||||||
|
.unwrap()
|
||||||
|
.items_inserted_at_start(new_items);
|
||||||
|
|
||||||
|
ctx.request_repaint();
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -153,6 +153,7 @@ pub fn timeline_view(ui: &mut egui::Ui, app: &mut Damus, timeline: usize) {
|
|||||||
ui.add_space(3.0);
|
ui.add_space(3.0);
|
||||||
|
|
||||||
egui::ScrollArea::vertical()
|
egui::ScrollArea::vertical()
|
||||||
|
.animated(false)
|
||||||
.scroll_bar_visibility(ScrollBarVisibility::AlwaysVisible)
|
.scroll_bar_visibility(ScrollBarVisibility::AlwaysVisible)
|
||||||
.show(ui, |ui| {
|
.show(ui, |ui| {
|
||||||
let len = app.timelines[timeline].notes.len();
|
let len = app.timelines[timeline].notes.len();
|
||||||
|
|||||||
Reference in New Issue
Block a user