diff --git a/widget/src/main.rs b/widget/src/main.rs index f4752c4..4d29fc1 100644 --- a/widget/src/main.rs +++ b/widget/src/main.rs @@ -1,10 +1,9 @@ use owm_rs::free_api_v25::current::WeatherResponse; use owm_widg_config::config::Config; use owm_widg_config::general::ApiVersion; -use slint::SharedString; use std::fs; -slint::include_modules!(); +mod show_popup; fn main() -> Result<(), Box> { let path = dirs::config_dir() @@ -46,39 +45,19 @@ fn main() -> Result<(), Box> { "standard" => 'K', _ => '?', }; - - // Create and show the UI - let ui = MainWindow::new()?; - ui.set_city(SharedString::from(city)); - ui.set_country(SharedString::from(country)); - ui.set_weather_main(SharedString::from(weather_main)); - ui.set_weather_description(SharedString::from(weather_description)); - ui.set_weather_icon(SharedString::from(icon_to_nerd_font(&icon))); - ui.set_temperature(SharedString::from(temperature)); - ui.set_unit(SharedString::from(unit)); - - ui.run()?; + + show_popup::show_popup( + city, + country, + weather_main, + weather_description, + icon, + temperature, + unit, + )?; } other => return Err(format!("Unsupported api_version: {other:?}").into()), } Ok(()) } - -/// Convert OWM icon codes (e.g. "01d", "09n") to Nerd Font weather glyphs. -fn icon_to_nerd_font(code: &str) -> String { - match code { - "01d" => "", // clear day - "01n" => "", // clear night - "02d" | "02n" => "", // few clouds - "03d" | "03n" => "", // scattered clouds - "04d" | "04n" => "", // broken clouds - "09d" | "09n" => "", // shower rain - "10d" | "10n" => "", // rain - "11d" | "11n" => "", // thunderstorm - "13d" | "13n" => "", // snow - "50d" | "50n" => "", // mist - _ => "", - } - .into() -} diff --git a/widget/src/show_popup.rs b/widget/src/show_popup.rs new file mode 100644 index 0000000..3c3e50a --- /dev/null +++ b/widget/src/show_popup.rs @@ -0,0 +1,44 @@ +use slint::SharedString; + +slint::include_modules!(); + +/// Create and show the UI window populated with weather data. +pub fn show_popup( + city: String, + country: String, + weather_main: String, + weather_description: String, + icon_code: String, + temperature: String, + unit: char, +) -> Result<(), Box> { + let ui = MainWindow::new()?; + ui.set_city(SharedString::from(city)); + ui.set_country(SharedString::from(country)); + ui.set_weather_main(SharedString::from(weather_main)); + ui.set_weather_description(SharedString::from(weather_description)); + ui.set_weather_icon(SharedString::from(icon_to_nerd_font(&icon_code))); + ui.set_temperature(SharedString::from(temperature)); + ui.set_unit(SharedString::from(unit)); + + ui.run()?; + Ok(()) +} + +/// Convert OWM icon codes (e.g. "01d", "09n") to Nerd Font weather glyphs. +fn icon_to_nerd_font(code: &str) -> String { + match code { + "01d" => "", // clear day + "01n" => "", // clear night + "02d" | "02n" => "", // few clouds + "03d" | "03n" => "", // scattered clouds + "04d" | "04n" => "", // broken clouds + "09d" | "09n" => "", // shower rain + "10d" | "10n" => "", // rain + "11d" | "11n" => "", // thunderstorm + "13d" | "13n" => "", // snow + "50d" | "50n" => "", // mist + _ => "", + } + .into() +}