1
0
Fork 0
mirror of synced 2024-06-23 08:30:52 +12:00
czkawka/czkawka_slint_gui/src/main.rs

114 lines
3.7 KiB
Rust
Raw Normal View History

2023-10-28 07:07:36 +13:00
#![allow(clippy::comparison_chain)]
2023-10-30 09:11:07 +13:00
#![allow(clippy::collapsible_if)]
#![allow(clippy::overly_complex_bool_expr)] // Generated code
#![allow(clippy::semicolon_if_nothing_returned)] // Generated code
#![allow(clippy::used_underscore_binding)] // Generated code
#![allow(clippy::unreadable_literal)] // Generated code
#![allow(clippy::float_cmp)] // Generated code
#![allow(clippy::no_effect_underscore_binding)] // Generated code
#![allow(clippy::uninlined_format_args)] // Generated code
#![allow(clippy::needless_pass_by_value)] // Generated code
#![allow(clippy::redundant_closure_for_method_calls)] // Generated code
#![allow(clippy::items_after_statements)] // Generated code
#![allow(clippy::match_same_arms)] // Generated code
2023-10-28 07:07:36 +13:00
2023-10-27 22:09:18 +13:00
mod common;
2023-10-21 19:36:56 +13:00
mod connect_delete;
2023-10-22 23:18:41 +13:00
mod connect_open;
2023-10-23 09:12:59 +13:00
mod connect_progress_receiver;
2023-10-21 19:36:56 +13:00
mod connect_scan;
2023-10-27 07:57:17 +13:00
mod connect_stop;
2023-11-02 04:36:38 +13:00
mod settings;
2023-10-21 19:36:56 +13:00
2023-10-23 09:12:59 +13:00
use crossbeam_channel::{unbounded, Receiver, Sender};
2023-10-21 19:36:56 +13:00
use std::path::Path;
2023-10-19 20:32:37 +13:00
use std::rc::Rc;
2023-10-21 19:36:56 +13:00
use crate::connect_delete::connect_delete_button;
2023-10-22 23:18:41 +13:00
use crate::connect_open::connect_open_items;
2023-10-21 19:36:56 +13:00
use crate::connect_scan::connect_scan_button;
2023-10-23 09:12:59 +13:00
use crate::connect_progress_receiver::connect_progress_gathering;
2023-10-27 07:57:17 +13:00
use crate::connect_stop::connect_stop_button;
2023-11-02 04:36:38 +13:00
use crate::settings::reset_settings;
2023-10-30 01:19:28 +13:00
use czkawka_core::common::setup_logger;
2023-10-23 09:12:59 +13:00
use czkawka_core::common_dir_traversal::ProgressData;
2023-10-27 22:09:18 +13:00
use slint::{ModelRc, VecModel};
2023-10-21 19:36:56 +13:00
slint::include_modules!();
2023-10-18 08:31:08 +13:00
fn main() {
2023-10-30 01:19:28 +13:00
setup_logger(false);
2023-10-27 22:09:18 +13:00
2023-10-21 19:36:56 +13:00
let app = MainWindow::new().unwrap(); //.run().unwrap();
2023-10-22 10:33:29 +13:00
2023-10-23 09:12:59 +13:00
let (progress_sender, progress_receiver): (Sender<ProgressData>, Receiver<ProgressData>) = unbounded();
2023-10-27 07:57:17 +13:00
let (stop_sender, stop_receiver): (Sender<()>, Receiver<()>) = unbounded();
2023-10-23 09:12:59 +13:00
// Fills model at start, don't really needed too much after testing
2023-10-22 10:33:29 +13:00
to_remove_debug(&app);
connect_delete_button(&app);
2023-10-27 07:57:17 +13:00
connect_scan_button(&app, progress_sender, stop_receiver);
connect_stop_button(&app, stop_sender);
2023-10-22 23:18:41 +13:00
connect_open_items(&app);
2023-10-23 09:12:59 +13:00
connect_progress_gathering(&app, progress_receiver);
2023-10-22 10:33:29 +13:00
2023-11-02 04:36:38 +13:00
reset_settings(&app);
2023-10-22 10:33:29 +13:00
app.run().unwrap();
}
// TODO remove this after trying
pub fn to_remove_debug(app: &MainWindow) {
2023-11-02 04:36:38 +13:00
let header_row_data: Rc<VecModel<MainListModel>> = Rc::new(VecModel::default());
2023-10-27 22:09:18 +13:00
for r in 0..100_000 {
2023-10-19 20:32:37 +13:00
let items = VecModel::default();
for c in 0..3 {
2023-10-23 00:07:38 +13:00
items.push(slint::format!("Item {r}.{c}"));
2023-10-19 20:32:37 +13:00
}
2023-10-27 22:09:18 +13:00
let is_header = r % 3 == 0;
let is_checked = (r % 2 == 0) && !is_header;
2023-10-29 07:08:14 +13:00
let item = MainListModel {
checked: is_checked,
header_row: is_header,
selected_row: false,
val: ModelRc::new(items),
};
2023-11-02 04:36:38 +13:00
header_row_data.push(item);
2023-10-19 20:32:37 +13:00
}
2023-11-02 04:36:38 +13:00
let non_header_row_data: Rc<VecModel<MainListModel>> = Rc::new(VecModel::default());
for r in 0..100_000 {
let items = VecModel::default();
for c in 0..3 {
items.push(slint::format!("Item {r}.{c}"));
}
let is_checked = r % 2 == 0;
let item = MainListModel {
checked: is_checked,
header_row: false,
selected_row: false,
val: ModelRc::new(items),
};
non_header_row_data.push(item);
}
app.set_empty_folder_model(non_header_row_data.clone().into());
app.set_empty_files_model(non_header_row_data.into());
app.set_similar_images_model(header_row_data.into());
2023-10-21 19:36:56 +13:00
}
pub fn split_path(path: &Path) -> (String, String) {
match (path.parent(), path.file_name()) {
(Some(dir), Some(file)) => (dir.display().to_string(), file.to_string_lossy().into_owned()),
(Some(dir), None) => (dir.display().to_string(), String::new()),
(None, _) => (String::new(), String::new()),
}
}