From 4d4ab3cde706295ceb1e715243af6f8904740924 Mon Sep 17 00:00:00 2001 From: Katalina Okano Date: Fri, 9 Jun 2023 15:30:46 -0400 Subject: [PATCH] add locked_since --- src/alerts.rs | 19 +++++++++---------- src/main.rs | 13 +++++++++++-- src/types.rs | 1 + src/zones.rs | 1 + 4 files changed, 22 insertions(+), 12 deletions(-) diff --git a/src/alerts.rs b/src/alerts.rs index 9471bfa..c2be4ed 100644 --- a/src/alerts.rs +++ b/src/alerts.rs @@ -8,9 +8,9 @@ use serde::Deserialize; use serde_aux::prelude::*; use std::collections::HashMap; -pub async fn get_alerts(world_id: i32) -> Result, ()> { +pub async fn get_alerts(world_id: i32) -> Result<(Vec, Vec), ()> { let response = reqwest::get(format!( - "https://census.daybreakgames.com/s:{}/get/{}/world_event/?world_id={}&type=METAGAME&c:limit=10", + "https://census.daybreakgames.com/s:{}/get/{}/world_event/?world_id={}&type=METAGAME&c:limit=15", misc::service_id(), misc::platform(world_id), world_id @@ -50,15 +50,14 @@ pub async fn get_alerts(world_id: i32) -> Result, ()> { } } - let mut active_alerts: Vec = vec![]; + let alerts: Vec = alerts.into_iter().map(|(_, v)| v).collect(); + let active_alerts: Vec = alerts + .clone() + .into_iter() + .filter(|alert| alert.end_time.is_none()) + .collect(); - for (_, alert) in alerts { - if alert.end_time.is_none() { - active_alerts.push(alert); - } - } - - Ok(active_alerts) + Ok((active_alerts, alerts)) } #[derive(Deserialize)] diff --git a/src/main.rs b/src/main.rs index d5cb09d..9e96b54 100644 --- a/src/main.rs +++ b/src/main.rs @@ -115,17 +115,26 @@ pub async fn get_world( } } - let alerts = get_alerts(world).await.unwrap(); + let (active_alerts, most_recent_alerts) = get_alerts(world).await.unwrap(); let zones = get_zone_states(world).await.unwrap(); let converged_zones: Vec = zones .into_iter() .map(|zone| { let mut zone = zone; - let alert = alerts.iter().find(|alert| alert.zone == zone.id); + let alert = active_alerts.iter().find(|alert| alert.zone == zone.id); zone.alert = alert.cloned(); + if zone.locked { + zone.locked_since = most_recent_alerts + .iter() + .find(|alert| alert.zone == zone.id) + .cloned() + .unwrap() + .end_time + } + zone }) .collect(); diff --git a/src/types.rs b/src/types.rs index 0b56736..53aeadc 100644 --- a/src/types.rs +++ b/src/types.rs @@ -14,6 +14,7 @@ pub struct Zone { pub locked: bool, pub alert: Option, pub territory: FactionPercents, + pub locked_since: Option>, } #[derive(Deserialize, Serialize, Clone, Default, Debug)] diff --git a/src/zones.rs b/src/zones.rs index fb658d2..e5e9e06 100644 --- a/src/zones.rs +++ b/src/zones.rs @@ -50,6 +50,7 @@ pub async fn get_zone_states(world_id: i32) -> Result, ()> { && warpgate_factions[1] == warpgate_factions[2], territory: calculate_faction_percents(&map_zone.regions.row), alert: None, + locked_since: None, }; zones.push(zone);