Code cleanup
This commit is contained in:
parent
3973ff94b0
commit
1ecf31b6fa
|
|
@ -1,4 +1,4 @@
|
||||||
use log::{debug, info, warn};
|
use log::debug;
|
||||||
use gtfs_structures::{Calendar, CalendarDate, RawStopTime, RawTrip, Route, Stop};
|
use gtfs_structures::{Calendar, CalendarDate, RawStopTime, RawTrip, Route, Stop};
|
||||||
use serde::de::DeserializeOwned;
|
use serde::de::DeserializeOwned;
|
||||||
use std::{
|
use std::{
|
||||||
|
|
|
||||||
60
src/main.rs
60
src/main.rs
|
|
@ -1,13 +1,20 @@
|
||||||
mod gtfs;
|
mod gtfs;
|
||||||
mod renderer;
|
mod renderer;
|
||||||
use std::{collections::HashSet, ops::Add, thread::{Builder}, time::SystemTime};
|
use std::{collections::HashSet, ops::Add, process, thread::Builder, time::SystemTime};
|
||||||
use chrono::{DateTime, Duration, Local, NaiveTime};
|
use chrono::{DateTime, Duration, Local, NaiveTime};
|
||||||
use log::{Metadata, Record, debug, info};
|
use log::{Metadata, Record, debug, error, info};
|
||||||
use crate::gtfs::structs::{Arrival, Gtfs};
|
use sdl3::event::Event;
|
||||||
|
use crate::{gtfs::structs::{Arrival, Gtfs}, renderer::structs::Screen};
|
||||||
|
|
||||||
const SRC_FILE: &str = "/home/nahuel/Downloads/GTFS_Realtime.zip";
|
const SRC_FILE: &str = "/home/nahuel/Downloads/GTFS_Realtime.zip";
|
||||||
const NUM_ARRIVALS: usize = 4;
|
const NUM_ARRIVALS: usize = 4;
|
||||||
|
|
||||||
|
// Custom Event to signal data refresh
|
||||||
|
#[derive(Debug)]
|
||||||
|
struct RefreshDataEvent {
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
fn refresh_schedule(gtfs: &Gtfs) -> Box<Vec<Arrival<'_>>> {
|
fn refresh_schedule(gtfs: &Gtfs) -> Box<Vec<Arrival<'_>>> {
|
||||||
let current_timestamp = SystemTime::now();
|
let current_timestamp = SystemTime::now();
|
||||||
let datetime: DateTime<Local> = current_timestamp.clone().into();
|
let datetime: DateTime<Local> = current_timestamp.clone().into();
|
||||||
|
|
@ -27,8 +34,6 @@ fn refresh_schedule(gtfs: &Gtfs) -> Box<Vec<Arrival<'_>>> {
|
||||||
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
|
||||||
|
|
||||||
// Initialize logger
|
// Initialize logger
|
||||||
static MY_LOGGER: MyLogger = MyLogger;
|
static MY_LOGGER: MyLogger = MyLogger;
|
||||||
struct MyLogger;
|
struct MyLogger;
|
||||||
|
|
@ -49,12 +54,13 @@ fn main() {
|
||||||
log::set_logger(&MY_LOGGER).unwrap();
|
log::set_logger(&MY_LOGGER).unwrap();
|
||||||
log::set_max_level(log::LevelFilter::Trace);
|
log::set_max_level(log::LevelFilter::Trace);
|
||||||
|
|
||||||
|
// Create preferences structures from config
|
||||||
let gtfs_prefs = gtfs::structs::Preferences {
|
let gtfs_prefs = gtfs::structs::Preferences {
|
||||||
route_numbers: HashSet::from([String::from("15A"), String::from("F1"), String::from("F2"), String::from("F3")]),
|
route_numbers: HashSet::from([String::from("15A"), String::from("F1"), String::from("F2"), String::from("F3")]),
|
||||||
stop_codes: HashSet::from([String::from("1117")])
|
stop_codes: HashSet::from([String::from("1117")])
|
||||||
};
|
};
|
||||||
|
|
||||||
let _screen_prefs = renderer::structs::Prefs {
|
let screen_prefs = renderer::structs::Prefs {
|
||||||
font_path: String::from("resources/jd_lcd_rounded/jd-lcd-rounded.ttf"),
|
font_path: String::from("resources/jd_lcd_rounded/jd-lcd-rounded.ttf"),
|
||||||
screen_width: 1920,
|
screen_width: 1920,
|
||||||
screen_height: 720,
|
screen_height: 720,
|
||||||
|
|
@ -65,42 +71,56 @@ fn main() {
|
||||||
let gtfs = Gtfs::load(SRC_FILE, >fs_prefs);
|
let gtfs = Gtfs::load(SRC_FILE, >fs_prefs);
|
||||||
|
|
||||||
// Init screen
|
// Init screen
|
||||||
//println!("Initializing screen...");
|
info!("Initializing screen...");
|
||||||
//let screen = Screen::init(&screen_prefs);
|
let screen = Screen::init(&screen_prefs);
|
||||||
//println!("Startup done.");
|
info!("Startup done.");
|
||||||
|
|
||||||
|
// Register our custom event and obtain the event-related objects to interact with the event loop
|
||||||
|
screen.get_context().event().unwrap().register_custom_event::<RefreshDataEvent>().unwrap();
|
||||||
|
let mut event_pump = screen.get_context().event_pump().unwrap();
|
||||||
|
let event_sender = screen.get_context().event().unwrap().event_sender();
|
||||||
|
|
||||||
// Start an asynchronous refresh thread
|
// Start an asynchronous refresh thread
|
||||||
let update_thread = Builder::new()
|
let _update_thread = Builder::new()
|
||||||
.name("updater".to_string())
|
.name("updater".to_string())
|
||||||
.spawn(move || {
|
.spawn(move || {
|
||||||
loop {
|
loop {
|
||||||
let _data = refresh_schedule(>fs);
|
|
||||||
debug!("-------------------------------- Refresh done.");
|
|
||||||
std::thread::sleep(std::time::Duration::new(60,0));
|
std::thread::sleep(std::time::Duration::new(60,0));
|
||||||
|
let event = RefreshDataEvent {};
|
||||||
|
let send_result = event_sender.push_custom_event(event);
|
||||||
|
if send_result.is_err() {
|
||||||
|
error!("Error sending custom event: {:#?}", send_result);
|
||||||
|
process::exit(-1);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}).unwrap();
|
}).unwrap();
|
||||||
|
|
||||||
let _ = update_thread.join();
|
|
||||||
|
|
||||||
|
|
||||||
// Main event loop
|
// Main event loop
|
||||||
/*
|
|
||||||
let mut event_pump = screen.get_context().event_pump().unwrap();
|
|
||||||
loop {
|
loop {
|
||||||
let event = event_pump.wait_event();
|
let event = event_pump.wait_event();
|
||||||
|
|
||||||
match event {
|
match event {
|
||||||
|
// Handle application quit
|
||||||
Event::Quit { timestamp: _ } => {
|
Event::Quit { timestamp: _ } => {
|
||||||
process::exit(0);
|
process::exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
Event::User { timestamp: _, window_id: _, type_: _, code: _, data1: _, data2: _ } => {
|
// Handle user events
|
||||||
// a message from another thread, probably a refresh?
|
Event::User { timestamp: _, window_id: _, type_: _u32, code: _i32, data1: _, data2: _ } => {
|
||||||
|
// Is the custom event a Refresh Data event?
|
||||||
|
let refresh_data = event.as_user_event_type::<RefreshDataEvent>();
|
||||||
|
if refresh_data.is_some() {
|
||||||
|
debug!("Received user event: {:#?}", refresh_data.unwrap());
|
||||||
|
let _data: Box<Vec<Arrival<'_>>> = refresh_schedule(>fs);
|
||||||
|
debug!("-------------------------------- Refresh done.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ignore all other events
|
// Ignore all other events
|
||||||
_ => {}
|
_ => {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} */
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,11 +8,11 @@ use crate::renderer::structs::Screen;
|
||||||
|
|
||||||
impl Screen<'_> {
|
impl Screen<'_> {
|
||||||
|
|
||||||
pub fn _get_context(&self) -> &Sdl {
|
pub fn get_context(&self) -> &Sdl {
|
||||||
return &self.context;
|
return &self.context;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn _print(&mut self, line: u32, text: &str) {
|
pub fn print(&mut self, line: u32, text: &str) {
|
||||||
let rendered_text = self.font.render(text).solid(Color::RED).unwrap();
|
let rendered_text = self.font.render(text).solid(Color::RED).unwrap();
|
||||||
let texture_creator = self.canvas.texture_creator();
|
let texture_creator = self.canvas.texture_creator();
|
||||||
let texture = rendered_text.as_texture(&texture_creator).unwrap();
|
let texture = rendered_text.as_texture(&texture_creator).unwrap();
|
||||||
|
|
@ -31,7 +31,7 @@ impl Screen<'_> {
|
||||||
|
|
||||||
/// Initialize video, allocate buffers and load fonts
|
/// Initialize video, allocate buffers and load fonts
|
||||||
/// Based on https://github.com/vhspace/sdl3-rs/blob/master/examples/ttf-demo.rs
|
/// Based on https://github.com/vhspace/sdl3-rs/blob/master/examples/ttf-demo.rs
|
||||||
pub fn _init(prefs: &Prefs) -> Screen<'_> {
|
pub fn init(prefs: &Prefs) -> Screen<'_> {
|
||||||
// Initialize the screen
|
// Initialize the screen
|
||||||
let sdl_context = sdl3::init().unwrap();
|
let sdl_context = sdl3::init().unwrap();
|
||||||
let video_subsys = sdl_context.video().unwrap();
|
let video_subsys = sdl_context.video().unwrap();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue