diff --git a/message.html b/message.html index f4f66d1..f9051ab 100644 --- a/message.html +++ b/message.html @@ -1,3 +1,4 @@ +<br><br><br> <h2>Streiks und Ausfälle</h2> <!-- insert p element ^here^ for each known thing --> <p> diff --git a/src/index.html b/src/index.html index e1ba5fb..ce1a8e2 100644 --- a/src/index.html +++ b/src/index.html @@ -71,8 +71,8 @@ async function con(change) { } } </script> +<p> <div>Zum Bahnhof Merklingen <small>(Ankunft 8:40 <small> | Heute wenn es noch nicht 8:30 ist, sonst wird Bus von morgen geprüft</small>)</small> von</div> -<div> <button id="widderstall" onclick="con('967Widderstall')">Widderstall</button> / <button id="hohenstadt_kirche" onclick="con('967HohenstadtKirche')">Hohenstadt<small> Kirche</small></button> / <button id="hohenstadt_waltertal" onclick="con('967HohenstadtWaltertal')">Hohenstadt<small> Abzw. Waltertal</small></button> / @@ -86,15 +86,11 @@ async function con(change) { <button id="wiesensteig_schöntalweg" onclick="con('967WiesensteigSchontalweg')">Wiesensteig<small> Schöntalweg</small></button> / <button id="wiesensteig_brunnengarten" onclick="con('967WiesensteigBrunnengarten')">Wiesensteig<small> Brunnengarten</small></button> / <button id="wiesensteig_rathaus" onclick="con('967WiesensteigRathaus')">Wiesensteig<small> Rathaus</small></button> -</div> +</p> <script>con();</script> <br><br> <hr> <br><br> -%%MESSAGE%% -<br><br> -<hr> -<br><br> <p> Diese Seite soll eine einfache Möglichkeit darstellen, zu prüfen, ob der Bus und Zug von/nach Merklingen heute kommt, oder ob er mal wieder streikt oder aus sonstigen Gründen fehlt.<br> diff --git a/src/main.rs b/src/main.rs index 0f5c1b1..d093dc1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -15,7 +15,11 @@ async fn rocket() -> _ { rocket::build() .manage(Arc::new(())) .manage(Mutex::new( - Option::<(Instant, Result<bahnhof::DeparturesMerklingen, String>)>::None, + Option::<( + Instant, + Result<bahnhof::DeparturesMerklingen, String>, + String, + )>::None, )) .mount( "/", @@ -33,16 +37,30 @@ async fn rocket() -> _ { #[get("/")] async fn index( - departures: &State<Mutex<Option<(Instant, Result<bahnhof::DeparturesMerklingen, String>)>>>, + departures: &State< + Mutex< + Option<( + Instant, + Result<bahnhof::DeparturesMerklingen, String>, + String, + )>, + >, + >, ) -> RawHtml<String> { let mut departures = departures.lock().await; - if departures.as_ref().is_none_or(|(last_updated, result)| { + if departures.as_ref().is_none_or(|(last_updated, result, _)| { last_updated.elapsed() > Duration::from_secs(30 * if result.is_ok() { 5 } else { 1 }) }) { - *departures = Some((Instant::now(), bahnhof::departures_merklingen().await)) + *departures = Some(( + Instant::now(), + bahnhof::departures_merklingen().await, + tokio::fs::read_to_string("index.html") + .await + .unwrap_or_else(|_| include_str!("index.html").to_owned()), + )); } let departures_str = match &*departures { - Some((_, Ok(departures))) => { + Some((_, Ok(departures), _)) => { let mut departures_str = String::new(); departures_str.push_str(r#"<table style="width:100%;">"#); let mut table_rows = BTreeMap::<_, (String, String, usize, usize)>::new(); @@ -220,20 +238,15 @@ async fn index( departures_str.push_str("</table>"); departures_str } - Some((_, Err(e))) => format!("<small>{}</small>", html_escape::encode_safe(e)), + Some((_, Err(e), _)) => format!("<small>{}</small>", html_escape::encode_safe(e)), None => "<small>failed</small>".to_owned(), }; RawHtml( - include_str!("index.html") - .replace("%%DEPARTURES%%", &departures_str) - .replace( - "%%MESSAGE%%", - tokio::fs::read_to_string("message.html") - .await - .as_ref() - .map(|v| v.as_str()) - .unwrap_or(""), - ), + departures + .as_ref() + .map(|(_, _, index)| index.as_str()) + .unwrap_or(include_str!("index.html")) + .replace("%%DEPARTURES%%", &departures_str), ) }