1
0
Fork 0
mirror of synced 2024-05-03 03:52:58 +12:00
This commit is contained in:
Rafał Mikrut 2024-02-16 17:53:13 +01:00
parent 38553afe93
commit 6a85acf341
4 changed files with 48 additions and 35 deletions

View file

@ -161,14 +161,14 @@ fn write_duplicate_results(app: &MainWindow, vector: Vec<(Option<DuplicateEntry>
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<FolderEntry>, 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<MainWindow>, progress_sender: Sender<ProgressData>, 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<FileEntry>, 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<FileEntry>, 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<ImagesEntr
for (ref_fe, vec_fe) in vector {
if let Some(ref_fe) = ref_fe {
let (data_model_str, data_model_int) = prepare_data_model_similar_images(&ref_fe, hash_size);
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_similar_images(&fe, hash_size);
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_images_model(items.into());
@ -450,14 +455,14 @@ fn write_similar_videos_results(app: &MainWindow, vector: Vec<(Option<VideosEntr
for (ref_fe, vec_fe) in vector {
if let Some(ref_fe) = ref_fe {
let (data_model_str, data_model_int) = prepare_data_model_similar_videos(&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_similar_videos(&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_videos_model(items.into());
@ -517,14 +522,14 @@ fn write_similar_music_results(app: &MainWindow, vector: Vec<(Option<MusicEntry>
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<SymlinksFileEntr
let items = Rc::new(VecModel::default());
for fe in vector {
let (data_model_str, data_model_int) = crate::connect_scan::prepare_data_model_invalid_symlinks(&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_invalid_symlinks_model(items.into());
app.invoke_scan_ended(format!("Found {items_found} invalid symlinks").into());
@ -620,7 +625,7 @@ fn write_temporary_files_results(app: &MainWindow, vector: Vec<TemporaryFileEntr
let items = Rc::new(VecModel::default());
for fe in vector {
let (data_model_str, data_model_int) = crate::connect_scan::prepare_data_model_temporary_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_temporary_files_model(items.into());
app.invoke_scan_ended(format!("Found {items_found} files").into());
@ -663,7 +668,7 @@ fn write_broken_files_results(app: &MainWindow, vector: Vec<BrokenEntry>, 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<BadFileEntry>, 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<SharedString
(data_model_str, data_model_int)
}
////////////////////////////////////////// Common
fn insert_data_to_model(items: &Rc<VecModel<MainListModel>>, data_model_str: ModelRc<SharedString>, data_model_int: ModelRc<i32>, header_row: bool) {
fn insert_data_to_model(items: &Rc<VecModel<MainListModel>>, data_model_str: ModelRc<SharedString>, data_model_int: ModelRc<i32>, full_header_row: Option<bool>) {
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),

View file

@ -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]

View file

@ -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: [];

View file

@ -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 <int> 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();