diff options
| author | Namilskyy <alive6863@gmail.com> | 2025-11-20 21:42:12 +0300 |
|---|---|---|
| committer | Namilskyy <alive6863@gmail.com> | 2025-11-22 22:52:44 +0300 |
| commit | a4ab1c48ab4238d9eba614e20cc0cfbd214ad2d5 (patch) | |
| tree | 5605dedcbd8cd635fb65420bb24c24b37a4dfbd3 | |
| parent | 749ef303695d1633bac01e2e9ddbf02a54bfdfda (diff) | |
Added colours ASCII art support, added debug mode.
| -rw-r--r-- | src/main.rs | 24 | ||||
| -rw-r--r-- | src/parser.rs | 18 |
2 files changed, 38 insertions, 4 deletions
diff --git a/src/main.rs b/src/main.rs index 1cc3959..308e6db 100644 --- a/src/main.rs +++ b/src/main.rs @@ -61,7 +61,8 @@ enum Commands { Tomorrow, RebuildCache, CheckCfg, - Credits + Credits, + DebugOutput } /// Micro config-validator, easily you can just `wfetch fetch` and see the error @@ -210,7 +211,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> { Some(Commands::Today) => { // to much vars let data: WeatherData = parse_cached()?; - let art_string = prepare_art(&data)?; + let art_string = prepare_art(&data, false)?; let table_lines = generate_weather_table_content(&data); let art_lines: Vec<&str> = art_string.lines().collect(); @@ -231,6 +232,25 @@ fn main() -> Result<(), Box<dyn std::error::Error>> { println!("Tomorrow weather command"); Ok(()) } + Some(Commands::DebugOutput) => { + let data: WeatherData = parse_cached()?; + let art_string = prepare_art(&data, true)?; + 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| line.len()).max().unwrap_or(0); + + let max_lines = art_lines.len().max(table_lines.len()); + + for i in 0..max_lines { + let art_part = art_lines.get(i).unwrap_or(&""); + let table_part = table_lines.get(i).map(|s| s.as_str()).unwrap_or(""); + + println!("{:<width$} {}", art_part, table_part, width = max_art_width); + } + Ok(()) + } Some(Commands::RebuildCache) => { println!("Rebuild cache command"); rebuild_cache()?; diff --git a/src/parser.rs b/src/parser.rs index 6b9107d..6a5166d 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -136,7 +136,7 @@ pub fn determine_weather_type(temp: f32, humidity: Option<u32>) -> &'static str fn load_arts() -> Result<ArtsData, Box<dyn std::error::Error>> { let home = std::env::var("HOME")?; let arts_path = format!("{}/.config/WeatherFetch/arts.yaml", home); - + let content = match fs::read_to_string(&arts_path) { Ok(c) => c, Err(_) => { @@ -151,6 +151,7 @@ fn load_arts() -> Result<ArtsData, Box<dyn std::error::Error>> { }); } }; + println!("--- RAW FILE CONTENT START ---\n{}\n--- RAW FILE CONTENT END ---", content); let arts: Arts = serde_yml::from_str(&content)?; Ok(arts.arts) @@ -170,7 +171,7 @@ fn process_placeholders(art: &str) -> String { /// Usage: /// let data: WeatherData = parse_cached()?; /// prepare_art(&data); -pub fn prepare_art(weather_data: &WeatherData) -> Result<String, Box<dyn std::error::Error>> { +pub fn prepare_art(weather_data: &WeatherData, debug: bool) -> Result<String, Box<dyn std::error::Error>> { let arts = load_arts()?; let weather_type = determine_weather_type( @@ -184,8 +185,21 @@ pub fn prepare_art(weather_data: &WeatherData) -> Result<String, Box<dyn std::er "sun" => &arts.sun, _ => &arts.sun, }; + + if(debug == true) { + println!("-- RAW SELECTED ART (debug):\n{:?}\n", selected_art); + println!("-- RAW SELECTED ART (display):\n{}\n", selected_art); + } let processed_art = process_placeholders(selected_art); + if(debug == true) { + println!("-- PROCESSED ART (debug):\n{:?}\n", processed_art); + println!("-- PROCESSED ART (display):"); + println!("contains <Yellow>? {}", selected_art.contains("<Yellow>")); + println!("contains <Purple>? {}", selected_art.contains("<Purple>")); + println!("contains <Blue>? {}", selected_art.contains("<Blue>")); + println!("processed contains \\x1b? {}", processed_art.contains("\x1b")); + } Ok(processed_art) } |
