From 436071f0ac974f8b018e6d41143907946a97dcf9 Mon Sep 17 00:00:00 2001 From: stuebinm Date: Mon, 28 Nov 2022 07:54:10 +0100 Subject: handle unknown times at stations (travelynx sends these as the literal epoch value, which led to really confusing results, printing exactly the time zone offset as arrival time) --- src/traits.rs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/traits.rs b/src/traits.rs index a24a689..091709a 100644 --- a/src/traits.rs +++ b/src/traits.rs @@ -1,5 +1,6 @@ use chrono::{DateTime, Local, Utc}; use colored::Colorize; +use core::cmp::PartialEq; pub trait IsStation { fn name(&self) -> &str; @@ -8,12 +9,19 @@ pub trait IsStation { fn ds100(&self) -> &str; fn to_fancy_string(&self) -> String { + // travelynx literally sends this entire precise date in case of an + // unknown time instead of, like, a null + let epoch = "1970-01-01T00:00:00Z".parse::>().unwrap(); format!( "{} {} – {} ({})", self - .real_arrival() // chrono's API for timezones is expressive, but reads like c++ … - .map(|t| >::from(*t).time().to_string()) - .unwrap_or("??:??:??".to_string()) + .real_arrival() + .map(|t| if t.eq(&epoch) { + "unknown ".to_owned() + } else { // chrono's API for timezones is expressive, but reads like c++ … + >::from(*t).time().format("%T").to_string() + }) + .unwrap_or("".to_string()) .blue(), { let delay = match (self.real_arrival(), self.scheduled_arrival()) { -- cgit v1.2.3