diff options
| author | Fuwn <[email protected]> | 2024-01-09 23:34:40 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2024-01-09 23:34:40 -0800 |
| commit | fa9f5f70a5221bb940354f3e4d978d4312af77e4 (patch) | |
| tree | 06a8fd1e6c254fae373459a606bf3b256ccb8efe /src/main.rs | |
| download | rin-fa9f5f70a5221bb940354f3e4d978d4312af77e4.tar.xz rin-fa9f5f70a5221bb940354f3e4d978d4312af77e4.zip | |
feat: initial release
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..38c9103 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,76 @@ +#![deny( + warnings, + nonstandard_style, + unused, + future_incompatible, + rust_2018_idioms, + unsafe_code +)] +#![deny(clippy::all, clippy::nursery, clippy::pedantic)] +#![recursion_limit = "128"] +#![allow(clippy::cast_precision_loss)] + +use thirtyfour::error::WebDriverResult; + +mod schedule; +mod web; +mod week; + +#[derive(serde::Serialize, serde::Deserialize)] +struct Cache { + schedule: schedule::MarkdownMap, + last_updated: std::time::SystemTime, +} + +#[tokio::main] +async fn main() -> WebDriverResult<()> { + let cache = format!("{}/rin_cache", std::env::temp_dir().display()); + + if std::path::Path::new(&cache).exists() + && std::env::var("RIN_CACHE_BUST").unwrap_or_else(|_| "0".to_string()) + != "1" + { + let schedule: Cache = serde_json::from_str( + &std::fs::read_to_string(&cache).expect("failed to read cache"), + ) + .expect("failed to parse cache"); + + if schedule + .last_updated + .elapsed() + .unwrap() + .as_secs() + .checked_div(60) + .unwrap() + .checked_div(60) + .unwrap() + < 24 + { + schedule::render_markdown(&schedule.schedule).await; + + return Ok(()); + } + } + + let mut geckodriver = + web::geckodriver().expect("failed to start geckodriver"); + let driver = web::webdriver().await.expect("failed to start webdriver"); + let markdown = + schedule::to_markdown(&driver).await.expect("failed to get schedule"); + let schedule = schedule::markdown_to_map(&markdown); + + std::fs::write( + cache, + serde_json::to_string(&Cache { + schedule: schedule.clone(), + last_updated: std::time::SystemTime::now(), + }) + .unwrap(), + ) + .unwrap(); + schedule::render_markdown(&schedule).await; + driver.quit().await.expect("failed to quit webdriver"); + geckodriver.kill().await.expect("failed to kill geckodriver"); + + Ok(()) +} |