2023-10-21 19:36:56 +13:00
|
|
|
use crate::{split_path, CurrentTab, MainWindow};
|
|
|
|
use chrono::NaiveDateTime;
|
|
|
|
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;
|
|
|
|
|
|
|
|
pub fn connect_scan_button(app: &MainWindow) {
|
|
|
|
let a = app.as_weak();
|
|
|
|
app.on_scanned(move |active_tab| {
|
|
|
|
let app = a.upgrade().unwrap();
|
|
|
|
app.set_scanning(true);
|
|
|
|
|
|
|
|
let a = app.as_weak();
|
|
|
|
match active_tab {
|
|
|
|
CurrentTab::EmptyFolders => {
|
2023-10-22 02:13:27 +13:00
|
|
|
scan_empty_folders(a);
|
2023-10-21 19:36:56 +13:00
|
|
|
}
|
|
|
|
_ => panic!(),
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
2023-10-22 02:13:27 +13:00
|
|
|
|
|
|
|
fn scan_empty_folders(a: Weak<MainWindow>) {
|
|
|
|
thread::spawn(move || {
|
|
|
|
let mut ef = EmptyFolder::new();
|
|
|
|
ef.set_included_directory(vec![PathBuf::from("/home/rafal/Desktop")]);
|
|
|
|
ef.find_empty_folders(None, None);
|
|
|
|
|
|
|
|
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()),
|
|
|
|
]);
|
|
|
|
|
|
|
|
items.push((false, false, false, ModelRc::new(data_model)));
|
|
|
|
}
|
|
|
|
app.set_empty_folder_model(items.into());
|
|
|
|
app.set_scanning(false);
|
|
|
|
})
|
|
|
|
});
|
|
|
|
}
|