diff --git a/fitnesstrax/app/src/app_window.rs b/fitnesstrax/app/src/app_window.rs index 75f6dbb..c473062 100644 --- a/fitnesstrax/app/src/app_window.rs +++ b/fitnesstrax/app/src/app_window.rs @@ -136,20 +136,19 @@ impl AppWindow { fn show_historical_view(&self, records: Vec>) { let view = View::Historical(HistoricalView::new(self.app.clone(), records, { let s = self.clone(); - Rc::new(move |date, records| { - let layout = gtk::Box::new(gtk::Orientation::Vertical, 0); - layout.append(&adw::HeaderBar::new()); - // layout.append(&DayDetailView::new(date, records, s.app.clone())); - layout.append(&DayDetailView::new(DayDetailViewModel::new( - date, - records, - s.app.clone(), - ))); - let page = &adw::NavigationPage::builder() - .title(date.format("%Y-%m-%d").to_string()) - .child(&layout) - .build(); - s.navigation.push(page); + Rc::new(move |date, _records| { + let s = s.clone(); + glib::spawn_future_local(async move { + let layout = gtk::Box::new(gtk::Orientation::Vertical, 0); + layout.append(&adw::HeaderBar::new()); + let view_model = DayDetailViewModel::new(date, s.app.clone()).await; + layout.append(&DayDetailView::new(view_model)); + let page = &adw::NavigationPage::builder() + .title(date.format("%Y-%m-%d").to_string()) + .child(&layout) + .build(); + s.navigation.push(page); + }); }) })); self.swap_main(view); diff --git a/fitnesstrax/app/src/view_models/day_detail.rs b/fitnesstrax/app/src/view_models/day_detail.rs index 0e9b5c9..fa5c39d 100644 --- a/fitnesstrax/app/src/view_models/day_detail.rs +++ b/fitnesstrax/app/src/view_models/day_detail.rs @@ -85,7 +85,9 @@ pub struct DayDetailViewModel { } impl DayDetailViewModel { - pub fn new(date: chrono::NaiveDate, records: Vec>, app: App) -> Self { + pub async fn new(date: chrono::NaiveDate, app: App) -> Self { + let records = app.records(date, date).await.unwrap(); + let (weight_records, records): (Vec>, Vec>) = records.into_iter().partition(|r| r.data.is_weight()); let (step_records, records): (Vec>, Vec>) = diff --git a/fitnesstrax/app/src/views/historical_view.rs b/fitnesstrax/app/src/views/historical_view.rs index 2e80e40..537481e 100644 --- a/fitnesstrax/app/src/views/historical_view.rs +++ b/fitnesstrax/app/src/views/historical_view.rs @@ -59,27 +59,28 @@ impl ObjectSubclass for HistoricalViewPrivate { factory.connect_bind({ let app = s.app.clone(); move |_, list_item| { - let records = list_item - .downcast_ref::() - .expect("should be a ListItem") - .item() - .and_downcast::() - .expect("should be a DaySummary"); + let app = app.clone(); + let list_item = list_item.clone(); + glib::spawn_future_local(async move { + let records = list_item + .downcast_ref::() + .expect("should be a ListItem") + .item() + .and_downcast::() + .expect("should be a DaySummary"); - let summary = list_item - .downcast_ref::() - .expect("should be a ListItem") - .child() - .and_downcast::() - .expect("should be a DaySummary"); + let summary = list_item + .downcast_ref::() + .expect("should be a ListItem") + .child() + .and_downcast::() + .expect("should be a DaySummary"); - if let Some(app) = app.borrow().clone() { - summary.set_data(DayDetailViewModel::new( - records.date(), - records.records(), - app.clone(), - )); - } + if let Some(app) = app.borrow().clone() { + let view_model = DayDetailViewModel::new(records.date(), app.clone()).await; + summary.set_data(view_model); + } + }); } });