2023-10-29 07:08:14 +13:00
|
|
|
use crate::MainListModel;
|
2023-11-05 22:01:37 +13:00
|
|
|
use crate::{CurrentTab, MainWindow, ProgressToSend};
|
2023-10-21 19:36:56 +13:00
|
|
|
use chrono::NaiveDateTime;
|
2023-10-27 07:57:17 +13:00
|
|
|
use crossbeam_channel::{Receiver, Sender};
|
2023-11-05 22:01:37 +13:00
|
|
|
use czkawka_core::common::split_path;
|
2023-10-23 09:12:59 +13:00
|
|
|
use czkawka_core::common_dir_traversal::ProgressData;
|
2023-10-21 19:36:56 +13:00
|
|
|
use czkawka_core::common_tool::CommonData;
|
|
|
|
use czkawka_core::empty_folder::EmptyFolder;
|
2023-10-22 02:13:27 +13:00
|
|
|
use slint::{ComponentHandle, ModelRc, SharedString, VecModel, Weak};
|
2023-10-21 19:36:56 +13:00
|
|
|
use std::path::PathBuf;
|
|
|
|
use std::rc::Rc;
|
|
|
|
use std::thread;
|
|
|
|
|
2023-10-27 07:57:17 +13:00
|
|
|
pub fn connect_scan_button(app: &MainWindow, progress_sender: Sender<ProgressData>, stop_receiver: Receiver<()>) {
|
2023-10-21 19:36:56 +13:00
|
|
|
let a = app.as_weak();
|
2023-10-27 07:57:17 +13:00
|
|
|
app.on_scan_starting(move |active_tab| {
|
2023-10-23 09:55:20 +13:00
|
|
|
let progress_sender = progress_sender.clone();
|
2023-10-27 07:57:17 +13:00
|
|
|
let stop_receiver = stop_receiver.clone();
|
2023-10-21 19:36:56 +13:00
|
|
|
let app = a.upgrade().unwrap();
|
2023-10-27 07:57:17 +13:00
|
|
|
|
2023-10-23 09:12:59 +13:00
|
|
|
app.set_progress_datas(ProgressToSend {
|
|
|
|
all_progress: 0,
|
|
|
|
current_progress: 0,
|
|
|
|
step_name: SharedString::from(""),
|
|
|
|
});
|
2023-10-21 19:36:56 +13:00
|
|
|
|
|
|
|
let a = app.as_weak();
|
|
|
|
match active_tab {
|
|
|
|
CurrentTab::EmptyFolders => {
|
2023-10-27 07:57:17 +13:00
|
|
|
scan_empty_folders(a, progress_sender, stop_receiver);
|
2023-10-21 19:36:56 +13:00
|
|
|
}
|
|
|
|
_ => panic!(),
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
2023-10-22 02:13:27 +13:00
|
|
|
|
2023-10-27 07:57:17 +13:00
|
|
|
fn scan_empty_folders(a: Weak<MainWindow>, progress_sender: Sender<ProgressData>, stop_receiver: Receiver<()>) {
|
2023-10-22 02:13:27 +13:00
|
|
|
thread::spawn(move || {
|
|
|
|
let mut ef = EmptyFolder::new();
|
2023-10-28 08:37:51 +13:00
|
|
|
ef.set_included_directory(vec![PathBuf::from("/home/rafal/Desktop")]);
|
2023-10-27 07:57:17 +13:00
|
|
|
ef.find_empty_folders(Some(&stop_receiver), Some(&progress_sender));
|
2023-10-22 02:13:27 +13:00
|
|
|
|
|
|
|
ef.get_empty_folder_list();
|
|
|
|
|
|
|
|
let mut vector = ef.get_empty_folder_list().keys().cloned().collect::<Vec<PathBuf>>();
|
|
|
|
|
|
|
|
vector.sort_unstable_by_key(|e| {
|
|
|
|
let t = split_path(e.as_path());
|
|
|
|
(t.0, t.1)
|
|
|
|
});
|
|
|
|
|
|
|
|
a.upgrade_in_event_loop(move |app| {
|
2023-10-22 10:33:29 +13:00
|
|
|
let folder_map = ef.get_empty_folder_list();
|
2023-10-22 02:13:27 +13:00
|
|
|
let items = Rc::new(VecModel::default());
|
|
|
|
for path in vector {
|
|
|
|
let (directory, file) = split_path(&path);
|
|
|
|
let data_model = VecModel::from_slice(&[
|
|
|
|
SharedString::from(file),
|
|
|
|
SharedString::from(directory),
|
|
|
|
SharedString::from(NaiveDateTime::from_timestamp_opt(folder_map[&path].modified_date as i64, 0).unwrap().to_string()),
|
|
|
|
]);
|
|
|
|
|
2023-10-29 07:08:14 +13:00
|
|
|
let main = MainListModel {
|
|
|
|
checked: false,
|
|
|
|
header_row: false,
|
|
|
|
selected_row: false,
|
|
|
|
val: ModelRc::new(data_model),
|
|
|
|
};
|
|
|
|
items.push(main);
|
2023-10-22 02:13:27 +13:00
|
|
|
}
|
|
|
|
app.set_empty_folder_model(items.into());
|
2023-10-27 07:57:17 +13:00
|
|
|
app.invoke_scan_ended();
|
2023-10-22 02:13:27 +13:00
|
|
|
})
|
|
|
|
});
|
|
|
|
}
|