diff --git a/krokiet/src/connect_scan.rs b/krokiet/src/connect_scan.rs index f7a04b7..effa5b4 100644 --- a/krokiet/src/connect_scan.rs +++ b/krokiet/src/connect_scan.rs @@ -161,14 +161,14 @@ fn write_duplicate_results(app: &MainWindow, vector: Vec<(Option for (ref_fe, vec_fe) in vector { if let Some(ref_fe) = ref_fe { let (data_model_str, data_model_int) = prepare_data_model_duplicates(&ref_fe); - insert_data_to_model(&items, data_model_str, data_model_int, true); + insert_data_to_model(&items, data_model_str, data_model_int, Some(true)); } else { - insert_data_to_model(&items, ModelRc::new(VecModel::default()), ModelRc::new(VecModel::default()), true); + insert_data_to_model(&items, ModelRc::new(VecModel::default()), ModelRc::new(VecModel::default()), Some(false)); } for fe in vec_fe { let (data_model_str, data_model_int) = prepare_data_model_duplicates(&fe); - insert_data_to_model(&items, data_model_str, data_model_int, false); + insert_data_to_model(&items, data_model_str, data_model_int, None); } } app.set_duplicate_files_model(items.into()); @@ -214,7 +214,7 @@ fn write_empty_folders_results(app: &MainWindow, vector: Vec, messa let items = Rc::new(VecModel::default()); for fe in vector { let (data_model_str, data_model_int) = prepare_data_model_empty_folders(&fe); - insert_data_to_model(&items, data_model_str, data_model_int, false); + insert_data_to_model(&items, data_model_str, data_model_int, None); } app.set_empty_folder_model(items.into()); app.invoke_scan_ended(format!("Found {items_found} empty folders").into()); @@ -245,7 +245,12 @@ fn scan_big_files(a: Weak, progress_sender: Sender, st let mut vector = finder.get_big_files().clone(); let messages = finder.get_text_messages().create_messages_text(); - vector.par_sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path())); + // TODO - if biggest files + if true { + vector.par_sort_unstable_by_key(|fe| u64::MAX - fe.size); + } else { + vector.par_sort_unstable_by_key(|fe| fe.size); + } a.upgrade_in_event_loop(move |app| { write_big_files_results(&app, vector, messages); @@ -258,7 +263,7 @@ fn write_big_files_results(app: &MainWindow, vector: Vec, messages: S let items = Rc::new(VecModel::default()); for fe in vector { let (data_model_str, data_model_int) = prepare_data_model_big_files(&fe); - insert_data_to_model(&items, data_model_str, data_model_int, false); + insert_data_to_model(&items, data_model_str, data_model_int, None); } app.set_big_files_model(items.into()); app.invoke_scan_ended(format!("Found {items_found} files").into()); @@ -304,7 +309,7 @@ fn write_empty_files_results(app: &MainWindow, vector: Vec, messages: let items = Rc::new(VecModel::default()); for fe in vector { let (data_model_str, data_model_int) = prepare_data_model_empty_files(&fe); - insert_data_to_model(&items, data_model_str, data_model_int, false); + insert_data_to_model(&items, data_model_str, data_model_int, None); } app.set_empty_files_model(items.into()); app.invoke_scan_ended(format!("Found {items_found} empty files").into()); @@ -379,14 +384,14 @@ fn write_similar_images_results(app: &MainWindow, vector: Vec<(Option for (ref_fe, vec_fe) in vector { if let Some(ref_fe) = ref_fe { let (data_model_str, data_model_int) = crate::connect_scan::prepare_data_model_similar_music(&ref_fe); - insert_data_to_model(&items, data_model_str, data_model_int, true); + insert_data_to_model(&items, data_model_str, data_model_int, Some(true)); } else { - insert_data_to_model(&items, ModelRc::new(VecModel::default()), ModelRc::new(VecModel::default()), true); + insert_data_to_model(&items, ModelRc::new(VecModel::default()), ModelRc::new(VecModel::default()), Some(false)); } for fe in vec_fe { let (data_model_str, data_model_int) = crate::connect_scan::prepare_data_model_similar_music(&fe); - insert_data_to_model(&items, data_model_str, data_model_int, false); + insert_data_to_model(&items, data_model_str, data_model_int, None); } } app.set_similar_music_model(items.into()); @@ -576,7 +581,7 @@ fn write_invalid_symlinks_results(app: &MainWindow, vector: Vec, messag let items = Rc::new(VecModel::default()); for fe in vector { let (data_model_str, data_model_int) = crate::connect_scan::prepare_data_model_broken_files(&fe); - insert_data_to_model(&items, data_model_str, data_model_int, false); + insert_data_to_model(&items, data_model_str, data_model_int, None); } app.set_broken_files_model(items.into()); app.invoke_scan_ended(format!("Found {items_found} files").into()); @@ -709,7 +714,7 @@ fn write_bad_extensions_results(app: &MainWindow, vector: Vec, mes let items = Rc::new(VecModel::default()); for fe in vector { let (data_model_str, data_model_int) = prepare_data_model_bad_extensions(&fe); - insert_data_to_model(&items, data_model_str, data_model_int, false); + insert_data_to_model(&items, data_model_str, data_model_int, None); } app.set_bad_extensions_model(items.into()); app.invoke_scan_ended(format!("Found {items_found} files with bad extensions").into()); @@ -725,10 +730,11 @@ fn prepare_data_model_bad_extensions(fe: &BadFileEntry) -> (ModelRc>, data_model_str: ModelRc, data_model_int: ModelRc, header_row: bool) { +fn insert_data_to_model(items: &Rc>, data_model_str: ModelRc, data_model_int: ModelRc, full_header_row: Option) { let main = MainListModel { checked: false, - header_row, + header_row: full_header_row.is_some(), + full_header_row: full_header_row.unwrap_or(false), selected_row: false, val_str: ModelRc::new(data_model_str), val_int: ModelRc::new(data_model_int), diff --git a/krokiet/ui/common.slint b/krokiet/ui/common.slint index 6a9f2ed..0145755 100644 --- a/krokiet/ui/common.slint +++ b/krokiet/ui/common.slint @@ -28,6 +28,7 @@ export struct ProgressToSend { export struct MainListModel { checked: bool, header_row: bool, + full_header_row: bool, selected_row: bool, val_str: [string], val_int: [int] diff --git a/krokiet/ui/main_lists.slint b/krokiet/ui/main_lists.slint index c7d4f12..cc24d08 100644 --- a/krokiet/ui/main_lists.slint +++ b/krokiet/ui/main_lists.slint @@ -10,21 +10,21 @@ import {About} from "about.slint"; export component MainList { in-out property <[MainListModel]> duplicate_files_model: []; in-out property <[MainListModel]> empty_folder_model: [ - {checked: false, selected_row: false, header_row: false, val_str: ["kropkarz", "/Xd1", "24.10.2023"], val_int: []} , - {checked: false, selected_row: false, header_row: false, val_str: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"], val_int: []}, - {checked: true, selected_row: false, header_row: false, val_str: ["lokkaler", "/Xd1/Vide2", "01.23.1911"], val_int: []} + {checked: false, selected_row: false, header_row: false, full_header_row: false, val_str: ["kropkarz", "/Xd1", "24.10.2023"], val_int: []} , + {checked: false, selected_row: false, header_row: false, full_header_row: false, val_str: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"], val_int: []}, + {checked: true, selected_row: false, header_row: false, full_header_row: false, val_str: ["lokkaler", "/Xd1/Vide2", "01.23.1911"], val_int: []} ]; in-out property <[MainListModel]> big_files_model: []; in-out property <[MainListModel]> empty_files_model: [ - {checked: false, selected_row: false, header_row: false, val_str: ["kropkarz", "/Xd1", "24.10.2023"], val_int: []} , - {checked: false, selected_row: false, header_row: false, val_str: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"], val_int: []}, - {checked: true, selected_row: false, header_row: false, val_str: ["lokkaler", "/Xd1/Vide2", "01.23.1911"], val_int: []} + {checked: false, selected_row: false, header_row: false, full_header_row: false, val_str: ["kropkarz", "/Xd1", "24.10.2023"], val_int: []} , + {checked: false, selected_row: false, header_row: false, full_header_row: false, val_str: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"], val_int: []}, + {checked: true, selected_row: false, header_row: false, full_header_row: false, val_str: ["lokkaler", "/Xd1/Vide2", "01.23.1911"], val_int: []} ]; in-out property <[MainListModel]> temporary_files_model: []; in-out property <[MainListModel]> similar_images_model: [ - {checked: false, selected_row: false, header_row: true, val_str: ["Original", "500KB", "100x100", "kropkarz", "/Xd1", "24.10.2023"], val_int: []}, - {checked: false, selected_row: false, header_row: false, val_str: ["Similar", "500KB", "100x100", "witasphere", "/Xd1/Imagerren2", "25.11.1991"], val_int: []}, - {checked: true, selected_row: false, header_row: false, val_str: ["Similar", "500KB", "100x100", "lokkaler", "/Xd1/Vide2", "01.23.1911"], val_int: []} + {checked: false, selected_row: false, header_row: true, full_header_row: false, val_str: ["Original", "500KB", "100x100", "kropkarz", "/Xd1", "24.10.2023"], val_int: []}, + {checked: false, selected_row: false, header_row: false, full_header_row: false, val_str: ["Similar", "500KB", "100x100", "witasphere", "/Xd1/Imagerren2", "25.11.1991"], val_int: []}, + {checked: true, selected_row: false, header_row: false, full_header_row: false, val_str: ["Similar", "500KB", "100x100", "lokkaler", "/Xd1/Vide2", "01.23.1911"], val_int: []} ]; in-out property <[MainListModel]> similar_videos_model: []; in-out property <[MainListModel]> similar_music_model: []; diff --git a/krokiet/ui/selectable_tree_view.slint b/krokiet/ui/selectable_tree_view.slint index 8a0c730..a526ba4 100644 --- a/krokiet/ui/selectable_tree_view.slint +++ b/krokiet/ui/selectable_tree_view.slint @@ -9,10 +9,10 @@ export component SelectableTableView inherits Rectangle { callback item_opened(string); in property <[string]> columns; in-out property <[MainListModel]> values: [ - {checked: false, selected_row: false, header_row: true, val_str: ["kropkarz", "/Xd1", "24.10.2023"], val_int: []} , - {checked: false, selected_row: false, header_row: false, val_str: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"], val_int: []} , - {checked: false, selected_row: false, header_row: false, val_str: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"], val_int: []} , - {checked: true, selected_row: false, header_row: false, val_str: ["lokkaler", "/Xd1/Vide2", "01.23.1911"], val_int: []} + {checked: false, selected_row: false, header_row: true, full_header_row: false, val_str: ["kropkarz", "/Xd1", "24.10.2023"], val_int: []} , + {checked: false, selected_row: false, header_row: false, full_header_row: false, val_str: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"], val_int: []} , + {checked: false, selected_row: false, header_row: false, full_header_row: false, val_str: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"], val_int: []} , + {checked: true, selected_row: false, header_row: false, full_header_row: false, val_str: ["lokkaler", "/Xd1/Vide2", "01.23.1911"], val_int: []} ]; in-out property <[length]> column_sizes: [30px, 80px, 150px, 160px]; private property column_number: column-sizes.length + 1; @@ -96,11 +96,17 @@ export component SelectableTableView inherits Rectangle { } } double-clicked => { + if (r.header_row && !r.full_header_row) { + return; + } Callabler.item_opened(r.val_str[root.parentPathIdx - 1] + "/" + r.val_str[root.fileNameIdx - 1]) } pointer-event(event) => { // TODO this should be clicked by double-click - https://github.com/slint-ui/slint/issues/4235 if (event.button == PointerEventButton.right && event.kind == PointerEventKind.up) { + if (r.header_row && !r.full_header_row) { + return; + } Callabler.item_opened(r.val_str[root.parentPathIdx - 1]) } else if (event.button == PointerEventButton.left && event.kind == PointerEventKind.up) { clicked_manual();