From 1558ee2177c87b994054ccb3ae954e586409b187 Mon Sep 17 00:00:00 2001 From: Jordan Petridis Date: Thu, 22 Feb 2018 12:01:07 +0000 Subject: [PATCH] EpisodeWidget: Fix Date states. --- hammond-gtk/src/widgets/episode_states.rs | 56 ++++++++++++----------- 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/hammond-gtk/src/widgets/episode_states.rs b/hammond-gtk/src/widgets/episode_states.rs index 4432d7a..3673592 100644 --- a/hammond-gtk/src/widgets/episode_states.rs +++ b/hammond-gtk/src/widgets/episode_states.rs @@ -198,54 +198,53 @@ pub struct Date { state: S, } -impl Date { - fn new(date: gtk::Label, epoch: i64) -> Self { - let ts = Utc.timestamp(i64::from(epoch), 0); - date.set_text(ts.format("%e %b").to_string().trim()); +impl Date { + fn into_usual(self, epoch: i64) -> Date { + let ts = Utc.timestamp(epoch, 0); + self.date.set_text(ts.format("%e %b").to_string().trim()); Date { - date, - epoch, + date: self.date, + epoch: self.epoch, state: Usual {}, } } -} -impl From> for Date { - fn from(f: Date) -> Self { - let ts = Utc.timestamp(f.epoch, 0); - f.date.set_text(ts.format("%e %b %Y").to_string().trim()); + fn into_year_shown(self, epoch: i64) -> Date { + let ts = Utc.timestamp(epoch, 0); + self.date.set_text(ts.format("%e %b %Y").to_string().trim()); Date { - date: f.date, - epoch: f.epoch, + date: self.date, + epoch: self.epoch, state: YearShown {}, } } } -impl From> for Date { - fn from(f: Date) -> Self { - let ts = Utc.timestamp(f.epoch, 0); - f.date.set_text(ts.format("%e %b").to_string().trim()); +impl Date { + fn new(date: gtk::Label, epoch: i64) -> Self { + let ts = Utc.timestamp(epoch, 0); + date.set_text(ts.format("%e %b %Y").to_string().trim()); Date { - date: f.date, - epoch: f.epoch, - state: Usual {}, + date, + epoch, + state: UnInitialized {}, } } } #[derive(Debug, Clone)] pub enum DateMachine { + UnInitialized(Date), Usual(Date), WithYear(Date), } impl DateMachine { pub fn new(label: gtk::Label, epoch: i64) -> Self { - let m = DateMachine::Usual(Date::::new(label, epoch)); + let m = DateMachine::UnInitialized(Date::::new(label, epoch)); m.determine_state(epoch) } @@ -253,13 +252,18 @@ impl DateMachine { use self::DateMachine::*; let ts = Utc.timestamp(epoch, 0); - let is_old = NOW.year() == ts.year(); + let is_old = !(NOW.year() == ts.year()); match (self, is_old) { - (date @ Usual(_), false) => date, - (date @ WithYear(_), true) => date, - (Usual(val), true) => WithYear(val.into()), - (WithYear(val), false) => Usual(val.into()), + // Into Usual + (Usual(val), false) => Usual(val.into_usual(epoch)), + (WithYear(val), false) => Usual(val.into_usual(epoch)), + (UnInitialized(val), false) => Usual(val.into_usual(epoch)), + + // Into Year Shown + (Usual(val), true) => WithYear(val.into_year_shown(epoch)), + (WithYear(val), true) => WithYear(val.into_year_shown(epoch)), + (UnInitialized(val), true) => WithYear(val.into_year_shown(epoch)), } } }