Skip to content

Commit 407b954

Browse files
committed
Broken
1 parent 3df10a6 commit 407b954

File tree

6 files changed

+135
-2
lines changed

6 files changed

+135
-2
lines changed

czkawka_core/src/broken_files.rs

+13
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,19 @@ pub enum TypeOfFile {
5757
PDF,
5858
}
5959

60+
bitflags! {
61+
pub struct CheckedFiles : u32 {
62+
const NONE = 0;
63+
64+
const TRACK_TITLE = 0b1;
65+
const TRACK_ARTIST = 0b10;
66+
const YEAR = 0b100;
67+
const LENGTH = 0b1000;
68+
const GENRE = 0b10000;
69+
const BITRATE = 0b100000;
70+
}
71+
}
72+
6073
/// Info struck with helpful information's about results
6174
#[derive(Default)]
6275
pub struct Info {

czkawka_gui/i18n/en/czkawka_gui.ftl

+5
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,11 @@ main_label_shown_files = Number of shown files
116116
main_label_resize_algorithm = Resize algorithm
117117
main_label_similarity = Similarity{" "}
118118
119+
main_check_box_broken_files_audio = Audio
120+
main_check_box_broken_files_pdf = Pdf
121+
main_check_box_broken_files_archive = Archive
122+
main_check_box_broken_files_image = Image
123+
119124
check_button_general_same_size = Ignore same size
120125
check_button_general_same_size_tooltip = Ignore from results, files which have identical size - usually this are 1:1 duplicates
121126

czkawka_gui/src/gui_structs/gui_main_notebook.rs

+20
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,12 @@ pub struct GuiMainNotebook {
109109

110110
pub scale_similarity_similar_videos: Scale,
111111

112+
// Broken Files
113+
pub check_button_broken_files_audio: CheckButton,
114+
pub check_button_broken_files_pdf: CheckButton,
115+
pub check_button_broken_files_archive: CheckButton,
116+
pub check_button_broken_files_image: CheckButton,
117+
112118
// Music
113119
pub check_button_music_title: CheckButton,
114120
pub check_button_music_artist: CheckButton,
@@ -209,6 +215,11 @@ impl GuiMainNotebook {
209215
let check_button_music_length: CheckButton = builder.object("check_button_music_length").unwrap();
210216
let check_button_music_approximate_comparison: CheckButton = builder.object("check_button_music_approximate_comparison").unwrap();
211217

218+
let check_button_broken_files_audio: CheckButton = builder.object("check_button_broken_files_audio").unwrap();
219+
let check_button_broken_files_pdf: CheckButton = builder.object("check_button_broken_files_pdf").unwrap();
220+
let check_button_broken_files_archive: CheckButton = builder.object("check_button_broken_files_archive").unwrap();
221+
let check_button_broken_files_image: CheckButton = builder.object("check_button_broken_files_image").unwrap();
222+
212223
let scale_similarity_similar_images: Scale = builder.object("scale_similarity_similar_images").unwrap();
213224
let scale_similarity_similar_videos: Scale = builder.object("scale_similarity_similar_videos").unwrap();
214225

@@ -284,6 +295,9 @@ impl GuiMainNotebook {
284295
check_button_music_approximate_comparison,
285296
scale_similarity_similar_images,
286297
scale_similarity_similar_videos,
298+
check_button_broken_files_audio,
299+
check_button_broken_files_pdf,
300+
check_button_broken_files_archive,
287301
check_button_image_ignore_same_size,
288302
label_similar_images_minimal_similarity,
289303
label_duplicate_check_method,
@@ -321,6 +335,7 @@ impl GuiMainNotebook {
321335
gc_tree_view_bad_extensions,
322336
combo_box_big_files_mode,
323337
label_big_files_mode,
338+
check_button_broken_files_image,
324339
}
325340
}
326341

@@ -396,6 +411,11 @@ impl GuiMainNotebook {
396411
self.check_button_image_fast_compare
397412
.set_tooltip_text(Some(&flg!("main_notebook_image_fast_compare_tooltip")));
398413

414+
self.check_button_broken_files_audio.set_label(Some(&flg!("main_check_box_broken_files_audio")));
415+
self.check_button_broken_files_archive.set_label(Some(&flg!("main_check_box_broken_files_archive")));
416+
self.check_button_broken_files_image.set_label(Some(&flg!("main_check_box_broken_files_image")));
417+
self.check_button_broken_files_pdf.set_label(Some(&flg!("main_check_box_broken_files_pdf")));
418+
399419
{
400420
let hash_size_index = self.combo_box_image_hash_size.active().unwrap() as usize;
401421
let hash_size = IMAGES_HASH_SIZE_COMBO_BOX[hash_size_index];

czkawka_gui/src/saving_loading.rs

+45
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@ const DEFAULT_IMAGE_REMOVE_AUTO_OUTDATED_CACHE: bool = true;
4242
const DEFAULT_DUPLICATE_REMOVE_AUTO_OUTDATED_CACHE: bool = true;
4343
const DEFAULT_DUPLICATE_CASE_SENSITIVE_NAME_CHECKING: bool = false;
4444

45+
const DEFAULT_BROKEN_FILES_PDF: bool = true;
46+
const DEFAULT_BROKEN_FILES_AUDIO: bool = true;
47+
const DEFAULT_BROKEN_FILES_ARCHIVE: bool = true;
48+
const DEFAULT_BROKEN_FILES_IMAGE: bool = true;
49+
4550
const DEFAULT_NUMBER_OF_BIGGEST_FILES: &str = "50";
4651
const DEFAULT_SIMILAR_IMAGES_SIMILARITY: i32 = 0;
4752
const DEFAULT_SIMILAR_IMAGES_IGNORE_SAME_SIZE: bool = false;
@@ -427,6 +432,10 @@ enum LoadText {
427432
SimilarVideosIgnoreSameSize,
428433
MusicApproximateComparison,
429434
DuplicateNameCaseSensitive,
435+
BrokenFilesPdf,
436+
BrokenFilesAudio,
437+
BrokenFilesImage,
438+
BrokenFilesArchive,
430439
}
431440

432441
fn create_hash_map() -> (HashMap<LoadText, String>, HashMap<String, LoadText>) {
@@ -469,6 +478,10 @@ fn create_hash_map() -> (HashMap<LoadText, String>, HashMap<String, LoadText>) {
469478
(LoadText::MusicApproximateComparison, "music_approximate_comparison"),
470479
(LoadText::DuplicateNameCaseSensitive, "duplicate_name_case_sensitive"),
471480
(LoadText::ComboBoxBigFiles, "combo_box_big_files_mode"),
481+
(LoadText::BrokenFilesPdf, "broken_files_pdf"),
482+
(LoadText::BrokenFilesAudio, "broken_files_audio"),
483+
(LoadText::BrokenFilesImage, "broken_files_image"),
484+
(LoadText::BrokenFilesArchive, "broken_files_archive"),
472485
];
473486
let mut hashmap_ls: HashMap<LoadText, String> = Default::default();
474487
let mut hashmap_sl: HashMap<String, LoadText> = Default::default();
@@ -583,6 +596,23 @@ pub fn save_configuration(manual_execution: bool, upper_notebook: &GuiUpperNoteb
583596
settings.check_button_settings_show_text_view.is_active(),
584597
);
585598

599+
saving_struct.save_var(
600+
hashmap_ls.get(&LoadText::BrokenFilesArchive).unwrap().to_string(),
601+
main_notebook.check_button_broken_files_archive.is_active(),
602+
);
603+
saving_struct.save_var(
604+
hashmap_ls.get(&LoadText::BrokenFilesImage).unwrap().to_string(),
605+
main_notebook.check_button_broken_files_image.is_active(),
606+
);
607+
saving_struct.save_var(
608+
hashmap_ls.get(&LoadText::BrokenFilesAudio).unwrap().to_string(),
609+
main_notebook.check_button_broken_files_audio.is_active(),
610+
);
611+
saving_struct.save_var(
612+
hashmap_ls.get(&LoadText::BrokenFilesPdf).unwrap().to_string(),
613+
main_notebook.check_button_broken_files_pdf.is_active(),
614+
);
615+
586616
// Others
587617
saving_struct.save_var(
588618
hashmap_ls.get(&LoadText::MinimalCacheSize).unwrap().to_string(),
@@ -756,6 +786,11 @@ pub fn load_configuration(
756786
DEFAULT_DUPLICATE_CASE_SENSITIVE_NAME_CHECKING,
757787
);
758788

789+
let check_button_broken_files_archive = loaded_entries.get_integer(hashmap_ls.get(&LoadText::BrokenFilesArchive).unwrap().clone(), DEFAULT_BROKEN_FILES_ARCHIVE);
790+
let check_button_broken_files_pdf = loaded_entries.get_integer(hashmap_ls.get(&LoadText::BrokenFilesPdf).unwrap().clone(), DEFAULT_BROKEN_FILES_ARCHIVE);
791+
let check_button_broken_files_image = loaded_entries.get_integer(hashmap_ls.get(&LoadText::BrokenFilesImage).unwrap().clone(), DEFAULT_BROKEN_FILES_ARCHIVE);
792+
let check_button_broken_files_audio = loaded_entries.get_integer(hashmap_ls.get(&LoadText::BrokenFilesAudio).unwrap().clone(), DEFAULT_BROKEN_FILES_ARCHIVE);
793+
759794
// Setting data
760795
if manual_execution || loading_at_start {
761796
{
@@ -880,6 +915,11 @@ pub fn load_configuration(
880915
main_notebook.check_button_video_ignore_same_size.set_active(similar_videos_ignore_same_size);
881916
main_notebook.scale_similarity_similar_videos.set_value(similar_videos_similarity as f64);
882917

918+
main_notebook.check_button_broken_files_audio.set_active(check_button_broken_files_audio);
919+
main_notebook.check_button_broken_files_pdf.set_active(check_button_broken_files_pdf);
920+
main_notebook.check_button_broken_files_image.set_active(check_button_broken_files_image);
921+
main_notebook.check_button_broken_files_archive.set_active(check_button_broken_files_archive);
922+
883923
{
884924
let combo_chosen_index = main_notebook.combo_box_duplicate_check_method.active().unwrap();
885925

@@ -1004,6 +1044,11 @@ pub fn reset_configuration(manual_clearing: bool, upper_notebook: &GuiUpperNoteb
10041044
main_notebook.combo_box_image_hash_size.set_active(Some(0));
10051045
main_notebook.combo_box_big_files_mode.set_active(Some(0));
10061046

1047+
main_notebook.check_button_broken_files_audio.set_active(DEFAULT_BROKEN_FILES_AUDIO);
1048+
main_notebook.check_button_broken_files_pdf.set_active(DEFAULT_BROKEN_FILES_PDF);
1049+
main_notebook.check_button_broken_files_archive.set_active(DEFAULT_BROKEN_FILES_ARCHIVE);
1050+
main_notebook.check_button_broken_files_image.set_active(DEFAULT_BROKEN_FILES_IMAGE);
1051+
10071052
main_notebook.scale_similarity_similar_images.set_range(0_f64, SIMILAR_VALUES[0][5] as f64); // DEFAULT FOR MAX of 8
10081053
main_notebook.scale_similarity_similar_images.set_fill_level(SIMILAR_VALUES[0][5] as f64);
10091054

czkawka_gui/ui/czkawka.cmb

+17-1
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@
167167
(5,129,"GtkScrolledWindow","scrolled_window_invalid_symlinks",128,None,None,None,None),
168168
(5,130,"GtkLabel",None,128,None,None,None,None),
169169
(5,131,"GtkNotebookPage",None,56,None,None,None,9),
170-
(5,132,"GtkScrolledWindow","scrolled_window_broken_files",131,None,None,None,None),
170+
(5,132,"GtkBox",None,131,None,None,None,None),
171171
(5,133,"GtkLabel",None,131,None,None,None,None),
172172
(5,134,"GtkNotebookPage",None,56,None,None,None,10),
173173
(5,135,"GtkScrolledWindow","scrolled_window_bad_extensions",134,None,None,None,None),
@@ -225,6 +225,12 @@
225225
(5,220,"GtkImage",None,219,None,None,None,None),
226226
(5,221,"GtkComboBoxText","combo_box_big_files_mode",74,None,None,None,1),
227227
(5,222,"GtkLabel","label_big_files_mode",74,None,None,None,None),
228+
(5,223,"GtkScrolledWindow","scrolled_window_broken_files",132,None,None,None,1),
229+
(5,224,"GtkBox",None,132,None,None,None,None),
230+
(5,225,"GtkCheckButton","check_button_broken_files_audio",224,None,None,None,None),
231+
(5,226,"GtkCheckButton","check_button_broken_files_pdf",224,None,None,None,1),
232+
(5,227,"GtkCheckButton","check_button_broken_files_archive",224,None,None,None,2),
233+
(5,228,"GtkCheckButton","check_button_broken_files_image",224,None,None,None,3),
228234
(6,1,"GtkPopover","popover_right_click",None,None,None,None,None),
229235
(6,2,"GtkBox",None,1,None,None,None,None),
230236
(6,3,"GtkButton","buttons_popover_right_click_open_file",2,None,None,None,None),
@@ -627,6 +633,7 @@
627633
(5,131,"GtkNotebookPage","child",None,None,None,None,None,132),
628634
(5,131,"GtkNotebookPage","position","9",None,None,None,None,None),
629635
(5,131,"GtkNotebookPage","tab",None,None,None,None,None,133),
636+
(5,132,"GtkOrientable","orientation","vertical",None,None,None,None,None),
630637
(5,132,"GtkWidget","focusable","1",None,None,None,None,None),
631638
(5,133,"GtkLabel","label","Broken Files",1,None,None,None,None),
632639
(5,134,"GtkNotebookPage","child",None,None,None,None,None,135),
@@ -727,6 +734,15 @@
727734
(5,220,"GtkImage","icon-name","image-missing",None,None,None,None,None),
728735
(5,220,"GtkWidget","halign","center",None,None,None,None,None),
729736
(5,222,"GtkLabel","label","VVV",None,None,None,None,None),
737+
(5,223,"GtkWidget","vexpand","True",None,None,None,None,None),
738+
(5,225,"GtkCheckButton","active","True",None,None,None,None,None),
739+
(5,225,"GtkCheckButton","label","Audio",None,None,None,None,None),
740+
(5,226,"GtkCheckButton","active","True",None,None,None,None,None),
741+
(5,226,"GtkCheckButton","label","PDF",None,None,None,None,None),
742+
(5,227,"GtkCheckButton","active","True",None,None,None,None,None),
743+
(5,227,"GtkCheckButton","label","Archive",None,None,None,None,None),
744+
(5,228,"GtkCheckButton","active","True",None,None,None,None,None),
745+
(5,228,"GtkCheckButton","label","Image",None,None,None,None,None),
730746
(6,1,"GtkPopover","child",None,None,None,None,None,2),
731747
(6,1,"GtkPopover","position","left",None,None,None,None,None),
732748
(6,2,"GtkOrientable","orientation","vertical",None,None,None,None,None),

czkawka_gui/ui/main_window.ui

+35-1
Original file line numberDiff line numberDiff line change
@@ -778,8 +778,42 @@
778778
<child>
779779
<object class="GtkNotebookPage">
780780
<property name="child">
781-
<object class="GtkScrolledWindow" id="scrolled_window_broken_files">
781+
<object class="GtkBox">
782782
<property name="focusable">1</property>
783+
<property name="orientation">vertical</property>
784+
<child>
785+
<object class="GtkBox">
786+
<child>
787+
<object class="GtkCheckButton" id="check_button_broken_files_audio">
788+
<property name="active">True</property>
789+
<property name="label">Audio</property>
790+
</object>
791+
</child>
792+
<child>
793+
<object class="GtkCheckButton" id="check_button_broken_files_pdf">
794+
<property name="active">True</property>
795+
<property name="label">PDF</property>
796+
</object>
797+
</child>
798+
<child>
799+
<object class="GtkCheckButton" id="check_button_broken_files_archive">
800+
<property name="active">True</property>
801+
<property name="label">Archive</property>
802+
</object>
803+
</child>
804+
<child>
805+
<object class="GtkCheckButton" id="check_button_broken_files_image">
806+
<property name="active">True</property>
807+
<property name="label">Image</property>
808+
</object>
809+
</child>
810+
</object>
811+
</child>
812+
<child>
813+
<object class="GtkScrolledWindow" id="scrolled_window_broken_files">
814+
<property name="vexpand">True</property>
815+
</object>
816+
</child>
783817
</object>
784818
</property>
785819
<property name="position">9</property>

0 commit comments

Comments
 (0)