POC in Rust Saving automically on change

This commit is contained in:
Martin Quarda 2025-05-10 20:25:16 +02:00
parent d7c5f0f048
commit ecb51125cc
5 changed files with 12 additions and 11 deletions

1
POC_in_rust/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
target

View File

@ -13,7 +13,7 @@ lazy_static = "1.5.0"
nusb = "0.1.13" nusb = "0.1.13"
reqwest = { version = "0.12.15", features = ["json", "multipart", "http2", "cookies"] } reqwest = { version = "0.12.15", features = ["json", "multipart", "http2", "cookies"] }
reqwest-middleware = "0.4.2" reqwest-middleware = "0.4.2"
rustls = "0.23.27" rustls = {version = "0.23.27", features = ["std", "prefer-post-quantum", "tls12", "logging", "ring"]}
serde = {version = "1.0.219", features=["derive"]} serde = {version = "1.0.219", features=["derive"]}
serde_json = "1.0.140" serde_json = "1.0.140"
tokio = {version = "1.45.0", features=["time", "fs", "io-util", "macros"]} tokio = {version = "1.45.0", features=["time", "fs", "io-util", "macros"]}

View File

@ -1,6 +1,5 @@
{ {
"DURATION": 600, "DURATION": 600,
"SAVING_INTERVAL": 60,
"STATION_ID": 2, "STATION_ID": 2,
"HOST": "https://beta.alkator.cz", "HOST": "https://beta.alkator.cz",
"WSS_HOST": "wss://beta.alkator.cz" "WSS_HOST": "wss://beta.alkator.cz"

View File

@ -9,7 +9,6 @@ use lazy_static::lazy_static;
#[derive(Deserialize)] #[derive(Deserialize)]
pub struct Config { pub struct Config {
pub DURATION: u64, pub DURATION: u64,
pub SAVING_INTERVAL: u64,
pub STATION_ID: usize, pub STATION_ID: usize,
pub HOST: String, pub HOST: String,
pub WSS_HOST: String, pub WSS_HOST: String,

View File

@ -1,4 +1,4 @@
use iced::time::{self, Duration, Instant, milliseconds, seconds}; use iced::time::{self, Duration, Instant, milliseconds};
use std::collections::HashMap; use std::collections::HashMap;
use std::fmt::{Formatter, Error as fmtError}; use std::fmt::{Formatter, Error as fmtError};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
@ -9,6 +9,7 @@ use tokio::io::AsyncWriteExt;
use std::fs::read_to_string; use std::fs::read_to_string;
use reqwest::Client; use reqwest::Client;
use chrono::{DateTime, Local}; use chrono::{DateTime, Local};
use iced::futures::join;
mod card_reader; mod card_reader;
@ -71,6 +72,10 @@ async fn station_register(card_id: usize, time: DateTime::<Local>) -> Result<(),
Ok(()) Ok(())
} }
async fn register_and_dump(card_id: usize, datetime: DateTime<Local>, json: String) -> (Result<(), tokio::io::Error>, Result<(), reqwest::Error>){
return join!(dump_state(json), station_register(card_id, datetime))
}
impl State{ impl State{
fn update(&mut self, message: Message) -> Task<Message>{ fn update(&mut self, message: Message) -> Task<Message>{
match message { match message {
@ -81,6 +86,8 @@ impl State{
self.db.insert(racer.card_id, racer); self.db.insert(racer.card_id, racer);
}, },
}; };
let json = serde_json::to_string(self).unwrap();
Task::perform(dump_state(json), |_| Message::Nothing)
} }
Message::Tick(time) => { Message::Tick(time) => {
if let Some(racer_time) = self.racers.iter().next() { if let Some(racer_time) = self.racers.iter().next() {
@ -91,10 +98,6 @@ impl State{
self.time = time; self.time = time;
Task::none() Task::none()
}, },
Message::DumpState(_) => {
let json = serde_json::to_string(self).unwrap();
Task::perform(dump_state(json), |_| Message::Nothing)
},
Message::Nothing => Task::none(), Message::Nothing => Task::none(),
Message::CardReader(card_reader::Event::ReadedCardId(card_id)) => { Message::CardReader(card_reader::Event::ReadedCardId(card_id)) => {
let time = Instant::now(); let time = Instant::now();
@ -107,7 +110,8 @@ impl State{
}else{ }else{
println!("Racer {} not found in db!", card_id) println!("Racer {} not found in db!", card_id)
} }
Task::perform(station_register(card_id, datetime), |_| Message::Nothing) let json = serde_json::to_string(self).unwrap();
Task::perform(register_and_dump(card_id, datetime, json), |_| Message::Nothing)
}, },
Message::CardReader(card_reader::Event::Connected) => { Message::CardReader(card_reader::Event::Connected) => {
println!("Card Reader Connected!"); println!("Card Reader Connected!");
@ -158,7 +162,6 @@ impl State{
fn subscription(&self) -> Subscription<Message> { fn subscription(&self) -> Subscription<Message> {
Subscription::batch(vec![ Subscription::batch(vec![
time::every(milliseconds(10)).map(Message::Tick), time::every(milliseconds(10)).map(Message::Tick),
time::every(seconds(CONFIG.SAVING_INTERVAL)).map(Message::DumpState),
Subscription::run(card_reader::connect).map(Message::CardReader), Subscription::run(card_reader::connect).map(Message::CardReader),
Subscription::run(db_update::connect).map(Message::RacerRecieved) Subscription::run(db_update::connect).map(Message::RacerRecieved)
]) ])
@ -178,7 +181,6 @@ enum Message{
CardReader(card_reader::Event), CardReader(card_reader::Event),
RacerRecieved(db_update::Event), RacerRecieved(db_update::Event),
Tick(Instant), Tick(Instant),
DumpState(Instant),
Nothing, Nothing,
} }