From 6a6dc3dc1e99dd8f79c561727c575437c37c434c Mon Sep 17 00:00:00 2001 From: Savanni D'Gerinel Date: Thu, 10 Aug 2023 09:11:05 -0400 Subject: [PATCH] Make the application update every now and then --- dashboard/src/main.rs | 23 ++++++++++++----------- dashboard/src/soluna_client.rs | 14 ++++++++++++-- 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/dashboard/src/main.rs b/dashboard/src/main.rs index 26b66eb..57a79a4 100644 --- a/dashboard/src/main.rs +++ b/dashboard/src/main.rs @@ -94,21 +94,22 @@ pub fn main() { async move { let soluna_client = SolunaClient::new(); - let transit = soluna_client - .request(latitude, longitude, Local::now()) - .await; - - let now = Local::now(); - let state = State { - date: IFC::from(now.date_naive().with_year(12023).unwrap()), - next_event: EVENTS.next_event(now.with_timezone(&Utc)).unwrap(), - transit: Some(transit), - }; loop { + let transit = soluna_client + .request(latitude.clone(), longitude.clone(), Local::now()) + .await; + + let now = Local::now(); + let state = State { + date: IFC::from(now.date_naive().with_year(12023).unwrap()), + next_event: EVENTS.next_event(now.with_timezone(&Utc)).unwrap(), + transit: Some(transit), + }; + if let Some(ref gtk_tx) = *core.tx.read().unwrap() { let _ = gtk_tx.send(Message::Refresh(state.clone())); } - std::thread::sleep(std::time::Duration::from_secs(300)); + std::thread::sleep(std::time::Duration::from_secs(60)); } } }); diff --git a/dashboard/src/soluna_client.rs b/dashboard/src/soluna_client.rs index f705043..1f023c6 100644 --- a/dashboard/src/soluna_client.rs +++ b/dashboard/src/soluna_client.rs @@ -1,7 +1,7 @@ // 41.78, -71.41 // https://api.solunar.org/solunar/41.78,-71.41,20211029,-4 -use chrono::{DateTime, Duration, NaiveTime, Offset, TimeZone, Utc}; +use chrono::{DateTime, Duration, Local, NaiveTime, Offset, TimeZone, Timelike, Utc}; use geo_types::{Latitude, Longitude}; use memorycache::MemoryCache; use reqwest; @@ -111,7 +111,17 @@ impl SolunaClient { .and_then(|header| header.to_str().ok()) .and_then(|expiration| DateTime::parse_from_rfc2822(expiration).ok()) .map(|dt_local| DateTime::::from(dt_local)) - .unwrap_or(Utc::now() + Duration::seconds(3600)); + .unwrap_or( + Local::now() + .with_hour(0) + .and_then(|dt| dt.with_minute(0)) + .and_then(|dt| dt.with_second(0)) + .and_then(|dt| dt.with_nanosecond(0)) + .map(|dt| dt.with_timezone(&Utc)) + .unwrap() + + Duration::days(1), + ); + println!("expiration: {:?}", expiration); let soluna: SunMoonJs = response.json().await.unwrap(); (expiration, soluna) })