From 661d5f29f0ef3e1d171972bab64b5254e431eb24 Mon Sep 17 00:00:00 2001 From: Ammar Hussein Date: Sun, 23 Nov 2025 22:24:04 -0800 Subject: [PATCH] read game start and end time from a file --- .gitignore | 1 - Cargo.lock | 1 + Cargo.toml | 2 +- Dockerfile | 1 + src/main.rs | 15 ++++++++------- src/osm.rs | 12 ++++++++++-- 6 files changed, 21 insertions(+), 11 deletions(-) diff --git a/.gitignore b/.gitignore index 2ea973a..e2a3069 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ /target *~ -teams.json \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 801b047..012eb85 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -347,6 +347,7 @@ dependencies = [ "iana-time-zone", "js-sys", "num-traits", + "serde", "wasm-bindgen", "windows-link 0.2.1", ] diff --git a/Cargo.toml b/Cargo.toml index 37f1fd7..131c828 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,7 +5,7 @@ edition = "2024" [dependencies] actix-web = "4.12.0" -chrono = "0.4.42" +chrono = {version="0.4.42", features = ["serde"]} csv = "1.3" geo = "0.31.0" geojson = "0.24.2" diff --git a/Dockerfile b/Dockerfile index c0b7e8d..a796ea4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,6 +10,7 @@ RUN apt-get update && apt-get install -y libssl3 ca-certificates && apt-get clea COPY --from=builder /usr/src/app/Neighborhood_Map_Atlas_Neighborhoods.geojson / COPY --from=builder /usr/src/app/map.html / COPY --from=builder /usr/src/app/teams.json / +COPY --from=builder /usr/src/app/times.json / COPY --from=builder /usr/src/app/target/release/mapbattle /usr/local/bin/mapbattle EXPOSE 8080 CMD ["mapbattle"] \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 252ece8..3b2dc85 100644 --- a/src/main.rs +++ b/src/main.rs @@ -16,9 +16,6 @@ use std::io::Write; use tokio::time; use std::time::Duration; - -const DATE_FORMAT: &str = "%Y-%m-%dT%H:%M:%SZ"; - #[get("/legend-data")] async fn legend_data() -> impl Responder { let teams = read_teams(); @@ -73,11 +70,10 @@ async fn update_scores()-> Result<(), Box> { .build()?; let mut teams = read_teams(); - // Configure time range - let start_date = NaiveDateTime::parse_from_str("2025-11-13T11:55:07Z", DATE_FORMAT)?; - let end_date = NaiveDateTime::parse_from_str("2025-11-13T15:55:07Z", DATE_FORMAT)?; - + let (start_date, end_date) = read_times(); + for team in &mut teams { + team.scores.clear(); for player in team.players.clone() { println!("Processing player: {} ({})", player.username, team.name); let body = scores::get_changesets_for_user(player.username.clone(), &client).await?; @@ -101,3 +97,8 @@ fn read_teams() -> Vec { let text: String = fs::read_to_string("teams.json").expect("file should be present"); serde_json::from_str(&text).unwrap() } + +fn read_times() -> (NaiveDateTime, NaiveDateTime) { + let text: String = fs::read_to_string("times.json").expect("file should be present"); + serde_json::from_str(&text).unwrap() +} diff --git a/src/osm.rs b/src/osm.rs index c327426..e552d51 100644 --- a/src/osm.rs +++ b/src/osm.rs @@ -91,8 +91,16 @@ pub mod scores { pub async fn changesets_to_points(changesets: Vec>) -> HashMap { let mut result: HashMap = HashMap::new(); for changeset in changesets { - let min_lat = changeset.clone().into_iter().find(|att| att.name.local_name.eq("min_lat")).unwrap().value; - let min_lon = changeset.clone().into_iter().find(|att| att.name.local_name.eq("min_lon")).unwrap().value; + let min_lat = changeset.clone().into_iter().find(|att| att.name.local_name.eq("min_lat")); + if min_lat.is_none() { + continue; + } + let min_lat = min_lat.unwrap().value; + let min_lon = changeset.clone().into_iter().find(|att| att.name.local_name.eq("min_lon")); + if min_lon.is_none() { + continue; + } + let min_lon = min_lon.unwrap().value; let min_lat: f64 = min_lat.parse().unwrap_or_default(); let min_lon: f64 = min_lon.parse().unwrap_or_default(); // TODO get the points from the changes_count