1
- use std:: collections:: BTreeSet ;
1
+ use std:: collections:: { BTreeSet , HashMap } ;
2
2
use std:: fs:: File ;
3
3
use std:: io:: prelude:: * ;
4
4
use std:: io:: BufWriter ;
@@ -27,6 +27,7 @@ static DISABLED_EXTENSIONS: &[&str] = &["file", "cache", "bak"]; // Such files c
27
27
// ("real_content_extension", "current_file_extension")
28
28
static WORKAROUNDS : & [ ( & str , & str ) ] = & [
29
29
// Wine/Windows
30
+ ( "der" , "cat" ) ,
30
31
( "exe" , "acm" ) ,
31
32
( "exe" , "ax" ) ,
32
33
( "exe" , "bck" ) ,
@@ -38,78 +39,86 @@ static WORKAROUNDS: &[(&str, &str)] = &[
38
39
( "exe" , "drv" ) ,
39
40
( "exe" , "drv16" ) ,
40
41
( "exe" , "ds" ) ,
42
+ ( "exe" , "efi" ) ,
41
43
( "exe" , "exe16" ) ,
42
44
( "exe" , "fon" ) , // Type of font or something else
45
+ ( "exe" , "mod16" ) ,
43
46
( "exe" , "msstyles" ) ,
47
+ ( "exe" , "mui" ) ,
44
48
( "exe" , "orig" ) ,
49
+ ( "exe" , "signed" ) ,
50
+ ( "exe" , "sys" ) ,
45
51
( "exe" , "sys" ) ,
46
52
( "exe" , "tlb" ) ,
47
53
( "exe" , "vxd" ) ,
48
- ( "exe" , "sys" ) ,
49
- ( "exe" , "mod16" ) ,
54
+ ( "exe" , "winmd" ) ,
55
+ ( "xml" , "adml" ) ,
56
+ ( "xml" , "manifest" ) ,
57
+ ( "xml" , "mum" ) ,
50
58
// Other
51
- ( "zip" , "odg" ) , // Libreoffice
52
- ( "ods" , "ots" ) , // Libreoffice
53
- ( "exe" , "efi" ) ,
54
- ( "sh" , "sample" ) , // Git
55
- ( "exe" , "signed" ) ,
56
- ( "gz" , "blend" ) ,
57
- ( "gz" , "crate" ) ,
58
- ( "gz" , "svgz" ) ,
59
- ( "gz" , "tgz" ) ,
60
- ( "html" , "md" ) ,
61
- ( "html" , "svg" ) , // Quite strange, but yes it works
62
- ( "jpg" , "jfif" ) ,
63
- ( "mobi" , "azw3" ) ,
64
- ( "obj" , "o" ) ,
65
- ( "obj" , "bin" ) ,
66
- ( "odp" , "otp" ) ,
67
- ( "odt" , "ott" ) ,
68
- ( "ogg" , "ogv" ) ,
69
- ( "pptx" , "ppsx" ) ,
70
- ( "sh" , "bash" ) ,
71
- ( "sh" , "py" ) ,
72
- ( "sh" , "pyx" ) ,
73
- ( "xml" , "sopcinfo" ) , // Quartus
74
- ( "xml" , "bsp" ) , // Quartus
75
- ( "xml" , "fb2" ) ,
76
- ( "xml" , "user" ) , // Qtcreator
77
- ( "sh" , "rs" ) ,
78
- ( "sh" , "pl" ) , // Gnome/Linux
79
- ( "sh" , "pm" ) , // Gnome/Linux
80
- ( "xml" , "cbp" ) , // CodeBlocks config
81
- ( "xml" , "cmb" ) ,
82
- ( "xml" , "cfg" ) ,
83
- ( "xml" , "conf" ) ,
84
- ( "xml" , "config" ) ,
85
- ( "xml" , "dae" ) ,
86
- ( "xml" , "docbook" ) ,
87
- ( "xml" , "gir" ) ,
88
- ( "xml" , "glade" ) ,
59
+ ( "gz" , "blend" ) , // Blender
60
+ ( "gz" , "crate" ) , // Cargo
61
+ ( "gz" , "svgz" ) , // Archive svg
62
+ ( "gz" , "tgz" ) , // Archive
63
+ ( "html" , "md" ) , // Markdown
64
+ ( "jpg" , "jfif" ) , // Photo format
65
+ ( "mobi" , "azw3" ) , // Ebook format
66
+ ( "mpg" , "vob" ) , // Weddings in parts have usually vob extension
67
+ ( "obj" , "bin" ) , // Multiple apps, Czkawka, Nvidia, Windows
68
+ ( "obj" , "o" ) , // Compilators
69
+ ( "odp" , "otp" ) , // LibreOffice
70
+ ( "ods" , "ots" ) , // Libreoffice
71
+ ( "odt" , "ott" ) , // Libreoffice
72
+ ( "ogg" , "ogv" ) , // Audio format
73
+ ( "pptx" , "ppsx" ) , // Powerpoint
74
+ ( "sh" , "bash" ) , // Linux
75
+ ( "sh" , "pl" ) , // Gnome/Linux
76
+ ( "sh" , "pm" ) , // Gnome/Linux
77
+ ( "sh" , "py" ) , // Python
78
+ ( "sh" , "pyx" ) , // Python
79
+ ( "sh" , "rs" ) , // Rust
80
+ ( "sh" , "sample" ) , // Git
81
+ ( "xml" , "bsp" ) , // Quartus
82
+ ( "xml" , "cbp" ) , // CodeBlocks config
83
+ ( "xml" , "cfg" ) , // Multiple apps - Godot
84
+ ( "xml" , "cmb" ) , // Cambalache
85
+ ( "xml" , "conf" ) , // Multiple apps - Python
86
+ ( "xml" , "config" ) , // Multiple apps - QT Creator
87
+ ( "xml" , "dae" ) , // 3D models
88
+ ( "xml" , "docbook" ) , //
89
+ ( "xml" , "fb2" ) , //
90
+ ( "xml" , "gir" ) , // GTK
91
+ ( "xml" , "glade" ) , // Glade
92
+ ( "xml" , "iml" ) , // Intelij Idea
93
+ ( "xml" , "kdenlive" ) , // KDenLive
94
+ ( "xml" , "lang" ) , // ?
95
+ ( "xml" , "policy" ) , // SystemD
96
+ ( "xml" , "qsys" ) , // Quartus
97
+ ( "xml" , "sopcinfo" ) , // Quartus
98
+ ( "xml" , "svg" ) , // SVG
99
+ ( "xml" , "ui" ) , // Cambalache, Glade
100
+ ( "xml" , "user" ) , // Qtcreator
101
+ ( "xml" , "vbox" ) , // VirtualBox
102
+ ( "xml" , "vbox-prev" ) , // VirtualBox
103
+ ( "xml" , "vcproj" ) , // VisualStudio
104
+ ( "xml" , "xba" ) , // Libreoffice
105
+ ( "xml" , "xcd" ) , // Libreoffice files
106
+ ( "zip" , "apk" ) , // Android apk
107
+ ( "zip" , "cbr" ) , // Komiksy
108
+ ( "zip" , "dat" ) , // Multiple - python, brave
109
+ ( "zip" , "doc" ) , // Word
110
+ ( "zip" , "docx" ) , // Word
111
+ ( "zip" , "jar" ) , // Java
112
+ ( "zip" , "kra" ) , // Krita
113
+ ( "zip" , "nupkg" ) , // Nuget packages
114
+ ( "zip" , "odg" ) , // Libreoffice
115
+ ( "zip" , "pptx" ) , // Powerpoint
116
+ ( "zip" , "whl" ) , // Python packages
117
+ ( "zip" , "xpi" ) , // Firefox extensions
118
+ ( "zip" , "zcos" ) , // Scilab
119
+ // Probably invalid
120
+ ( "html" , "svg" ) ,
89
121
( "xml" , "html" ) ,
90
- ( "xml" , "kdenlive" ) ,
91
- ( "xml" , "lang" ) ,
92
- ( "xml" , "svg" ) ,
93
- ( "xml" , "ui" ) , // Cambalache, Glade
94
- ( "xml" , "vcproj" ) , // VisualStudio
95
- ( "xml" , "iml" ) , // Intelij Idea
96
- ( "xml" , "manifest" ) ,
97
- ( "xml" , "xcd" ) , // Libreoffice files
98
- ( "xml" , "policy" ) ,
99
- ( "xml" , "qsys" ) , // Quartus
100
- ( "xml" , "xba" ) , // Libreoffice
101
- ( "zip" , "apk" ) ,
102
- ( "zip" , "doc" ) ,
103
- ( "zip" , "docx" ) ,
104
- ( "zip" , "dat" ) ,
105
- ( "zip" , "jar" ) , // Java
106
- ( "zip" , "kra" ) , // Krita
107
- ( "zip" , "nupkg" ) ,
108
- ( "zip" , "pptx" ) ,
109
- ( "zip" , "whl" ) ,
110
- ( "zip" , "xpi" ) ,
111
- ( "zip" , "zcos" ) ,
112
- ( "zip" , "cbr" ) , // Komiksy
113
122
// Probably bug in external library
114
123
( "exe" , "doc" ) , // Not sure whe doc is not recognized
115
124
( "exe" , "xls" ) , // Not sure whe xls is not recognized
@@ -306,10 +315,15 @@ impl BadExtensions {
306
315
307
316
let mut files_to_check = Default :: default ( ) ;
308
317
mem:: swap ( & mut files_to_check, & mut self . files_to_check ) ;
309
-
310
318
//// PROGRESS THREAD END
319
+
320
+ let mut hashmap_workarounds: HashMap < & str , & str > = Default :: default ( ) ;
321
+ for ( proper, found) in WORKAROUNDS {
322
+ hashmap_workarounds. insert ( found, proper) ;
323
+ }
324
+
311
325
self . bad_extensions_files = files_to_check
312
- . into_par_iter ( ) // TODO into par iter after
326
+ . into_par_iter ( )
313
327
. map ( |file_entry| {
314
328
atomic_file_counter. fetch_add ( 1 , Ordering :: Relaxed ) ;
315
329
if stop_receiver. is_some ( ) && stop_receiver. unwrap ( ) . try_recv ( ) . is_ok ( ) {
@@ -350,7 +364,7 @@ impl BadExtensions {
350
364
}
351
365
352
366
// Check for all extensions that file can use(not sure if it is worth to do it)
353
- let mut all_available_extensions: BTreeSet < _ > = Default :: default ( ) ;
367
+ let mut all_available_extensions: BTreeSet < & str > = Default :: default ( ) ;
354
368
let think_extension = match current_extension. is_empty ( ) {
355
369
true => "" . to_string ( ) ,
356
370
false => {
@@ -363,9 +377,9 @@ impl BadExtensions {
363
377
}
364
378
365
379
// Workarounds
366
- for ( pre, post ) in WORKAROUNDS {
367
- if post == & current_extension . as_str ( ) && all_available_extensions. contains ( & pre) {
368
- all_available_extensions. insert ( post ) ;
380
+ if let Some ( pre) = hashmap_workarounds . get ( current_extension . as_str ( ) ) {
381
+ if all_available_extensions. contains ( pre) {
382
+ all_available_extensions. insert ( current_extension . as_str ( ) ) ;
369
383
}
370
384
}
371
385
0 commit comments