2020-09-02 05:34:39 +12:00
#[ allow(unused_imports) ]
use czkawka_core ::{ duplicate , empty_folder } ;
2020-09-18 17:32:37 +12:00
use humansize ::{ file_size_opts as options , FileSize } ;
2020-09-02 05:34:39 +12:00
extern crate gtk ;
2020-09-10 07:32:23 +12:00
use duplicate ::DuplicateFinder ;
2020-09-02 05:34:39 +12:00
use gtk ::prelude ::* ;
2020-09-08 07:37:18 +12:00
use gtk ::{ Builder , TreeView , TreeViewColumn } ;
2020-09-12 23:25:23 +12:00
use std ::collections ::HashMap ;
2020-09-02 05:34:39 +12:00
fn main ( ) {
2020-09-05 07:12:18 +12:00
gtk ::init ( ) . expect ( " Failed to initialize GTK. " ) ;
2020-09-10 07:38:48 +12:00
// Loading glade file content and build with it help UI
2020-09-05 07:12:18 +12:00
let glade_src = include_str! ( " ../czkawka.glade " ) ;
2020-09-10 07:32:23 +12:00
let builder = Builder ::from_string ( glade_src ) ;
2020-09-05 07:12:18 +12:00
2020-09-10 07:32:23 +12:00
// Windows
2020-09-08 02:07:29 +12:00
let main_window : gtk ::Window = builder . get_object ( " main_window " ) . unwrap ( ) ;
main_window . show_all ( ) ;
2020-09-12 23:25:23 +12:00
// Buttons State
2020-09-15 06:44:59 +12:00
2020-09-18 17:32:37 +12:00
// let shared_buttons: Rc<RefCell<_>> = Rc::new(RefCell::new( HashMap::<&str, bool>::new()));
2020-09-16 05:17:13 +12:00
let mut hashmap_buttons : HashMap < & str , bool > = Default ::default ( ) ;
for i in [ " duplicate " , " empty_folder " ] . iter ( ) {
hashmap_buttons . insert ( i , false ) ;
2020-09-12 23:25:23 +12:00
}
// GUI Notepad Buttons
2020-09-10 07:32:23 +12:00
2020-09-12 23:25:23 +12:00
// GUI Buttons
2020-09-10 07:32:23 +12:00
let buttons_search : gtk ::Button = builder . get_object ( " buttons_search " ) . unwrap ( ) ;
let buttons_stop : gtk ::Button = builder . get_object ( " buttons_stop " ) . unwrap ( ) ;
let buttons_resume : gtk ::Button = builder . get_object ( " buttons_resume " ) . unwrap ( ) ;
let buttons_pause : gtk ::Button = builder . get_object ( " buttons_pause " ) . unwrap ( ) ;
let buttons_select : gtk ::Button = builder . get_object ( " buttons_select " ) . unwrap ( ) ;
let buttons_delete : gtk ::Button = builder . get_object ( " buttons_delete " ) . unwrap ( ) ;
let buttons_save : gtk ::Button = builder . get_object ( " buttons_save " ) . unwrap ( ) ;
// Notebooks
let notebook_chooser_tool : gtk ::Notebook = builder . get_object ( " notebook_chooser_tool " ) . unwrap ( ) ;
let mut notebook_chooser_tool_children_names : Vec < String > = Vec ::new ( ) ;
for i in notebook_chooser_tool . get_children ( ) {
notebook_chooser_tool_children_names . push ( i . get_buildable_name ( ) . unwrap ( ) . to_string ( ) ) ;
}
// Entry
let info_entry : gtk ::Entry = builder . get_object ( " info_entry " ) . unwrap ( ) ; // To show default
// Scrolled window
let scrolled_window_duplicate_finder : gtk ::ScrolledWindow = builder . get_object ( " scrolled_window_duplicate_finder " ) . unwrap ( ) ;
{
// Set starting intro
// Duplicate Finder
let name_column : gtk ::TreeViewColumn = TreeViewColumn ::new ( ) ;
name_column . set_title ( " File Name " ) ;
name_column . set_resizable ( true ) ;
name_column . set_min_width ( 50 ) ;
let path_column : gtk ::TreeViewColumn = TreeViewColumn ::new ( ) ;
path_column . set_title ( " Path " ) ;
path_column . set_resizable ( true ) ;
path_column . set_min_width ( 100 ) ;
let modification_date_column : gtk ::TreeViewColumn = TreeViewColumn ::new ( ) ;
modification_date_column . set_title ( " Modification Date " ) ;
modification_date_column . set_resizable ( true ) ;
modification_date_column . set_min_width ( 100 ) ;
let col_types : [ glib ::types ::Type ; 3 ] = [ glib ::types ::Type ::String , glib ::types ::Type ::String , glib ::types ::Type ::String ] ;
let list_store : gtk ::ListStore = gtk ::ListStore ::new ( & col_types ) ;
let tree_view_duplicate_finder : gtk ::TreeView = TreeView ::with_model ( & list_store ) ;
tree_view_duplicate_finder . append_column ( & name_column ) ;
tree_view_duplicate_finder . append_column ( & path_column ) ;
tree_view_duplicate_finder . append_column ( & modification_date_column ) ;
scrolled_window_duplicate_finder . add ( & tree_view_duplicate_finder ) ;
scrolled_window_duplicate_finder . show_all ( ) ;
info_entry . set_text ( " Duplicated Files " ) ;
// // Disable all unused buttons
buttons_search . show ( ) ;
buttons_stop . hide ( ) ;
buttons_resume . hide ( ) ;
buttons_pause . hide ( ) ;
buttons_select . show ( ) ;
buttons_delete . hide ( ) ;
buttons_save . hide ( ) ;
}
{
// Connect Buttons
2020-09-16 05:17:13 +12:00
let buttons_search_clone = buttons_search . clone ( ) ;
2020-09-10 07:32:23 +12:00
buttons_search . connect_clicked ( move | _ | {
assert! ( notebook_chooser_tool_children_names . contains ( & " notebook_duplicate_finder_label " . to_string ( ) ) ) ;
assert! ( notebook_chooser_tool_children_names . contains ( & " notebook_empty_folders_label " . to_string ( ) ) ) ;
match notebook_chooser_tool_children_names . get ( notebook_chooser_tool . get_current_page ( ) . unwrap ( ) as usize ) . unwrap ( ) . as_str ( ) {
" notebook_duplicate_finder_label " = > {
2020-09-17 22:07:58 +12:00
// TODO Change to proper value
2020-09-10 07:32:23 +12:00
let mut df = DuplicateFinder ::new ( ) ;
2020-09-18 17:32:37 +12:00
let check_method = duplicate ::CheckingMethod ::HASH ;
df . set_include_directory ( " /home/rafal/Pulpit/AAA " . to_owned ( ) ) ;
2020-09-10 07:32:23 +12:00
df . set_exclude_directory ( " /rafa/ " . to_owned ( ) ) ;
2020-09-12 23:25:23 +12:00
df . set_excluded_items ( " " . to_owned ( ) ) ;
2020-09-10 07:32:23 +12:00
df . set_allowed_extensions ( " " . to_owned ( ) ) ;
2020-09-17 22:07:58 +12:00
df . set_min_file_size ( 1000 ) ;
2020-09-18 17:32:37 +12:00
df . set_check_method ( check_method . clone ( ) ) ;
df . set_delete_method ( duplicate ::DeleteMethod ::None ) ;
2020-09-17 22:07:58 +12:00
df . find_duplicates ( ) ;
2020-09-18 17:32:37 +12:00
let information = df . get_information ( ) ;
let duplicates_number : usize ;
let duplicates_size : u64 ;
let duplicates_group : usize ;
2020-09-15 06:44:59 +12:00
2020-09-18 17:32:37 +12:00
if check_method = = duplicate ::CheckingMethod ::HASH {
duplicates_number = information . number_of_duplicated_files_by_hash ;
duplicates_size = information . lost_space_by_hash ;
duplicates_group = information . number_of_groups_by_hash ;
} else {
duplicates_number = information . number_of_duplicated_files_by_size ;
duplicates_size = information . lost_space_by_size ;
duplicates_group = information . number_of_groups_by_size ;
}
info_entry . set_text ( format! ( " Found {} duplicates files in {} groups which took {} . " , duplicates_number , duplicates_group , duplicates_size . file_size ( options ::BINARY ) . unwrap ( ) ) . as_str ( ) ) ;
2020-09-15 06:44:59 +12:00
// Buttons
buttons_select . show ( ) ;
2020-09-12 23:25:23 +12:00
buttons_delete . show ( ) ;
2020-09-18 17:32:37 +12:00
// TODO Add buttons
// if *hashmap_buttons.get("duplicate").unwrap() {
// buttons_select.show();
// buttons_delete.show();
// }
// else{
// buttons_select.hide();
// buttons_delete.hide();
// }
2020-09-15 06:44:59 +12:00
2020-09-16 05:17:13 +12:00
buttons_search_clone . show ( ) ;
2020-09-15 06:44:59 +12:00
buttons_stop . hide ( ) ;
buttons_resume . hide ( ) ;
buttons_pause . hide ( ) ;
buttons_save . hide ( ) ;
2020-09-10 07:32:23 +12:00
}
2020-09-18 17:32:37 +12:00
" notebook_empty_folders_label " = > {
// let mut ef = empty_folder::EmptyFolder::new();
// let mut delete_folders: bool = false;
//
// ef.set_include_directory("/home/rafal/Pulpit".to_string());
//
// ef.find_empty_folders(false);
//
//
// info_entry.set_text(format!("Found {} empty folders.",duplicates_number).as_str());
//
//
// buttons_select.show();
// buttons_delete.show();
// buttons_search_clone.show();
// buttons_stop.hide();
// buttons_resume.hide();
// buttons_pause.hide();
// buttons_save.hide();
}
2020-09-10 07:32:23 +12:00
e = > panic! ( " Not existent {} " , e ) ,
}
} ) ;
}
// Quit the program when X in main window was clicked
main_window . connect_delete_event ( | _ , _ | {
gtk ::main_quit ( ) ;
Inhibit ( false )
} ) ;
2020-09-05 07:12:18 +12:00
2020-09-06 02:25:19 +12:00
// We start the gtk main loop.
2020-09-05 07:12:18 +12:00
gtk ::main ( ) ;
2020-09-02 05:34:39 +12:00
}