From 36017efffb0bcec8b211d24eafaaf052d27cedbf Mon Sep 17 00:00:00 2001 From: Marco Melorio Date: Wed, 8 Feb 2023 23:46:25 +0100 Subject: [PATCH] history-viewer: Load more items when scrolling --- src/session/content/room_details/history_viewer/audio.rs | 9 ++++++++- src/session/content/room_details/history_viewer/file.rs | 9 ++++++++- src/session/content/room_details/history_viewer/media.rs | 9 ++++++++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/session/content/room_details/history_viewer/audio.rs b/src/session/content/room_details/history_viewer/audio.rs index 1b543178..1f808e13 100644 --- a/src/session/content/room_details/history_viewer/audio.rs +++ b/src/session/content/room_details/history_viewer/audio.rs @@ -91,12 +91,19 @@ impl AudioHistoryViewer { imp.list_view.set_model(Some(&model)); // Load an initial number of items - spawn!(clone!(@weak timeline => async move { + spawn!(clone!(@weak self as obj, @weak timeline => async move { while timeline.n_items() < MIN_N_ITEMS { if !timeline.load().await { break; } } + + let adj = obj.imp().list_view.vadjustment().unwrap(); + adj.connect_value_notify(clone!(@weak timeline => move |adj| { + if adj.value() + adj.page_size() * 2.0 >= adj.upper() { + spawn!(async move { timeline.load().await; }); + } + })); })); imp.room_timeline.set(timeline).unwrap(); diff --git a/src/session/content/room_details/history_viewer/file.rs b/src/session/content/room_details/history_viewer/file.rs index e984b9f9..3e520924 100644 --- a/src/session/content/room_details/history_viewer/file.rs +++ b/src/session/content/room_details/history_viewer/file.rs @@ -91,12 +91,19 @@ impl FileHistoryViewer { imp.list_view.set_model(Some(&model)); // Load an initial number of items - spawn!(clone!(@weak timeline => async move { + spawn!(clone!(@weak self as obj, @weak timeline => async move { while timeline.n_items() < MIN_N_ITEMS { if !timeline.load().await { break; } } + + let adj = obj.imp().list_view.vadjustment().unwrap(); + adj.connect_value_notify(clone!(@weak timeline => move |adj| { + if adj.value() + adj.page_size() * 2.0 >= adj.upper() { + spawn!(async move { timeline.load().await; }); + } + })); })); imp.room_timeline.set(timeline).unwrap(); diff --git a/src/session/content/room_details/history_viewer/media.rs b/src/session/content/room_details/history_viewer/media.rs index dd2fd2eb..3d8aa3b5 100644 --- a/src/session/content/room_details/history_viewer/media.rs +++ b/src/session/content/room_details/history_viewer/media.rs @@ -112,12 +112,19 @@ impl MediaHistoryViewer { imp.grid_view.set_model(Some(&model)); // Load an initial number of items - spawn!(clone!(@weak timeline => async move { + spawn!(clone!(@weak self as obj, @weak timeline => async move { while timeline.n_items() < MIN_N_ITEMS { if !timeline.load().await { break; } } + + let adj = obj.imp().grid_view.vadjustment().unwrap(); + adj.connect_value_notify(clone!(@weak timeline => move |adj| { + if adj.value() + adj.page_size() * 2.0 >= adj.upper() { + spawn!(async move { timeline.load().await; }); + } + })); })); imp.room_timeline.set(timeline).unwrap();