From 84b714555099e1451f7f81af6adc7ad0b5198e02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Mikrut?= Date: Thu, 2 Nov 2023 20:44:20 +0100 Subject: [PATCH] G --- Cargo.lock | 1 + czkawka_slint_gui/Cargo.toml | 1 + czkawka_slint_gui/src/common.rs | 12 ++++++++++ czkawka_slint_gui/src/settings.rs | 38 +++++++++++++++++++++++-------- 4 files changed, 42 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c7bbe65..0cdabc6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1332,6 +1332,7 @@ dependencies = [ "crossbeam-channel", "czkawka_core", "handsome_logger", + "home", "open", "rand", "rfd", diff --git a/czkawka_slint_gui/Cargo.toml b/czkawka_slint_gui/Cargo.toml index 3674b2d..34dfacf 100644 --- a/czkawka_slint_gui/Cargo.toml +++ b/czkawka_slint_gui/Cargo.toml @@ -28,6 +28,7 @@ open = "5.0.0" crossbeam-channel = "0.5.8" handsome_logger = "0.8.0" rfd = { version = "0.12.0", default-features = false, features = ["xdg-portal"] } +home = "0.5.5" [build-dependencies] #slint-build = "1.2.2" diff --git a/czkawka_slint_gui/src/common.rs b/czkawka_slint_gui/src/common.rs index 8b13789..66c9120 100644 --- a/czkawka_slint_gui/src/common.rs +++ b/czkawka_slint_gui/src/common.rs @@ -1 +1,13 @@ +use slint::{ModelRc, SharedString, StandardListViewItem, VecModel}; +pub fn create_string_standard_list_view(items: &[String]) -> ModelRc { + let new_folders_standard_list_view = items + .iter() + .map(|x| { + let mut element = StandardListViewItem::default(); + element.text = SharedString::from(x.to_string()); + element + }) + .collect::>(); + ModelRc::new(VecModel::from(new_folders_standard_list_view)) +} diff --git a/czkawka_slint_gui/src/settings.rs b/czkawka_slint_gui/src/settings.rs index 8bb6cd0..896f249 100644 --- a/czkawka_slint_gui/src/settings.rs +++ b/czkawka_slint_gui/src/settings.rs @@ -1,26 +1,44 @@ use crate::MainWindow; use std::env; +use crate::common::create_string_standard_list_view; use crate::Settings; +use home::home_dir; use slint::{ComponentHandle, ModelRc, SharedString, StandardListViewItem, VecModel}; + +#[cfg(target_family = "unix")] +const DEFAULT_EXCLUDED_DIRECTORIES: &[&str] = &["/proc", "/dev", "/sys", "/run", "/snap"]; +#[cfg(not(target_family = "unix"))] +const DEFAULT_EXCLUDED_DIRECTORIES: &[&str] = &["C:\\Windows"]; + pub fn reset_settings(app: &MainWindow) { let settings = app.global::(); // app.width(1000); app.invoke_set_console_text(SharedString::from("")); - // Get current folder where executed binary is - let current_folder = env::current_dir(); + // Included directories let mut included_directories = vec![]; - if let Ok(current_dir) = current_folder { + if let Ok(current_dir) = env::current_dir() { included_directories.push(current_dir.to_string_lossy().to_string()); + } else { + if let Some(home_dir) = home_dir() { + included_directories.push(home_dir.to_string_lossy().to_string()); + } else { + if cfg!(target_family = "unix") { + included_directories.push("/".to_string()); + } else { + included_directories.push("C:\\".to_string()); + } + } }; + included_directories.sort(); + let included_items = create_string_standard_list_view(&included_directories); + settings.set_included_directories(included_items); - let included_items = VecModel::default(); - for i in included_directories { - let mut element = StandardListViewItem::default(); - element.text = SharedString::from(i); - included_items.push(element); - } - settings.set_included_directories(ModelRc::new(included_items)); + // Excluded directories + let mut excluded_directories = DEFAULT_EXCLUDED_DIRECTORIES.iter().map(|x| x.to_string()).collect::>(); + excluded_directories.sort(); + let excluded_items = create_string_standard_list_view(&excluded_directories); + settings.set_excluded_directories(excluded_items); }