From 582c62b86599eae06de52e9b106503484cd9a6e4 Mon Sep 17 00:00:00 2001 From: zenonet Date: Fri, 10 Oct 2025 00:32:33 +0200 Subject: [PATCH] Added room info and massively improved layout --- src/main.rs | 42 +++++++++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/src/main.rs b/src/main.rs index d784b23..3f0a720 100644 --- a/src/main.rs +++ b/src/main.rs @@ -10,6 +10,7 @@ use embedded_graphics::{ text::{Text}, Drawable, }; +use embedded_layout::layout::linear::ElementSpacing; use epd_waveshare::{color::Color, epd7in5_v2::Epd7in5, prelude::WaveshareDisplay}; use esp_idf_hal::modem::Modem; use esp_idf_hal::{ @@ -291,12 +292,13 @@ fn fetch_data(modem: Modem) -> anyhow::Result<(Box, DateTime bool{ + l.code == LessonCode::Cancelled || l.subst_text.as_ref().is_some_and(|s| s == "Aufgaben") +} + fn draw_layout(display: &mut epd_waveshare::epd7in5_v2::Display7in5, timetable: &Timetable, now: DateTime, next_wakeup_time: DateTime){ let display_area = display.bounding_box(); - let margin = FixedMargin(15); - - // let text_style = MonoTextStyle::new(&embedded_graphics::mono_font::ascii::FONT_10X20, Color::White); let text_style = U8g2TextStyle::new(u8g2_fonts::fonts::u8g2_font_profont22_mr, Color::White); @@ -312,24 +314,42 @@ fn draw_layout(display: &mut epd_waveshare::epd7in5_v2::Display7in5, timetable: let current_period = get_school_period(now.time()); let mut texts = timetable.iter().enumerate().map(|(day_index, day)| day.iter().enumerate().map(|(period, l)| { - let s = if let Some(l) = l && l.code != LessonCode::Cancelled{ - Some(l.subjects.first().unwrap().name.as_str()) + let s = if let Some(l) = l && !is_lesson_cancelled(l){ + (||{ + Some(l.subjects.first()?.name.as_str()) + })() }else{ None }.and_then(get_full_subject_name); + + let room_str = if let Some(l) = l && !is_lesson_cancelled(l){ + (||{ + Some(l.rooms.first()?.name.as_str()) + })() + }else{ + None + }; + let text_style = if period as u8 == current_period && day_index as u32 == day_of_week{ &inverted_text_style }else{ &text_style }; - //LinearLayout::horizontal(Chain::new(Text::new())) - Text::new(s.unwrap_or_else(|| &empty_str), Point::zero(), text_style) + LinearLayout::vertical( + Chain::new( + Text::new(s.unwrap_or_else(|| &empty_str), Point::zero(), text_style) + ).append( + Text::new(room_str.unwrap_or_else(|| &empty_str), Point::zero(), &text_style_small) + ) + ) + .with_spacing(FixedMargin(2)).arrange() + }).collect::>()).collect::>(); let mut columns = texts.iter_mut().map(|day| LinearLayout::vertical(Views::new(day)) .align_to(&display_area, horizontal::Center, vertical::Top) - .with_spacing(margin) + .with_spacing(FixedMargin(15)) .arrange() ).collect::>(); @@ -343,16 +363,16 @@ fn draw_layout(display: &mut epd_waveshare::epd7in5_v2::Display7in5, timetable: let time_table_grid = LinearLayout::horizontal(columns) .with_alignment(vertical::Center) - .with_spacing(margin) + .with_spacing(FixedMargin(18)) .arrange(); let subtext = LinearLayout::vertical(Chain::new(time_text).append(Text::new(&next_wakeup_time_str, Point::zero(), &text_style_small))).with_alignment(horizontal::Center).with_spacing(FixedMargin(2)).arrange(); LinearLayout::vertical(Chain::new(time_table_grid).append(subtext)) .with_alignment(horizontal::Center) - .with_spacing(DistributeFill(display_area.size.height-20)) + .with_spacing(DistributeFill(display_area.size.height-10)) .arrange() - .align_to(&display_area, horizontal::Center, vertical::Center) + .align_to(&display_area, horizontal::Center, vertical::Bottom) .draw(display) .unwrap(); }