diff --git a/src/gtfs/mod.rs b/src/gtfs/mod.rs index 307e511..dd66f49 100644 --- a/src/gtfs/mod.rs +++ b/src/gtfs/mod.rs @@ -76,7 +76,10 @@ impl Gtfs { trip: &trip, departure_time: stop_timestamp.into() }; - debug!("Arrival to {:#?} for trip ID {:#?}.", arrival.trip.trip_headsign.as_ref().unwrap(), arrival.trip.id); + debug!("{:#?}: Arrival to {:#?} for trip ID {:#?}.", + format!("{:02}:{:02}", (arrival.departure_time/3600) as u32, ((arrival.departure_time / 60) % 60) as u32), + arrival.trip.trip_headsign.as_ref().unwrap(), + arrival.trip.id); arrivals.push(arrival); } } diff --git a/src/renderer/mod.rs b/src/renderer/mod.rs index 3c4e254..e831f38 100644 --- a/src/renderer/mod.rs +++ b/src/renderer/mod.rs @@ -1,6 +1,7 @@ pub mod structs; use std::{cmp::min}; -use log::{error, warn}; +use chrono::{Local, NaiveTime, Timelike}; +use log::{debug, error, warn}; use sdl3::{Sdl, pixels::Color, rect::Rect}; use structs::{Prefs, DisplayData}; @@ -32,18 +33,21 @@ impl Screen<'_> { return COLOR_LCD_RED; } - fn format_due_for(&self, due_in: i32, departure_time: u32) -> String { - if due_in < 60 { + fn format_due_for(&self, due_in_mins: i32, departure_time: u32) -> String { + debug!("Due in mins: {:02}", due_in_mins); + if due_in_mins <= 1 { return String::from("due"); } - if due_in < 3600 { - return ((due_in / 60) as i32).to_string() + "min"; + if due_in_mins < 60 { + return due_in_mins.to_string() + "min"; } - return format!("{:02}:{:02}", (departure_time / 3600) as i32, ((departure_time % 3600) / 60) as i32); + return format!("{:02}:{:02}", (departure_time / 3600) as i32, ((departure_time / 60) % 60) as i32); } pub fn update_information(&mut self, display_data: &DisplayData) { + let seconds_since_midnight = Local::now().num_seconds_from_midnight(); + self.do_clear(); // Print status first @@ -55,13 +59,13 @@ impl Screen<'_> { self.do_print_at(5, &format!("TODO: DATE/TIME GOES HERE").to_string(), 0); } - // Then data lines from the bottom up + // Then data lines from the bottom let num_arrivals: i32 = min(LINE_COUNT, display_data.lines.len() as i32); for index in 0..num_arrivals { let line: u32 = ((num_arrivals - 1) - index) as u32; // Compose a line of text with all the information let entry = display_data.lines.get(line as usize).unwrap(); - let due_in_mins = (entry.departure_time / 60) as i32; + let due_in_mins = ((entry.departure_time - seconds_since_midnight) / 60) as i32; let due_color: Color = self.color_for(due_in_mins); let due_text = self.format_due_for(due_in_mins, entry.departure_time);