2020-12-08 03:25:44 +13:00
use crate ::gui_data ::* ;
2020-12-19 22:03:04 +13:00
use crate ::help_functions ::* ;
2020-12-08 03:25:44 +13:00
use directories_next ::ProjectDirs ;
use gtk ::prelude ::* ;
use std ::fs ::File ;
use std ::io ::Write ;
use std ::path ::Path ;
use std ::{ env , fs } ;
2020-12-19 22:03:04 +13:00
// TODO add more settings, maybe to different dialog window
2020-12-08 03:25:44 +13:00
const SAVE_FILE_NAME : & str = " czkawka_gui_config.txt " ;
pub fn save_configuration ( gui_data : & GuiData , manual_execution : bool ) {
2021-02-23 21:40:19 +13:00
let check_button_settings_save_at_exit = gui_data . settings . check_button_settings_save_at_exit . clone ( ) ;
2020-12-08 03:25:44 +13:00
let text_view_errors = gui_data . text_view_errors . clone ( ) ;
2020-12-19 22:03:04 +13:00
reset_text_view ( & text_view_errors ) ;
2021-06-26 04:07:13 +12:00
if ! manual_execution & & ! check_button_settings_save_at_exit . is_active ( ) {
2020-12-08 03:25:44 +13:00
// When check button is deselected, not save configuration at exit
return ;
}
if let Some ( proj_dirs ) = ProjectDirs ::from ( " pl " , " Qarmin " , " Czkawka " ) {
2021-01-11 21:54:23 +13:00
// Lin: /home/username/.config/czkawka
// Win: C:\Users\Username\AppData\Roaming\Qarmin\Czkawka\config
// Mac: /Users/Username/Library/Application Support/pl.Qarmin.Czkawka
2020-12-08 03:25:44 +13:00
let config_dir = proj_dirs . config_dir ( ) ;
if config_dir . exists ( ) {
if ! config_dir . is_dir ( ) {
2020-12-19 22:03:04 +13:00
add_text_to_text_view ( & text_view_errors , format! ( " Cannot create save file inside {} because this isn't a folder. " , config_dir . display ( ) ) . as_str ( ) ) ;
2020-12-08 03:25:44 +13:00
return ;
}
2021-11-15 03:53:55 +13:00
} else if let Err ( e ) = fs ::create_dir_all ( config_dir ) {
add_text_to_text_view ( & text_view_errors , format! ( " Failed configuration to create configuration folder {} , reason {} " , config_dir . display ( ) , e ) . as_str ( ) ) ;
2020-12-08 03:25:44 +13:00
return ;
}
2021-03-28 01:14:02 +13:00
let mut data_to_save : Vec < String > = Vec ::with_capacity ( 16 ) ;
2020-12-08 03:25:44 +13:00
//// Included Directories
data_to_save . push ( " --included_directories: " . to_string ( ) ) ;
2021-01-11 08:12:08 +13:00
let tree_view_included_directories = gui_data . upper_notebook . tree_view_included_directories . clone ( ) ;
2021-01-11 01:45:05 +13:00
let list_store = get_list_store ( & tree_view_included_directories ) ;
2021-06-26 04:07:13 +12:00
if let Some ( iter ) = list_store . iter_first ( ) {
2020-12-08 03:25:44 +13:00
loop {
2021-06-26 04:07:13 +12:00
data_to_save . push ( list_store . value ( & iter , ColumnsDirectory ::Path as i32 ) . get ::< String > ( ) . unwrap ( ) ) ;
2020-12-08 03:25:44 +13:00
if ! list_store . iter_next ( & iter ) {
break ;
}
}
}
//// Excluded Directories
data_to_save . push ( " --excluded_directories: " . to_string ( ) ) ;
2021-01-11 08:12:08 +13:00
let tree_view_excluded_directories = gui_data . upper_notebook . tree_view_excluded_directories . clone ( ) ;
2021-01-11 01:45:05 +13:00
let list_store = get_list_store ( & tree_view_excluded_directories ) ;
2021-06-26 04:07:13 +12:00
if let Some ( iter ) = list_store . iter_first ( ) {
2020-12-08 03:25:44 +13:00
loop {
2021-06-26 04:07:13 +12:00
data_to_save . push ( list_store . value ( & iter , ColumnsDirectory ::Path as i32 ) . get ::< String > ( ) . unwrap ( ) ) ;
2020-12-08 03:25:44 +13:00
if ! list_store . iter_next ( & iter ) {
break ;
}
}
}
2020-12-19 22:15:25 +13:00
{
//// Excluded Items
data_to_save . push ( " --excluded_items: " . to_string ( ) ) ;
2021-01-11 08:12:08 +13:00
let entry_excluded_items = gui_data . upper_notebook . entry_excluded_items . clone ( ) ;
2021-06-26 04:07:13 +12:00
for item in entry_excluded_items . text ( ) . split ( ',' ) {
2020-12-19 22:15:25 +13:00
if item . trim ( ) . is_empty ( ) {
continue ;
}
data_to_save . push ( item . to_string ( ) ) ;
2020-12-08 03:25:44 +13:00
}
2020-12-19 22:15:25 +13:00
//// Allowed extensions
data_to_save . push ( " --allowed_extensions: " . to_string ( ) ) ;
2021-01-11 08:12:08 +13:00
let entry_allowed_extensions = gui_data . upper_notebook . entry_allowed_extensions . clone ( ) ;
2021-06-26 04:07:13 +12:00
for extension in entry_allowed_extensions . text ( ) . split ( ',' ) {
2020-12-19 22:15:25 +13:00
if extension . trim ( ) . is_empty ( ) {
continue ;
}
data_to_save . push ( extension . to_string ( ) ) ;
2020-12-08 03:25:44 +13:00
}
2020-12-19 22:15:25 +13:00
//// Save at exit
data_to_save . push ( " --save_at_exit: " . to_string ( ) ) ;
2021-02-23 21:40:19 +13:00
let check_button_settings_save_at_exit = gui_data . settings . check_button_settings_save_at_exit . clone ( ) ;
2021-06-26 04:07:13 +12:00
data_to_save . push ( check_button_settings_save_at_exit . is_active ( ) . to_string ( ) ) ;
2020-12-19 22:15:25 +13:00
//// Load at start
data_to_save . push ( " --load_at_start: " . to_string ( ) ) ;
2021-02-23 21:40:19 +13:00
let check_button_settings_load_at_start = gui_data . settings . check_button_settings_load_at_start . clone ( ) ;
2021-06-26 04:07:13 +12:00
data_to_save . push ( check_button_settings_load_at_start . is_active ( ) . to_string ( ) ) ;
2020-12-19 22:15:25 +13:00
//// Confirm deletion of files
data_to_save . push ( " --confirm_deletion: " . to_string ( ) ) ;
2021-02-23 21:40:19 +13:00
let check_button_settings_confirm_deletion = gui_data . settings . check_button_settings_confirm_deletion . clone ( ) ;
2021-06-26 04:07:13 +12:00
data_to_save . push ( check_button_settings_confirm_deletion . is_active ( ) . to_string ( ) ) ;
2020-12-19 22:15:25 +13:00
2021-03-07 03:56:39 +13:00
//// Confirm deletion of all files in group
data_to_save . push ( " --confirm_group_deletion: " . to_string ( ) ) ;
let check_button_settings_confirm_group_deletion = gui_data . settings . check_button_settings_confirm_group_deletion . clone ( ) ;
2021-06-26 04:07:13 +12:00
data_to_save . push ( check_button_settings_confirm_group_deletion . is_active ( ) . to_string ( ) ) ;
2021-03-07 03:56:39 +13:00
2020-12-19 22:15:25 +13:00
//// Show image previews in similar images
2021-08-07 20:38:10 +12:00
data_to_save . push ( " --show_previews_similar_images: " . to_string ( ) ) ;
2021-02-23 21:40:19 +13:00
let check_button_settings_show_preview_similar_images = gui_data . settings . check_button_settings_show_preview_similar_images . clone ( ) ;
2021-06-26 04:07:13 +12:00
data_to_save . push ( check_button_settings_show_preview_similar_images . is_active ( ) . to_string ( ) ) ;
2020-12-19 22:15:25 +13:00
2021-08-07 20:38:10 +12:00
//// Show image previews in duplicates
data_to_save . push ( " --show_previews_duplicates: " . to_string ( ) ) ;
let check_button_settings_show_preview_duplicates = gui_data . settings . check_button_settings_show_preview_duplicates . clone ( ) ;
data_to_save . push ( check_button_settings_show_preview_duplicates . is_active ( ) . to_string ( ) ) ;
2020-12-19 22:15:25 +13:00
//// Show bottom text panel with errors
data_to_save . push ( " --bottom_text_panel: " . to_string ( ) ) ;
2021-02-23 21:40:19 +13:00
let check_button_settings_show_text_view = gui_data . settings . check_button_settings_show_text_view . clone ( ) ;
2021-06-26 04:07:13 +12:00
data_to_save . push ( check_button_settings_show_text_view . is_active ( ) . to_string ( ) ) ;
2021-02-23 21:40:19 +13:00
2021-03-05 00:09:53 +13:00
//// Hide/Show hard linked files, with same inodes
2021-02-23 21:40:19 +13:00
data_to_save . push ( " --hide_hard_links: " . to_string ( ) ) ;
let check_button_settings_hide_hard_links = gui_data . settings . check_button_settings_hide_hard_links . clone ( ) ;
2021-06-26 04:07:13 +12:00
data_to_save . push ( check_button_settings_hide_hard_links . is_active ( ) . to_string ( ) ) ;
2021-03-05 00:09:53 +13:00
//// Use cache system
data_to_save . push ( " --use_cache: " . to_string ( ) ) ;
let check_button_settings_use_cache = gui_data . settings . check_button_settings_use_cache . clone ( ) ;
2021-06-26 04:07:13 +12:00
data_to_save . push ( check_button_settings_use_cache . is_active ( ) . to_string ( ) ) ;
2021-03-12 02:31:59 +13:00
//// Delete to trash
data_to_save . push ( " --use_trash: " . to_string ( ) ) ;
let check_button_settings_use_trash = gui_data . settings . check_button_settings_use_trash . clone ( ) ;
2021-06-26 04:07:13 +12:00
data_to_save . push ( check_button_settings_use_trash . is_active ( ) . to_string ( ) ) ;
2021-05-07 07:54:44 +12:00
//// minimal cache file size
data_to_save . push ( " --cache_minimal_file_size: " . to_string ( ) ) ;
let entry_settings_cache_file_minimal_size = gui_data . settings . entry_settings_cache_file_minimal_size . clone ( ) ;
2021-06-26 04:07:13 +12:00
data_to_save . push ( entry_settings_cache_file_minimal_size . text ( ) . as_str ( ) . parse ::< u64 > ( ) . unwrap_or ( 2 * 1024 * 1024 ) . to_string ( ) ) ;
2020-12-19 22:15:25 +13:00
}
2020-12-19 22:03:04 +13:00
2020-12-08 03:25:44 +13:00
// Creating/Opening config file
let config_file = config_dir . join ( Path ::new ( SAVE_FILE_NAME ) ) ;
let mut config_file_handler = match File ::create ( & config_file ) {
Ok ( t ) = > t ,
2021-11-15 03:53:55 +13:00
Err ( e ) = > {
add_text_to_text_view ( & text_view_errors , format! ( " Failed to create config file {} , reason {} " , config_dir . display ( ) , e ) . as_str ( ) ) ;
2020-12-08 03:25:44 +13:00
return ;
}
} ;
2020-12-19 22:15:25 +13:00
let mut data_saved : bool = false ;
2020-12-08 03:25:44 +13:00
for data in data_to_save {
match writeln! ( config_file_handler , " {} " , data ) {
2021-11-15 03:53:55 +13:00
Ok ( _inspected ) = > {
2020-12-19 22:15:25 +13:00
data_saved = true ;
2020-12-08 03:25:44 +13:00
}
2021-11-15 03:53:55 +13:00
Err ( _inspected ) = > {
2020-12-19 22:15:25 +13:00
data_saved = false ;
break ;
2020-12-08 03:25:44 +13:00
}
}
}
2020-12-19 22:15:25 +13:00
if data_saved {
2021-03-05 00:09:53 +13:00
add_text_to_text_view ( & text_view_errors , format! ( " Saved configuration to file {} " , config_file . display ( ) ) . as_str ( ) ) ;
2020-12-19 22:15:25 +13:00
} else {
2021-03-05 00:09:53 +13:00
add_text_to_text_view ( & text_view_errors , format! ( " Failed to save configuration data to file {} " , config_file . display ( ) ) . as_str ( ) ) ;
2020-12-19 22:15:25 +13:00
}
2020-12-08 03:25:44 +13:00
} else {
2020-12-19 22:03:04 +13:00
add_text_to_text_view ( & text_view_errors , " Failed to get home directory, so can't save file. " ) ;
2020-12-08 03:25:44 +13:00
}
}
enum TypeOfLoadedData {
None ,
IncludedDirectories ,
ExcludedDirectories ,
ExcludedItems ,
AllowedExtensions ,
LoadingAtStart ,
SavingAtExit ,
2020-12-13 11:41:48 +13:00
ConfirmDeletion ,
2021-03-07 03:56:39 +13:00
ConfirmGroupDeletion ,
2021-08-07 20:38:10 +12:00
ShowPreviewSimilarImages ,
ShowPreviewDuplicates ,
2020-12-19 22:15:25 +13:00
BottomTextPanel ,
2021-02-23 21:40:19 +13:00
HideHardLinks ,
2021-03-05 00:09:53 +13:00
UseCache ,
2021-03-12 02:31:59 +13:00
UseTrash ,
2021-05-07 07:54:44 +12:00
CacheMinimalSize ,
2020-12-08 03:25:44 +13:00
}
pub fn load_configuration ( gui_data : & GuiData , manual_execution : bool ) {
let text_view_errors = gui_data . text_view_errors . clone ( ) ;
2020-12-19 22:03:04 +13:00
reset_text_view ( & text_view_errors ) ;
2020-12-08 03:25:44 +13:00
if let Some ( proj_dirs ) = ProjectDirs ::from ( " pl " , " Qarmin " , " Czkawka " ) {
2021-01-11 21:54:23 +13:00
// Lin: /home/username/.config/czkawka
// Win: C:\Users\Username\AppData\Roaming\Qarmin\Czkawka\config
// Mac: /Users/Username/Library/Application Support/pl.Qarmin.Czkawka
2020-12-08 03:25:44 +13:00
let config_dir = proj_dirs . config_dir ( ) ;
let config_file = config_dir . join ( Path ::new ( SAVE_FILE_NAME ) ) ;
if ! config_file . exists ( ) | | ! config_file . is_file ( ) {
if manual_execution {
// Don't show errors when there is no configuration file when starting app
2020-12-19 22:03:04 +13:00
add_text_to_text_view ( & text_view_errors , format! ( " Cannot load configuration from file {:?} . " , config_file . display ( ) ) . as_str ( ) ) ;
2020-12-08 03:25:44 +13:00
}
return ;
}
// Loading Data
let loaded_data : String = match fs ::read_to_string ( & config_file ) {
Ok ( t ) = > t ,
2021-11-15 03:53:55 +13:00
Err ( e ) = > {
add_text_to_text_view ( & text_view_errors , format! ( " Failed to read data from file {:?} , reason {} " , config_file , e ) . as_str ( ) ) ;
2020-12-08 03:25:44 +13:00
return ;
}
} ;
2021-08-07 20:38:10 +12:00
// Parsing Data - this are default values
2020-12-08 03:25:44 +13:00
let mut included_directories : Vec < String > = Vec ::new ( ) ;
let mut excluded_directories : Vec < String > = Vec ::new ( ) ;
let mut excluded_items : Vec < String > = Vec ::new ( ) ;
let mut allowed_extensions : Vec < String > = Vec ::new ( ) ;
let mut loading_at_start : bool = true ;
let mut saving_at_exit : bool = true ;
2020-12-13 11:41:48 +13:00
let mut confirm_deletion : bool = true ;
2021-03-07 03:56:39 +13:00
let mut confirm_group_deletion : bool = true ;
2021-08-07 20:38:10 +12:00
let mut show_previews_similar_images : bool = true ;
let mut show_previews_duplicates : bool = true ;
2020-12-19 22:15:25 +13:00
let mut bottom_text_panel : bool = true ;
2021-02-23 21:40:19 +13:00
let mut hide_hard_links : bool = true ;
2021-03-05 00:09:53 +13:00
let mut use_cache : bool = true ;
2021-03-12 02:31:59 +13:00
let mut use_trash : bool = false ;
2021-05-07 07:54:44 +12:00
let mut cache_minimal_size : u64 = 2 * 1024 * 1024 ;
2020-12-08 03:25:44 +13:00
let mut current_type = TypeOfLoadedData ::None ;
for ( line_number , line ) in loaded_data . replace ( " \r \n " , " \n " ) . split ( '\n' ) . enumerate ( ) {
let line : String = line . trim ( ) . to_string ( ) ;
2020-12-13 12:21:43 +13:00
if line . is_empty ( ) {
2020-12-08 03:25:44 +13:00
continue ; // Empty line, so we just skip it
}
if line . starts_with ( " --included_directories " ) {
current_type = TypeOfLoadedData ::IncludedDirectories ;
} else if line . starts_with ( " --excluded_directories " ) {
current_type = TypeOfLoadedData ::ExcludedDirectories ;
} else if line . starts_with ( " --excluded_items " ) {
current_type = TypeOfLoadedData ::ExcludedItems ;
} else if line . starts_with ( " --allowed_extensions " ) {
current_type = TypeOfLoadedData ::AllowedExtensions ;
} else if line . starts_with ( " --load_at_start " ) {
current_type = TypeOfLoadedData ::LoadingAtStart ;
} else if line . starts_with ( " --save_at_exit " ) {
current_type = TypeOfLoadedData ::SavingAtExit ;
2020-12-13 11:41:48 +13:00
} else if line . starts_with ( " --confirm_deletion " ) {
current_type = TypeOfLoadedData ::ConfirmDeletion ;
2021-03-07 03:56:39 +13:00
} else if line . starts_with ( " --confirm_group_deletion " ) {
current_type = TypeOfLoadedData ::ConfirmGroupDeletion ;
2021-08-07 20:38:10 +12:00
} else if line . starts_with ( " --show_previews_similar_images " ) {
current_type = TypeOfLoadedData ::ShowPreviewSimilarImages ;
} else if line . starts_with ( " --show_previews_duplicates " ) {
current_type = TypeOfLoadedData ::ShowPreviewDuplicates ;
2020-12-19 22:15:25 +13:00
} else if line . starts_with ( " --bottom_text_panel " ) {
current_type = TypeOfLoadedData ::BottomTextPanel ;
2021-02-23 21:40:19 +13:00
} else if line . starts_with ( " --hide_hard_links " ) {
current_type = TypeOfLoadedData ::HideHardLinks ;
2021-03-05 00:09:53 +13:00
} else if line . starts_with ( " --use_cache " ) {
current_type = TypeOfLoadedData ::UseCache ;
2021-03-12 02:31:59 +13:00
} else if line . starts_with ( " --use_trash " ) {
current_type = TypeOfLoadedData ::UseTrash ;
2021-05-07 07:54:44 +12:00
} else if line . starts_with ( " --cache_minimal_file_size " ) {
current_type = TypeOfLoadedData ::CacheMinimalSize ;
2020-12-13 11:41:48 +13:00
} else if line . starts_with ( " -- " ) {
2020-12-19 22:03:04 +13:00
current_type = TypeOfLoadedData ::None ;
add_text_to_text_view (
& text_view_errors ,
2020-12-20 02:39:42 +13:00
format! ( " Found invalid header in line {} \" {} \" when loading file {:?} (save file may be from different Czkawka version) " , line_number , line , config_file ) . as_str ( ) ,
2020-12-19 22:03:04 +13:00
) ;
2020-12-08 03:25:44 +13:00
} else {
match current_type {
TypeOfLoadedData ::None = > {
2020-12-19 22:03:04 +13:00
add_text_to_text_view (
& text_view_errors ,
2020-12-20 02:39:42 +13:00
format! ( " Found orphan data in line {} \" {} \" when loading file {:?} (save file may be from different Czkawka version) " , line_number , line , config_file ) . as_str ( ) ,
2020-12-19 22:03:04 +13:00
) ;
2020-12-08 03:25:44 +13:00
}
TypeOfLoadedData ::IncludedDirectories = > {
included_directories . push ( line ) ;
}
TypeOfLoadedData ::ExcludedDirectories = > {
excluded_directories . push ( line ) ;
}
TypeOfLoadedData ::ExcludedItems = > {
excluded_items . push ( line ) ;
}
TypeOfLoadedData ::AllowedExtensions = > {
allowed_extensions . push ( line ) ;
}
TypeOfLoadedData ::LoadingAtStart = > {
let line = line . to_lowercase ( ) ;
if line = = " 1 " | | line = = " true " {
loading_at_start = true ;
} else if line = = " 0 " | | line = = " false " {
loading_at_start = false ;
} else {
2020-12-19 22:03:04 +13:00
add_text_to_text_view (
& text_view_errors ,
2020-12-20 02:39:42 +13:00
format! ( " Found invalid data in line {} \" {} \" isn't proper value(0/1/true/false) when loading file {:?} " , line_number , line , config_file ) . as_str ( ) ,
2020-12-19 22:03:04 +13:00
) ;
2020-12-08 03:25:44 +13:00
}
}
TypeOfLoadedData ::SavingAtExit = > {
let line = line . to_lowercase ( ) ;
if line = = " 1 " | | line = = " true " {
saving_at_exit = true ;
} else if line = = " 0 " | | line = = " false " {
saving_at_exit = false ;
} else {
2020-12-19 22:03:04 +13:00
add_text_to_text_view (
& text_view_errors ,
2020-12-20 02:39:42 +13:00
format! ( " Found invalid data in line {} \" {} \" isn't proper value(0/1/true/false) when loading file {:?} " , line_number , line , config_file ) . as_str ( ) ,
2020-12-19 22:03:04 +13:00
) ;
2020-12-08 03:25:44 +13:00
}
}
2020-12-13 11:41:48 +13:00
TypeOfLoadedData ::ConfirmDeletion = > {
let line = line . to_lowercase ( ) ;
if line = = " 1 " | | line = = " true " {
confirm_deletion = true ;
} else if line = = " 0 " | | line = = " false " {
confirm_deletion = false ;
} else {
2020-12-19 22:03:04 +13:00
add_text_to_text_view (
& text_view_errors ,
2020-12-20 02:39:42 +13:00
format! ( " Found invalid data in line {} \" {} \" isn't proper value(0/1/true/false) when loading file {:?} " , line_number , line , config_file ) . as_str ( ) ,
2020-12-19 22:03:04 +13:00
) ;
}
}
2021-03-07 03:56:39 +13:00
TypeOfLoadedData ::ConfirmGroupDeletion = > {
let line = line . to_lowercase ( ) ;
if line = = " 1 " | | line = = " true " {
confirm_group_deletion = true ;
} else if line = = " 0 " | | line = = " false " {
confirm_group_deletion = false ;
} else {
add_text_to_text_view (
& text_view_errors ,
format! ( " Found invalid data in line {} \" {} \" isn't proper value(0/1/true/false) when loading file {:?} " , line_number , line , config_file ) . as_str ( ) ,
) ;
}
}
2021-08-07 20:38:10 +12:00
TypeOfLoadedData ::ShowPreviewSimilarImages = > {
let line = line . to_lowercase ( ) ;
if line = = " 1 " | | line = = " true " {
show_previews_similar_images = true ;
} else if line = = " 0 " | | line = = " false " {
show_previews_similar_images = false ;
} else {
add_text_to_text_view (
& text_view_errors ,
format! ( " Found invalid data in line {} \" {} \" isn't proper value(0/1/true/false) when loading file {:?} " , line_number , line , config_file ) . as_str ( ) ,
) ;
}
}
TypeOfLoadedData ::ShowPreviewDuplicates = > {
2020-12-19 22:03:04 +13:00
let line = line . to_lowercase ( ) ;
if line = = " 1 " | | line = = " true " {
2021-08-07 20:38:10 +12:00
show_previews_duplicates = true ;
2020-12-19 22:03:04 +13:00
} else if line = = " 0 " | | line = = " false " {
2021-08-07 20:38:10 +12:00
show_previews_duplicates = false ;
2020-12-19 22:03:04 +13:00
} else {
add_text_to_text_view (
& text_view_errors ,
2020-12-20 02:39:42 +13:00
format! ( " Found invalid data in line {} \" {} \" isn't proper value(0/1/true/false) when loading file {:?} " , line_number , line , config_file ) . as_str ( ) ,
2020-12-19 22:03:04 +13:00
) ;
2020-12-13 11:41:48 +13:00
}
}
2020-12-19 22:15:25 +13:00
TypeOfLoadedData ::BottomTextPanel = > {
let line = line . to_lowercase ( ) ;
if line = = " 1 " | | line = = " true " {
bottom_text_panel = true ;
} else if line = = " 0 " | | line = = " false " {
bottom_text_panel = false ;
} else {
add_text_to_text_view (
& text_view_errors ,
2020-12-20 02:39:42 +13:00
format! ( " Found invalid data in line {} \" {} \" isn't proper value(0/1/true/false) when loading file {:?} " , line_number , line , config_file ) . as_str ( ) ,
2020-12-19 22:15:25 +13:00
) ;
}
}
2021-02-23 21:40:19 +13:00
TypeOfLoadedData ::HideHardLinks = > {
let line = line . to_lowercase ( ) ;
if line = = " 1 " | | line = = " true " {
hide_hard_links = true ;
} else if line = = " 0 " | | line = = " false " {
hide_hard_links = false ;
} else {
add_text_to_text_view (
& text_view_errors ,
format! ( " Found invalid data in line {} \" {} \" isn't proper value(0/1/true/false) when loading file {:?} " , line_number , line , config_file ) . as_str ( ) ,
) ;
}
}
2021-03-05 00:09:53 +13:00
TypeOfLoadedData ::UseCache = > {
let line = line . to_lowercase ( ) ;
if line = = " 1 " | | line = = " true " {
use_cache = true ;
} else if line = = " 0 " | | line = = " false " {
use_cache = false ;
} else {
add_text_to_text_view (
& text_view_errors ,
format! ( " Found invalid data in line {} \" {} \" isn't proper value(0/1/true/false) when loading file {:?} " , line_number , line , config_file ) . as_str ( ) ,
) ;
}
}
2021-03-12 02:31:59 +13:00
TypeOfLoadedData ::UseTrash = > {
let line = line . to_lowercase ( ) ;
if line = = " 1 " | | line = = " true " {
use_trash = true ;
} else if line = = " 0 " | | line = = " false " {
use_trash = false ;
} else {
add_text_to_text_view (
& text_view_errors ,
format! ( " Found invalid data in line {} \" {} \" isn't proper value(0/1/true/false) when loading file {:?} " , line_number , line , config_file ) . as_str ( ) ,
) ;
}
}
2021-05-07 07:54:44 +12:00
TypeOfLoadedData ::CacheMinimalSize = > {
if let Ok ( number ) = line . parse ::< u64 > ( ) {
cache_minimal_size = number ;
} else {
add_text_to_text_view (
& text_view_errors ,
format! ( " Found invalid data in line {} \" {} \" isn't proper value(u64) when loading file {:?} " , line_number , line , config_file ) . as_str ( ) ,
) ;
}
}
2020-12-08 03:25:44 +13:00
}
}
}
// Setting data
if manual_execution | | loading_at_start {
//// Included Directories
2021-01-11 08:12:08 +13:00
let tree_view_included_directories = gui_data . upper_notebook . tree_view_included_directories . clone ( ) ;
2021-01-11 01:45:05 +13:00
let list_store = get_list_store ( & tree_view_included_directories ) ;
2020-12-08 03:25:44 +13:00
list_store . clear ( ) ;
for directory in included_directories {
2021-06-26 04:07:13 +12:00
let values : [ ( u32 , & dyn ToValue ) ; 1 ] = [ ( 0 , & directory ) ] ;
list_store . set ( & list_store . append ( ) , & values ) ;
2020-12-08 03:25:44 +13:00
}
//// Exclude Directories
2021-01-11 08:12:08 +13:00
let tree_view_excluded_directories = gui_data . upper_notebook . tree_view_excluded_directories . clone ( ) ;
2021-01-11 01:45:05 +13:00
let list_store = get_list_store ( & tree_view_excluded_directories ) ;
2020-12-08 03:25:44 +13:00
list_store . clear ( ) ;
for directory in excluded_directories {
2021-06-26 04:07:13 +12:00
let values : [ ( u32 , & dyn ToValue ) ; 1 ] = [ ( 0 , & directory ) ] ;
list_store . set ( & list_store . append ( ) , & values ) ;
2020-12-08 03:25:44 +13:00
}
//// Excluded Items
2021-01-11 08:12:08 +13:00
let entry_excluded_items = gui_data . upper_notebook . entry_excluded_items . clone ( ) ;
2020-12-08 03:25:44 +13:00
entry_excluded_items . set_text ( excluded_items . iter ( ) . map ( | e | e . to_string ( ) + " , " ) . collect ::< String > ( ) . as_str ( ) ) ;
//// Allowed extensions
2021-01-11 08:12:08 +13:00
let entry_allowed_extensions = gui_data . upper_notebook . entry_allowed_extensions . clone ( ) ;
2020-12-08 03:25:44 +13:00
entry_allowed_extensions . set_text ( allowed_extensions . iter ( ) . map ( | e | e . to_string ( ) + " , " ) . collect ::< String > ( ) . as_str ( ) ) ;
//// Buttons
2021-02-23 21:40:19 +13:00
gui_data . settings . check_button_settings_load_at_start . set_active ( loading_at_start ) ;
gui_data . settings . check_button_settings_save_at_exit . set_active ( saving_at_exit ) ;
gui_data . settings . check_button_settings_confirm_deletion . set_active ( confirm_deletion ) ;
2021-03-07 03:56:39 +13:00
gui_data . settings . check_button_settings_confirm_group_deletion . set_active ( confirm_group_deletion ) ;
2021-08-07 20:38:10 +12:00
gui_data . settings . check_button_settings_show_preview_similar_images . set_active ( show_previews_similar_images ) ;
gui_data . settings . check_button_settings_show_preview_duplicates . set_active ( show_previews_duplicates ) ;
2020-12-19 22:15:25 +13:00
2021-02-23 21:40:19 +13:00
gui_data . settings . check_button_settings_show_text_view . set_active ( bottom_text_panel ) ;
2020-12-19 22:15:25 +13:00
if ! bottom_text_panel {
2021-02-23 21:40:19 +13:00
gui_data . scrolled_window_errors . hide ( ) ;
2020-12-20 02:39:42 +13:00
} else {
2021-02-23 21:40:19 +13:00
gui_data . scrolled_window_errors . show ( ) ;
2020-12-19 22:15:25 +13:00
}
2021-02-23 21:40:19 +13:00
gui_data . settings . check_button_settings_hide_hard_links . set_active ( hide_hard_links ) ;
2021-03-05 00:09:53 +13:00
gui_data . settings . check_button_settings_use_cache . set_active ( use_cache ) ;
2021-03-12 02:31:59 +13:00
gui_data . settings . check_button_settings_use_trash . set_active ( use_trash ) ;
2021-05-07 07:54:44 +12:00
gui_data . settings . entry_settings_cache_file_minimal_size . set_text ( cache_minimal_size . to_string ( ) . as_str ( ) ) ;
2020-12-08 03:25:44 +13:00
} else {
2021-02-23 21:40:19 +13:00
gui_data . settings . check_button_settings_load_at_start . set_active ( false ) ;
2020-12-08 03:25:44 +13:00
}
if manual_execution {
2020-12-19 22:03:04 +13:00
add_text_to_text_view ( & text_view_errors , format! ( " Properly loaded configuration from file {:?} " , config_file ) . as_str ( ) ) ;
2020-12-08 03:25:44 +13:00
}
} else {
2020-12-19 22:03:04 +13:00
add_text_to_text_view ( & text_view_errors , " Failed to get home directory, so can't load file. " ) ;
2020-12-08 03:25:44 +13:00
}
}
pub fn reset_configuration ( gui_data : & GuiData , manual_clearing : bool ) {
// TODO Maybe add popup dialog to confirm resetting
let text_view_errors = gui_data . text_view_errors . clone ( ) ;
2020-12-19 22:03:04 +13:00
reset_text_view ( & text_view_errors ) ;
2020-12-08 03:25:44 +13:00
// Resetting included directories
{
2021-01-11 08:12:08 +13:00
let tree_view_included_directories = gui_data . upper_notebook . tree_view_included_directories . clone ( ) ;
2021-01-11 01:45:05 +13:00
let list_store = get_list_store ( & tree_view_included_directories ) ;
2020-12-08 03:25:44 +13:00
list_store . clear ( ) ;
let current_dir : String = match env ::current_dir ( ) {
Ok ( t ) = > t . to_str ( ) . unwrap ( ) . to_string ( ) ,
2021-11-15 03:53:55 +13:00
Err ( _inspected ) = > {
2020-12-08 03:25:44 +13:00
if cfg! ( target_family = " unix " ) {
2020-12-19 22:03:04 +13:00
add_text_to_text_view ( & text_view_errors , " Failed to read current directory, setting /home instead " ) ;
2020-12-08 03:25:44 +13:00
" /home " . to_string ( )
} else if cfg! ( target_family = " windows " ) {
2020-12-19 22:03:04 +13:00
add_text_to_text_view ( & text_view_errors , " Failed to read current directory, setting C: \\ instead " ) ;
2020-12-08 03:25:44 +13:00
" C: \\ " . to_string ( )
} else {
" " . to_string ( )
}
}
} ;
2021-06-26 04:07:13 +12:00
let values : [ ( u32 , & dyn ToValue ) ; 1 ] = [ ( 0 , & current_dir ) ] ;
list_store . set ( & list_store . append ( ) , & values ) ;
2020-12-08 03:25:44 +13:00
}
// Resetting excluded directories
{
2021-01-11 08:12:08 +13:00
let tree_view_excluded_directories = gui_data . upper_notebook . tree_view_excluded_directories . clone ( ) ;
2021-01-11 01:45:05 +13:00
let list_store = get_list_store ( & tree_view_excluded_directories ) ;
2020-12-08 03:25:44 +13:00
list_store . clear ( ) ;
if cfg! ( target_family = " unix " ) {
for i in [ " /proc " , " /dev " , " /sys " , " /run " , " /snap " ] . iter ( ) {
2021-06-26 04:07:13 +12:00
let values : [ ( u32 , & dyn ToValue ) ; 1 ] = [ ( 0 , & i ) ] ;
list_store . set ( & list_store . append ( ) , & values ) ;
2020-12-08 03:25:44 +13:00
}
}
}
// Resetting excluded items
{
2021-01-11 08:12:08 +13:00
let entry_excluded_items = gui_data . upper_notebook . entry_excluded_items . clone ( ) ;
2020-12-08 03:25:44 +13:00
if cfg! ( target_family = " unix " ) {
2021-01-04 04:54:07 +13:00
entry_excluded_items . set_text ( " */.git/*,*/node_modules/*,*/lost+found/*,*/Trash/*,*/.Trash-*/*,*/snap/*,/home/*/.cache/* " ) ;
2020-12-08 03:25:44 +13:00
}
if cfg! ( target_family = " windows " ) {
2021-05-09 07:54:01 +12:00
entry_excluded_items . set_text ( " * \\ .git \\ *,* \\ node_modules \\ *,* \\ lost+found \\ *,*: \\ windows \\ * " ) ;
2020-12-08 03:25:44 +13:00
}
}
// Resetting allowed extensions
{
2021-01-11 08:12:08 +13:00
let entry_allowed_extensions = gui_data . upper_notebook . entry_allowed_extensions . clone ( ) ;
2020-12-08 03:25:44 +13:00
entry_allowed_extensions . set_text ( " " ) ;
}
// Set settings
{
2021-02-23 21:40:19 +13:00
gui_data . settings . check_button_settings_save_at_exit . set_active ( true ) ;
gui_data . settings . check_button_settings_load_at_start . set_active ( true ) ;
gui_data . settings . check_button_settings_confirm_deletion . set_active ( true ) ;
2021-03-07 03:56:39 +13:00
gui_data . settings . check_button_settings_confirm_group_deletion . set_active ( true ) ;
2021-02-23 21:40:19 +13:00
gui_data . settings . check_button_settings_show_preview_similar_images . set_active ( true ) ;
2021-08-07 20:38:10 +12:00
gui_data . settings . check_button_settings_show_preview_duplicates . set_active ( true ) ;
2021-02-23 21:40:19 +13:00
gui_data . settings . check_button_settings_show_text_view . set_active ( true ) ;
gui_data . settings . check_button_settings_hide_hard_links . set_active ( true ) ;
2021-03-05 00:09:53 +13:00
gui_data . settings . check_button_settings_use_cache . set_active ( true ) ;
2021-03-12 02:31:59 +13:00
gui_data . settings . check_button_settings_use_trash . set_active ( false ) ;
2021-05-07 07:54:44 +12:00
gui_data . settings . entry_settings_cache_file_minimal_size . set_text ( " 2097152 " ) ;
2020-12-08 03:25:44 +13:00
}
if manual_clearing {
2020-12-19 22:03:04 +13:00
add_text_to_text_view ( & text_view_errors , " Current configuration was cleared. " ) ;
2020-12-08 03:25:44 +13:00
}
}