diff options
| author | Namilskyy <alive6863@gmail.com> | 2025-11-22 22:48:35 +0300 |
|---|---|---|
| committer | Namilskyy <alive6863@gmail.com> | 2025-11-22 22:52:57 +0300 |
| commit | 6507f87521dfdfcbbaf596067dfb79d798ed8c14 (patch) | |
| tree | 8453d9e69c3f0bbf614ba7badfd52e3b2ad43a94 /src | |
| parent | df581338516220da499857b2c7af8d4d7fe5788a (diff) | |
Implemented automatic cache-update if internet connected.
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.rs | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/src/main.rs b/src/main.rs index 615ed4a..46334a2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -30,8 +30,8 @@ SOFTWARE. */ use std::{ - fs::{self, File}, - path::PathBuf, + fs::{self, File}, + path::PathBuf }; use clap::{Parser, Subcommand}; @@ -103,7 +103,7 @@ fn clean_cache() -> Result<(), Box<dyn std::error::Error>> { Ok(()) } -fn rebuild_cache() -> Result<(), Box<dyn std::error::Error>> { +fn rebuild_cache(quiet: bool) -> Result<(), Box<dyn std::error::Error>> { let rt = tokio::runtime::Runtime::new()?; let weather_data = rt.block_on(parse_weather())?; @@ -114,8 +114,10 @@ fn rebuild_cache() -> Result<(), Box<dyn std::error::Error>> { let cache_path = format!("{}/weather.json", cache_dir); let json_data = serde_json::to_string_pretty(&weather_data)?; fs::write(&cache_path, json_data)?; - - println!("Cache rebuilt successfully"); + + if !quiet { + println!("Cache rebuilt successfully"); + } Ok(()) } @@ -181,6 +183,8 @@ fn generate_weather_table_content(data: &WeatherData) -> Vec<String> { lines } + + fn main() -> Result<(), Box<dyn std::error::Error>> { let cli = Cli::parse(); @@ -216,12 +220,19 @@ fn main() -> Result<(), Box<dyn std::error::Error>> { } Some(Commands::Today) => { // to much vars - let data: WeatherData = parse_cached()?; + let data: WeatherData; + if rebuild_cache(true).is_err() { + data = parse_cached()?; + } else { + let rt = tokio::runtime::Runtime::new()?; + data = rt.block_on(parse_weather())?; + } + let art_string = prepare_art(&data, false)?; let table_lines = generate_weather_table_content(&data); let art_lines: Vec<&str> = art_string.lines().collect(); - + let max_art_width = art_lines.iter().map(|line| visible_length(line)).max().unwrap_or(0); let max_lines = art_lines.len().max(table_lines.len()); @@ -262,7 +273,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> { } Some(Commands::RebuildCache) => { println!("Rebuild cache command"); - rebuild_cache()?; + rebuild_cache(false)?; Ok(()) } Some(Commands::CheckCfg) => { |
