First set of changes to use config file instead of hard-coded settings.
This commit is contained in:
parent
391380040e
commit
74aa9e8a84
11
Cargo.toml
11
Cargo.toml
|
|
@ -5,13 +5,14 @@ edition = "2024"
|
||||||
host = "x86_64-unknown-linux-gnu"
|
host = "x86_64-unknown-linux-gnu"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
sdl3 = {version = "0.17", features = ["ttf"]}
|
|
||||||
serde = "1.0"
|
|
||||||
gtfs-structures = "0.47"
|
|
||||||
chrono = "0.4"
|
chrono = "0.4"
|
||||||
log = "0.4"
|
|
||||||
zip = "8.3"
|
|
||||||
csv = "1.4"
|
csv = "1.4"
|
||||||
|
gtfs-structures = "0.47"
|
||||||
|
log = "0.4"
|
||||||
|
sdl3 = {version = "0.17", features = ["ttf"]}
|
||||||
|
serde = { "1.0", features = ["derive"]}
|
||||||
|
serde_yaml = "0.8"
|
||||||
|
zip = "8.3"
|
||||||
|
|
||||||
[profile.dev]
|
[profile.dev]
|
||||||
opt-level = 3
|
opt-level = 3
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
screen:
|
||||||
|
width: 1920
|
||||||
|
height: 720
|
||||||
|
font-path: "resources/jd_lcd_rounded.ttf"
|
||||||
|
|
||||||
|
gtfs:
|
||||||
|
routes:
|
||||||
|
- 15A
|
||||||
|
- F1
|
||||||
|
- F2
|
||||||
|
stops:
|
||||||
|
- 1114
|
||||||
|
- 2410
|
||||||
|
data-folder: "/home/nahuel/Downloads"
|
||||||
|
gtfs-url: "https://www.transportforireland.ie/transitData/Data/GTFS_Realtime.zip"
|
||||||
|
realtime-url: "https://api.nationaltransport.ie/gtfsr/v2/gtfsr"
|
||||||
|
realtime-api-key: "Not defined"
|
||||||
|
refresh-seconds: 61
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
use crate::{gtfs, renderer};
|
||||||
|
use std::collections::HashSet;
|
||||||
|
extern crate serde_derive;
|
||||||
|
extern crate serde_yaml;
|
||||||
|
|
||||||
|
struct Error {
|
||||||
|
message: String
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
||||||
|
struct Config {
|
||||||
|
#[serde(rename = "gtfs")]
|
||||||
|
pub gtfs_prefs: gtfs::structs::Preferences,
|
||||||
|
|
||||||
|
#[serde(rename = "screen")]
|
||||||
|
pub screen_prefs: renderer::structs::Prefs,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
pub fn load_config(config_name: String) -> Result<Config, Error> {
|
||||||
|
return Err(Error { message: String::from("Foo") });
|
||||||
|
}
|
||||||
|
|
@ -1,11 +1,29 @@
|
||||||
use std::collections::{HashMap, HashSet};
|
use std::collections::{HashMap, HashSet};
|
||||||
|
|
||||||
use gtfs_structures::{Agency, Calendar, CalendarDate, RawStopTime, RawTrip, Route, Stop};
|
use gtfs_structures::{Agency, Calendar, CalendarDate, RawStopTime, RawTrip, Route, Stop};
|
||||||
|
|
||||||
// This is to store the preferences for the GTFS(-R) side of the code.
|
// This is to store the preferences for the GTFS(-R) side of the code.
|
||||||
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
||||||
pub struct Preferences {
|
pub struct Preferences {
|
||||||
|
#[serde(rename = "routes")]
|
||||||
pub route_numbers: HashSet<String>,
|
pub route_numbers: HashSet<String>,
|
||||||
|
|
||||||
|
#[serde(rename = "stops")]
|
||||||
pub stop_codes: HashSet<String>,
|
pub stop_codes: HashSet<String>,
|
||||||
|
|
||||||
|
#[serde(rename = "data-folder")]
|
||||||
|
pub data_folder: String,
|
||||||
|
|
||||||
|
#[serde(rename = "gtfs-url")]
|
||||||
|
pub gtfs_url: String,
|
||||||
|
|
||||||
|
#[serde(rename = "realtime-url")]
|
||||||
|
pub realtime_url: String,
|
||||||
|
|
||||||
|
#[serde(rename = "realtime-api-key")]
|
||||||
|
pub realtime_api_key: String,
|
||||||
|
|
||||||
|
#[serde(rename = "refresh-seconds")]
|
||||||
|
pub refresh_seconds: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
23
src/main.rs
23
src/main.rs
|
|
@ -1,10 +1,11 @@
|
||||||
mod gtfs;
|
mod gtfs;
|
||||||
mod renderer;
|
mod renderer;
|
||||||
use std::{collections::HashSet, ops::Add, process, thread::Builder, time::SystemTime};
|
mod config;
|
||||||
|
use std::{ops::Add, process, thread::Builder, time::SystemTime};
|
||||||
use chrono::{DateTime, Duration, Local, NaiveTime};
|
use chrono::{DateTime, Duration, Local, NaiveTime};
|
||||||
use log::{Metadata, Record, error, info};
|
use log::{Metadata, Record, error, info};
|
||||||
use sdl3::event::Event;
|
use sdl3::event::Event;
|
||||||
use crate::{gtfs::structs::{Arrival, Gtfs}, renderer::structs::{DisplayData, DisplayEntry, Screen}};
|
use crate::{config::load_config, gtfs::structs::{Arrival, Gtfs}, renderer::structs::{DisplayData, DisplayEntry, 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;
|
||||||
|
|
@ -80,17 +81,15 @@ fn main() {
|
||||||
}
|
}
|
||||||
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 {
|
|
||||||
route_numbers: HashSet::from([String::from("15A"), String::from("F1"), String::from("F2"), String::from("F3")]),
|
|
||||||
stop_codes: HashSet::from([String::from("1114")])
|
|
||||||
};
|
|
||||||
|
|
||||||
let screen_prefs = renderer::structs::Prefs {
|
let config_result = load_config(String::from("resources/dublinbus.yaml"));
|
||||||
font_path: String::from("resources/jd_lcd_rounded/jd-lcd-rounded.ttf"),
|
if config_result.is_err() {
|
||||||
screen_width: 1920,
|
error!("Error loading the config file: {:#?}", config_result.err());
|
||||||
screen_height: 720,
|
process::exit(-1);
|
||||||
};
|
}
|
||||||
|
// Create preferences structures from config
|
||||||
|
let gtfs_prefs = config_result.unwrap().gtfs_prefs;
|
||||||
|
let screen_prefs = config_result.unwrap().screen_prefs;
|
||||||
|
|
||||||
// Init GTFS static info
|
// Init GTFS static info
|
||||||
info!("Loading GTFS data...");
|
info!("Loading GTFS data...");
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
use sdl3::{Sdl, pixels::Color, render::Canvas, ttf::Font, video::Window};
|
use sdl3::{Sdl, pixels::Color, render::Canvas, ttf::Font, video::Window};
|
||||||
|
extern crate serde;
|
||||||
|
extern crate serde_derive;
|
||||||
|
|
||||||
pub struct Screen<'a> {
|
pub struct Screen<'a> {
|
||||||
pub(crate) canvas: Box<Canvas<Window>>,
|
pub(crate) canvas: Box<Canvas<Window>>,
|
||||||
|
|
@ -8,9 +9,16 @@ pub struct Screen<'a> {
|
||||||
pub(crate) context: Box<Sdl>
|
pub(crate) context: Box<Sdl>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
||||||
pub struct Prefs {
|
pub struct Prefs {
|
||||||
|
|
||||||
|
#[serde(rename = "font-path")]
|
||||||
pub font_path: String,
|
pub font_path: String,
|
||||||
|
|
||||||
|
#[serde(rename = "width")]
|
||||||
pub screen_width: u32,
|
pub screen_width: u32,
|
||||||
|
|
||||||
|
#[serde(rename = "height")]
|
||||||
pub screen_height: u32,
|
pub screen_height: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue