diff --git a/src/models.rs b/src/models.rs index 389cfb8..a80fcf1 100644 --- a/src/models.rs +++ b/src/models.rs @@ -1,29 +1,62 @@ +use chrono::NaiveDateTime; +use regex::Regex; + pub struct Notice { pub affected_lines: Vec, pub dest_1: String, pub dest_2: String, pub headline: String, pub detail: String, - pub from: u32, - pub to: u32, + pub from: Option, + pub to: Option, pub last_modified: String, } -pub fn get_line_color(line_number: &str) -> (u8, u8, u8) { - match line_number { - // Rot: Linien 1, 2, 8 - "1" | "2" | "8" => (238, 66, 36), +impl Notice { + pub fn get_line_color(&self) -> (u8, u8, u8) { + match self + .affected_lines + .first() + .expect("Does not affect any line") + .as_str() + { + // Rot: Linien 1, 2, 8 + "1" | "2" | "8" => (238, 66, 36), - // Gelb (Die besten Linien): Linien 4, 5, 6, 11 - "4" | "5" | "6" | "11" => (248, 166, 28), + // Gelb (Die besten Linien): Linien 4, 5, 6, 11 + "4" | "5" | "6" | "11" => (248, 166, 28), - // Grün: Linien 9, 10, 12, 17 - "10" | "12" | "17" => (110, 191, 69), + // Grün: Linien 9, 10, 12, 17 + "10" | "12" | "17" => (110, 191, 69), - // Blau: Linien 3, 7, 9, 13 - "3" | "7" | "9" | "13" => (0, 114, 188), + // Blau: Linien 3, 7, 9, 13 + "3" | "7" | "9" | "13" => (0, 114, 188), - // Fallback (z.B. für das Standard-Blau aus deiner API) - _ => (55, 101, 174), + // Fallback (z.B. für das Standard-Blau aus deiner API) + _ => (55, 101, 174), + } + } + + pub fn get_validity_period(&mut self) { + let re = Regex::new( + r"Gültig ab (\d{2}\.\d{2}\.\d{4} \d{2}:\d{2}) bis (\d{2}\.\d{2}\.\d{4} \d{2}:\d{2})", + ) + .unwrap(); + + if let Some(caps) = re.captures(&self.detail) { + let valid_from = caps.get(1).unwrap().as_str(); + let valid_to = caps.get(1).unwrap().as_str(); + let format = "%d.%m.%Y %H:%M"; + + if let (Ok(start_dt), Ok(end_dt)) = ( + NaiveDateTime::parse_from_str(valid_from, format), + NaiveDateTime::parse_from_str(valid_to, format), + ) { + self.from = Some(start_dt); + self.to = Some(end_dt); + } + } else { + println!("No validity period found in the text."); + } } }