diff --git a/Cargo.lock b/Cargo.lock index 7d9a277..cbf99b0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -357,9 +357,9 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "av-scenechange" @@ -501,15 +501,15 @@ dependencies = [ [[package]] name = "built" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4ad8f11f288f48ca24471bbd51ac257aaeaaa07adae295591266b792902ae64" +checksum = "5c0e531d93d39c34eef561e929e8a7f86d77a5af08aac4f6d6e39976c51858e9" [[package]] name = "bumpalo" -version = "3.20.2" +version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "bytemuck" @@ -1986,9 +1986,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.98" +version = "0.3.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08" +checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11" dependencies = [ "cfg-if", "futures-util", @@ -2029,8 +2029,10 @@ dependencies = [ "blocking", "iced", "iced_moving_picture", + "log", "rand 0.10.1", "rust-i18n", + "time-format", "toml 1.1.2+spec-1.1.0", ] @@ -2150,9 +2152,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.29" +version = "0.4.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "616ec5685824bcc94416c6d4a7a446eea774a31efd7062c8480ba6fd06d7a6e5" [[package]] name = "loop9" @@ -2813,9 +2815,9 @@ checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" [[package]] name = "orbclient" -version = "0.3.54" +version = "0.3.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a570f6bca41d29acb2139229a7c873ec99bc9a313bd10804081d89bfac8ff329" +checksum = "5df339f526ea9a60e371768d50efc2f2508c7203290731565d1f7a6f71d21747" dependencies = [ "libc", "libredox", @@ -3539,9 +3541,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.149" +version = "1.0.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" dependencies = [ "itoa", "memchr", @@ -3877,10 +3879,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand 2.4.1", - "getrandom 0.3.4", + "getrandom 0.4.2", "once_cell", "rustix 1.1.4", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -3957,6 +3959,12 @@ dependencies = [ "zune-jpeg", ] +[[package]] +name = "time-format" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caa08af685f978227b475da86d38312cd1acd5024338bf53a1ab9a799219507d" + [[package]] name = "tiny-skia" version = "0.11.4" @@ -4277,9 +4285,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.121" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790" +checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409" dependencies = [ "cfg-if", "once_cell", @@ -4290,9 +4298,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.71" +version = "0.4.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96492d0d3ffba25305a7dc88720d250b1401d7edca02cc3bcd50633b424673b8" +checksum = "9473dbd2991ae90b6291c3c32c30c6187ac49aa32f9905d1cce280ec1e110b0f" dependencies = [ "js-sys", "wasm-bindgen", @@ -4300,9 +4308,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.121" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578" +checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4310,9 +4318,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.121" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2" +checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e" dependencies = [ "bumpalo", "proc-macro2", @@ -4323,9 +4331,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.121" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441" +checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437" dependencies = [ "unicode-ident", ] @@ -4515,9 +4523,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.98" +version = "0.3.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b572dff8bcf38bad0fa19729c89bb5748b2b9b1d8be70cf90df697e3a8f32aa" +checksum = "6d621441cfc37b84979402712047321980c178f299193a3589d05b99e8763436" dependencies = [ "js-sys", "wasm-bindgen", diff --git a/Cargo.toml b/Cargo.toml index fcee38c..51ea7b5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,9 +5,11 @@ edition = "2024" [dependencies] blocking = "1.6" -iced = { version = "0.14", default-features = false, features = ["crisp", "linux-theme-detection", "web-colors", "wgpu", "x11", "wayland", "smol", "image"] } +iced = { version = "0.14", default-features = false, features = ["crisp", "linux-theme-detection", "wgpu", "x11", "wayland", "smol", "image"] } iced_moving_picture = "0" +log = "0.4" rust-i18n = "3" +time-format = "1.2" toml = "1" [dev-dependencies] @@ -15,6 +17,8 @@ rand = "0.10" [profile.release] #lto = true +debug = false codegen-units = 16 -opt-level = 2 +opt-level = 3 strip = true + diff --git a/src/kira_disk_layout.rs b/src/kira_disk_layout.rs index 57b8c14..363ce1d 100644 --- a/src/kira_disk_layout.rs +++ b/src/kira_disk_layout.rs @@ -18,7 +18,7 @@ Functions for working with disk layout */ - +use log; use std::collections::HashMap; use crate::kira_size::{KiraSize}; /// @@ -42,14 +42,14 @@ impl BlkDev { Self { name: name, size: size, - sector_size: KiraSize::new(4096), + sector_size: KiraSize::new_b(4096), } } pub fn from_hash_map(data: &HashMap) -> Option { Some(Self { name: data.get("NAME")?.clone(), size: KiraSize::from_str_bytes(data.get("SIZE")?)?, - sector_size: KiraSize::new(4096), + sector_size: KiraSize::new_b(4096), }) } /// this is blocking function @@ -192,7 +192,7 @@ impl PartInfo { Some(Self { name: data.get("NAME")?.clone(), size: KiraSize::from_str_bytes(data.get("SIZE")?)?, - start: KiraSize::new(0), + start: KiraSize::new_b(0), fs_type: FSType::from_str(data.get("FSTYPE")?), gpt_label: data .get("PARTLABEL") @@ -268,7 +268,7 @@ fn get_dev_part_blocking(dev_name: &str) -> Result, String> { /// return none if aligment is not possibe (size of partition is less than align) pub fn align_part(size: u64, start: u64, align: u64) -> Option<(u64, u64, u64)> { if size < align { - println!("if size < align !!!!!!!"); + log::debug!("if size < align !!!!!!!"); return None; } @@ -283,14 +283,14 @@ pub fn align_part(size: u64, start: u64, align: u64) -> Option<(u64, u64, u64)> // decreasing end if not align let part_end = align_start + size; let end_mod = part_end % align; - println!("part_end: {} end_mod: {}", part_end, end_mod); + log::debug!("part_end: {} end_mod: {}", part_end, end_mod); let align_end = part_end - end_mod - 1; let align_size = align_end - align_start + 1; if align_size < align { - println!( - "if align_size < align !!!!!!! align_size: {} align: {}", + log::warn!( + "!!! align_size < align !!! align_size: {} align: {}", align_size, align ); return None; @@ -316,7 +316,7 @@ impl PartLayout { pub fn read_from_disk(dev: &BlkDev) -> Result { let part_list = get_dev_part_blocking(&dev.name)?; - let parts_size = part_list.iter().fold(KiraSize::new(0), |acc, part| acc + part.size); + let parts_size = part_list.iter().fold(KiraSize::new_b(0), |acc, part| acc + part.size); Ok(Self { dev: dev.clone(), empty_space: dev.size - parts_size, @@ -351,8 +351,8 @@ impl PartLayout { let part_name = format!("{}p{}", self.dev.name, self.part_list.len() + 1); self.part_list.push(PartInfo { name: part_name, - size: KiraSize::new(size), - start: KiraSize::new(start), + size: KiraSize::new_b(size), + start: KiraSize::new_b(start), fs_type: fs_type, gpt_label: gpt_label, fs_label: fs_label, @@ -360,7 +360,7 @@ impl PartLayout { role: role, }); - self.empty_space = self.empty_space - KiraSize::new(size); + self.empty_space = self.empty_space - KiraSize::new_b(size); self } diff --git a/src/kira_size.rs b/src/kira_size.rs index 465296c..4ebbe9a 100644 --- a/src/kira_size.rs +++ b/src/kira_size.rs @@ -20,25 +20,6 @@ use std::ops::{Add, Sub}; -pub fn format_bytes_size(size: u64) -> String { - let suffixs: [&str; 5] = ["KB", "MB", "GB", "TB", "PB"]; - - if size < 1000 { - format!("{}B", size) - } else { - let mut s = size as f64; - let mut idx = 0; - for i in 0..5 { - s = s / 1024.0; - idx = i; - if s < 1000.0 { - break; - } - } - format!("{:.2}{}", s, suffixs[idx]) - } -} - #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] pub struct KiraSize { size_bytes: u64, @@ -65,7 +46,7 @@ impl std::fmt::Display for KiraSize { impl KiraSize { pub const SUFFIXS: [&str; 5] = ["KB", "MB", "GB", "TB", "PB"]; - pub fn new(size:u64) -> Self { + pub fn new_b(size:u64) -> Self { Self { size_bytes: size } } pub fn new_kb(size:u64) -> Self { @@ -104,7 +85,7 @@ impl KiraSize { } pub fn from_str_bytes(s: &str) -> Option { - Some(Self::new(u64::from_str_radix(s, 10).ok()?)) + Some(Self::new_b(u64::from_str_radix(s, 10).ok()?)) } pub fn div_c(self, other: u64) -> Self { diff --git a/src/main.rs b/src/main.rs index 6112a04..e25aa32 100644 --- a/src/main.rs +++ b/src/main.rs @@ -21,6 +21,7 @@ */ use iced::widget; +use log; use std::process::ExitCode; use iced::{Element, Task}; @@ -32,12 +33,13 @@ use crate::stages::welcome; use crate::stages::welcome::WelcomeStage; rust_i18n::i18n!("src/locales", fallback = "en"); -mod kira_theming; -mod kira_scroll_list; mod kira_color_bar; mod kira_disk_layout; +mod kira_logger; +mod kira_scroll_list; mod kira_size; mod kira_sysinfo; +mod kira_theming; mod stage; mod stages; @@ -80,7 +82,7 @@ fn load_kira_config(config_path: &str) -> Result Element<'_, Message> { match &k_state.current_view { Views::Start => Element::new(widget::space()), @@ -117,13 +118,13 @@ fn update(k_state: &mut KiraState, message: Message) -> Task { match message { Message::Start => match load_kira_config(CONFIG_PATH_STR) { Ok(conf) => { - println!("Config loaded!"); + log::info!("Config loaded!"); k_state.toml_config = conf; k_state.current_view = Views::Welcome(WelcomeStage::new()); Task::none() } Err(ex) => { - println!("Error reading config {}: {}", CONFIG_PATH_STR, ex); + log::error!("Error reading config {}: {}", CONFIG_PATH_STR, ex); iced::exit() } }, @@ -141,7 +142,7 @@ fn update(k_state: &mut KiraState, message: Message) -> Task { } else { Task::none() } - }, + } Message::License(license_message) => { if let Views::License(license_view) = &mut k_state.current_view { let action = license_view.update(license_message); @@ -163,7 +164,7 @@ fn update(k_state: &mut KiraState, message: Message) -> Task { } else { Task::none() } - }, + } Message::Network(network_message) => { if let Views::Network(network_view) = &mut k_state.current_view { let update_result = network_view.update(network_message); @@ -187,14 +188,15 @@ fn update(k_state: &mut KiraState, message: Message) -> Task { } else { Task::none() } - }, + } Message::TimeZone(timezone_message) => { if let Views::TimeZone(timezone_view) = &mut k_state.current_view { let action = timezone_view.update(timezone_message); match action { StageAction::Next(tz_res) => { k_state.config.config_trail.push(tz_res); - k_state.current_view = Views::Locale(stages::locale::LocaleStage::new(&k_state.config)); + k_state.current_view = + Views::Locale(stages::locale::LocaleStage::new(&k_state.config)); Task::none() } StageAction::Abort => iced::exit(), @@ -209,19 +211,20 @@ fn update(k_state: &mut KiraState, message: Message) -> Task { } else { Task::none() } - }, + } Message::Locale(locale_msg) => { if let Views::Locale(locale_view) = &mut k_state.current_view { match locale_view.update(locale_msg) { StageAction::Next(locale_res) => { k_state.config.config_trail.push(locale_res); - k_state.current_view = Views::Keyboard(stages::keyboard::KeyboardStage::new()); + k_state.current_view = + Views::Keyboard(stages::keyboard::KeyboardStage::new()); Task::none() } StageAction::Back => { k_state.config.config_trail.pop(); k_state.current_view = - Views::TimeZone(stages::timezone::TimeZoneStage::new()); + Views::TimeZone(stages::timezone::TimeZoneStage::new()); Task::none() } _ => Task::none(), @@ -229,7 +232,7 @@ fn update(k_state: &mut KiraState, message: Message) -> Task { } else { Task::none() } - }, + } Message::Keyboard(keyboard_msg) => { if let Views::Keyboard(keyboard_view) = &mut k_state.current_view { match keyboard_view.update(keyboard_msg) { @@ -238,17 +241,17 @@ fn update(k_state: &mut KiraState, message: Message) -> Task { Ok(part_stage) => { k_state.config.config_trail.push(keyboard_res); k_state.current_view = Views::Partition(part_stage); - }, - Err(ex) => { - println!("Error, cannot init partition stage: {}", ex); } - + Err(ex) => { + log::error!("Error, cannot init partition stage: {}", ex); + } } Task::none() } StageAction::Back => { k_state.config.config_trail.pop(); - k_state.current_view = Views::Locale(stages::locale::LocaleStage::new(&k_state.config)); + k_state.current_view = + Views::Locale(stages::locale::LocaleStage::new(&k_state.config)); Task::none() } _ => Task::none(), @@ -256,7 +259,7 @@ fn update(k_state: &mut KiraState, message: Message) -> Task { } else { Task::none() } - }, + } Message::Partition(partition_msg) => { if let Views::Partition(partition_view) = &mut k_state.current_view { match partition_view.update(partition_msg) { @@ -266,7 +269,8 @@ fn update(k_state: &mut KiraState, message: Message) -> Task { } StageAction::Back => { k_state.config.config_trail.pop(); - k_state.current_view = Views::Keyboard(stages::keyboard::KeyboardStage::new()); + k_state.current_view = + Views::Keyboard(stages::keyboard::KeyboardStage::new()); Task::none() } _ => Task::none(), @@ -278,8 +282,9 @@ fn update(k_state: &mut KiraState, message: Message) -> Task { } } - pub fn main() -> ExitCode { + // Init logger + kira_logger::init().unwrap(); let iced_result = iced::application(KiraState::boot, update, view) .window(iced::window::Settings { @@ -297,16 +302,8 @@ pub fn main() -> ExitCode { match iced_result { Ok(()) => ExitCode::SUCCESS, Err(ex) => { - println!("ICED Error: {}", ex); + log::error!("ICED Error: {}", ex); ExitCode::from(42) - }, // Custom error code + } // Custom error code } } - -// fn main() { -// println!("Hello, world!"); -// println!("{}", t!("wellcome.text")); -// // Initialize the state -// let _res = main_interface(); - -// } diff --git a/src/stages/keyboard/mod.rs b/src/stages/keyboard/mod.rs index 9b96ac8..c8a9aff 100644 --- a/src/stages/keyboard/mod.rs +++ b/src/stages/keyboard/mod.rs @@ -18,6 +18,7 @@ This is Keyboar stage, used to select Keyboard Layouts */ +use log; use crate::kira_scroll_list::{self, ListViewMessage}; use crate::stage::{StageAction, StageResult}; use iced::{Alignment, Length, widget}; @@ -254,7 +255,7 @@ impl KeyboardStage { } } Err(ex) => { - println!( + log::error!( "Exception while trying to get kayboard layouts data from system {}", ex ); diff --git a/src/stages/locale/mod.rs b/src/stages/locale/mod.rs index f4b61df..c22cff2 100644 --- a/src/stages/locale/mod.rs +++ b/src/stages/locale/mod.rs @@ -156,8 +156,6 @@ impl LocaleStage { let raw_loc_codes = get_locales_codes_list_blocking().unwrap(); let raw_loc_descr = get_locales_description_blocking().unwrap(); - //println!("{:?}", raw_loc_descr); - let locales: Vec = raw_loc_codes .iter() .filter_map(|(code, _)| { @@ -187,11 +185,6 @@ impl LocaleStage { LocaleData::default() }; - //println!("lang_match {:?}", lang_match); - //println!("loc_codes {:?}", raw_loc_codes); - - // let locale = locales.iter().find(|l| l.code == lang_match.0).cloned(); - let lang_locale_text = format!( "{}: {}", t!("locale.select_language_locale"), diff --git a/src/stages/network/mod.rs b/src/stages/network/mod.rs index b3c5cf4..55f5bb7 100644 --- a/src/stages/network/mod.rs +++ b/src/stages/network/mod.rs @@ -19,6 +19,7 @@ it needed for installation to process. */ +use log; use iced::{Alignment, Task, widget}; use iced_moving_picture::widget::apng; use rust_i18n::t; @@ -81,7 +82,7 @@ fn check_connection_blocking() -> CheckResult { } } Err(ex) => { - println!("Exception while trying to chen net connectivity: {}", ex); + log::error!("Exception while trying to chen net connectivity: {}", ex); CheckResult::CheckError } } @@ -103,10 +104,10 @@ impl NetworkStage { .and_then(|v| v.get("reqire_network")) .and_then(|v| v.as_bool()) { - println!("Config value reqire_network read {}", reqire_network_conf); + log::debug!("Config value reqire_network read {}", reqire_network_conf); reqire_network = reqire_network_conf; } else { - println!("Error parsing network config. Using default values."); + log::error!("Error parsing network config. Using default values."); } let spinner_frames = diff --git a/src/stages/partition/mod.rs b/src/stages/partition/mod.rs index 8bcf436..8e1698b 100644 --- a/src/stages/partition/mod.rs +++ b/src/stages/partition/mod.rs @@ -18,8 +18,8 @@ This is partition stage! */ +use log; use crate::stage::{StageAction, StageResult}; - use crate::kira_color_bar; use crate::kira_disk_layout::{BlkDev, FSType, PartInfo, PartLayout}; use crate::kira_size::KiraSize; @@ -28,6 +28,7 @@ use iced::{Alignment, Color, widget}; use rust_i18n::t; use toml::Table; + #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum SwapMode { NoSwap, @@ -96,7 +97,7 @@ pub enum Message { impl PartitionStage { pub fn new(toml_config: &Table) -> Result { let maybe_dev_list = BlkDev::list_sys_blk_dev(); - + log::info!("hiii from partition"); let min_disk_size_mb = toml_config .get("partition") .and_then(|v| v.as_table()) @@ -116,13 +117,13 @@ impl PartitionStage { // getting system memory info let system_ram_size = KiraSize::new_kb(kira_sysinfo::get_meminfo()["MemTotal"]); // from kB to bytes - let vram_of_all_gpus_size = KiraSize::new( + let vram_of_all_gpus_size = KiraSize::new_b( kira_sysinfo::get_gpus_list() .iter() .fold(0u64, |acc, gpi| acc + gpi.vis_vram_total), ); - println!( + log::debug!( "stage init ram {} vram {}", system_ram_size, vram_of_all_gpus_size ); @@ -144,9 +145,9 @@ impl PartitionStage { fn get_swap_size(&self) -> KiraSize { let total_ram = self.system_ram_size + self.vram_of_all_gpus_size; - println!("total_ram {}", total_ram); + log::debug!("total_ram {}", total_ram); let sys_ram_gb = self.system_ram_size.gb(); - println!("sys_ram_gb {}", sys_ram_gb); + log::debug!("sys_ram_gb {}", sys_ram_gb); let disk_swap_gb = if sys_ram_gb >= 32 { 1u64 } else if sys_ram_gb >= 24 { @@ -159,11 +160,11 @@ impl PartitionStage { sys_ram_gb * 2 }; - println!("disk_swap_gb {}", disk_swap_gb); + log::debug!("disk_swap_gb {}", disk_swap_gb); let disk_swap = KiraSize::new_gb(disk_swap_gb); - println!("disk_swap {}", disk_swap); + log::debug!("disk_swap {}", disk_swap); match self.swap_mode { - Some(SwapMode::NoSwap) => KiraSize::new(0), + Some(SwapMode::NoSwap) => KiraSize::new_b(0), Some(SwapMode::SwapHibernate) => disk_swap + total_ram, Some(SwapMode::SwapNoHibernate) => disk_swap, _ => KiraSize::new_gb(2), @@ -202,7 +203,7 @@ impl PartitionStage { .collect(), ), Err(ex) => { - println!("Error getting dev partitions info: {}", ex); + log::error!("Error getting dev partitions info: {}", ex); None } }; diff --git a/src/stages/timezone/mod.rs b/src/stages/timezone/mod.rs index 1d568fb..7ce3151 100644 --- a/src/stages/timezone/mod.rs +++ b/src/stages/timezone/mod.rs @@ -18,6 +18,7 @@ This is TimeZone stage, used to select timezone */ +use log; use crate::stage::{StageAction, StageResult}; use iced::{Alignment, Length, widget}; use rust_i18n::t; @@ -127,7 +128,7 @@ impl TimeZoneStage { } } Err(ex) => { - println!( + log::error!( "Exception while trying to get time zones list from system {}", ex );