diff options
author | Joris | 2022-12-18 20:02:42 +0100 |
---|---|---|
committer | Joris | 2022-12-18 20:02:42 +0100 |
commit | 80fdf874ac74efea64c7a21937ee790a4d871163 (patch) | |
tree | 8a1fc9b0b360dcdeafc03c88ecee711c532a7178 | |
parent | a6fd0110b65ec352603d69b9c4ccf3532689cd32 (diff) |
Fix changing week
After changing 1 week, we could not move anymore afterward. I didn’t
find the source of the bug, but after removing one row from the grid, we
lost the key event handler, albeit the application still working fine
otherwise.
-rw-r--r-- | src/gui/update.rs | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/src/gui/update.rs b/src/gui/update.rs index 7b3625c..a4b36f3 100644 --- a/src/gui/update.rs +++ b/src/gui/update.rs @@ -1,6 +1,5 @@ use async_channel::{Receiver, Sender}; use chrono::{Duration, NaiveDate}; -use gtk4::prelude::GridExt; use std::collections::HashSet; use std::iter::FromIterator; use uuid::Uuid; @@ -166,8 +165,6 @@ pub async fn event_handler(rx: Receiver<Msg>, mut app: App) { refresh(&app, &HashSet::from([date])) } Msg::SelectPreviousWeek => { - app.calendar.remove_row(4); - app.calendar.insert_row(1); app.start_date -= Duration::days(7); app.end_date -= Duration::days(7); @@ -179,11 +176,9 @@ pub async fn event_handler(rx: Receiver<Msg>, mut app: App) { Ok(events) => app.events = events, Err(err) => eprintln!("{}", err), }; - refresh(&app, &HashSet::from_iter(week_from(app.start_date))); + refresh(&app, &HashSet::from_iter(visible_dates(&app))); } Msg::SelectNextWeek => { - app.calendar.remove_row(1); - app.calendar.insert_row(4); app.start_date += Duration::days(7); app.end_date += Duration::days(7); @@ -195,10 +190,7 @@ pub async fn event_handler(rx: Receiver<Msg>, mut app: App) { Ok(events) => app.events = events, Err(err) => eprintln!("{}", err), }; - refresh( - &app, - &HashSet::from_iter(week_from(app.end_date - Duration::days(6))), - ); + refresh(&app, &HashSet::from_iter(visible_dates(&app))); } } } @@ -283,16 +275,24 @@ fn refresh(app: &App, dates: &HashSet<NaiveDate>) { for date in dates { if date >= &app.start_date && date <= &app.end_date { - calendar::refresh_date(app, *date, &repetitions, &app.categories, &app.default_color) + calendar::refresh_date( + app, + *date, + &repetitions, + &app.categories, + &app.default_color, + ) } } } -/// Seven days vector from the given date. -fn week_from(date: NaiveDate) -> Vec<NaiveDate> { +/// List visible dates in calendar. +fn visible_dates(app: &App) -> Vec<NaiveDate> { + let mut date = app.start_date; let mut res = vec![date]; - for i in 1..=6 { - res.push(date + Duration::days(i)) + while date <= app.end_date { + date += Duration::days(1); + res.push(date); } res } |