1
1
#![ allow( clippy:: needless_late_init) ]
2
2
#![ warn( clippy:: unwrap_used) ]
3
3
4
+ use std:: path:: PathBuf ;
4
5
use std:: thread;
5
6
6
7
use clap:: Parser ;
@@ -79,6 +80,7 @@ fn main() {
79
80
fn duplicates ( duplicates : DuplicatesArgs , stop_receiver : & Receiver < ( ) > , progress_sender : & Sender < ProgressData > ) {
80
81
let DuplicatesArgs {
81
82
common_cli_items,
83
+ reference_directories,
82
84
minimal_file_size,
83
85
maximal_file_size,
84
86
minimal_cached_file_size,
@@ -103,7 +105,7 @@ fn duplicates(duplicates: DuplicatesArgs, stop_receiver: &Receiver<()>, progress
103
105
) ;
104
106
let mut item = DuplicateFinder :: new ( params) ;
105
107
106
- set_common_settings ( & mut item, & common_cli_items) ;
108
+ set_common_settings ( & mut item, & common_cli_items, Some ( reference_directories . reference_directories . as_ref ( ) ) ) ;
107
109
item. set_minimal_file_size ( minimal_file_size) ;
108
110
item. set_maximal_file_size ( maximal_file_size) ;
109
111
item. set_delete_method ( delete_method. delete_method ) ;
@@ -119,7 +121,7 @@ fn empty_folders(empty_folders: EmptyFoldersArgs, stop_receiver: &Receiver<()>,
119
121
120
122
let mut item = EmptyFolder :: new ( ) ;
121
123
122
- set_common_settings ( & mut item, & common_cli_items) ;
124
+ set_common_settings ( & mut item, & common_cli_items, None ) ;
123
125
if delete_folders {
124
126
item. set_delete_method ( DeleteMethod :: Delete ) ;
125
127
}
@@ -141,7 +143,7 @@ fn biggest_files(biggest_files: BiggestFilesArgs, stop_receiver: &Receiver<()>,
141
143
let params = BigFileParameters :: new ( number_of_files, big_files_mode) ;
142
144
let mut item = BigFile :: new ( params) ;
143
145
144
- set_common_settings ( & mut item, & common_cli_items) ;
146
+ set_common_settings ( & mut item, & common_cli_items, None ) ;
145
147
if delete_files {
146
148
item. set_delete_method ( DeleteMethod :: Delete ) ;
147
149
}
@@ -156,7 +158,7 @@ fn empty_files(empty_files: EmptyFilesArgs, stop_receiver: &Receiver<()>, progre
156
158
157
159
let mut item = EmptyFiles :: new ( ) ;
158
160
159
- set_common_settings ( & mut item, & common_cli_items) ;
161
+ set_common_settings ( & mut item, & common_cli_items, None ) ;
160
162
if delete_files {
161
163
item. set_delete_method ( DeleteMethod :: Delete ) ;
162
164
}
@@ -171,7 +173,7 @@ fn temporary(temporary: TemporaryArgs, stop_receiver: &Receiver<()>, progress_se
171
173
172
174
let mut item = Temporary :: new ( ) ;
173
175
174
- set_common_settings ( & mut item, & common_cli_items) ;
176
+ set_common_settings ( & mut item, & common_cli_items, None ) ;
175
177
if delete_files {
176
178
item. set_delete_method ( DeleteMethod :: Delete ) ;
177
179
}
@@ -184,6 +186,7 @@ fn temporary(temporary: TemporaryArgs, stop_receiver: &Receiver<()>, progress_se
184
186
fn similar_images ( similar_images : SimilarImagesArgs , stop_receiver : & Receiver < ( ) > , progress_sender : & Sender < ProgressData > ) {
185
187
let SimilarImagesArgs {
186
188
common_cli_items,
189
+ reference_directories,
187
190
minimal_file_size,
188
191
maximal_file_size,
189
192
similarity_preset,
@@ -207,7 +210,7 @@ fn similar_images(similar_images: SimilarImagesArgs, stop_receiver: &Receiver<()
207
210
) ;
208
211
let mut item = SimilarImages :: new ( params) ;
209
212
210
- set_common_settings ( & mut item, & common_cli_items) ;
213
+ set_common_settings ( & mut item, & common_cli_items, Some ( reference_directories . reference_directories . as_ref ( ) ) ) ;
211
214
item. set_minimal_file_size ( minimal_file_size) ;
212
215
item. set_maximal_file_size ( maximal_file_size) ;
213
216
item. set_delete_method ( delete_method. delete_method ) ;
@@ -221,6 +224,7 @@ fn similar_images(similar_images: SimilarImagesArgs, stop_receiver: &Receiver<()
221
224
fn same_music ( same_music : SameMusicArgs , stop_receiver : & Receiver < ( ) > , progress_sender : & Sender < ProgressData > ) {
222
225
let SameMusicArgs {
223
226
common_cli_items,
227
+ reference_directories,
224
228
delete_method,
225
229
minimal_file_size,
226
230
maximal_file_size,
@@ -243,7 +247,7 @@ fn same_music(same_music: SameMusicArgs, stop_receiver: &Receiver<()>, progress_
243
247
) ;
244
248
let mut item = SameMusic :: new ( params) ;
245
249
246
- set_common_settings ( & mut item, & common_cli_items) ;
250
+ set_common_settings ( & mut item, & common_cli_items, Some ( reference_directories . reference_directories . as_ref ( ) ) ) ;
247
251
item. set_minimal_file_size ( minimal_file_size) ;
248
252
item. set_maximal_file_size ( maximal_file_size) ;
249
253
item. set_delete_method ( delete_method. delete_method ) ;
@@ -259,7 +263,7 @@ fn invalid_symlinks(invalid_symlinks: InvalidSymlinksArgs, stop_receiver: &Recei
259
263
260
264
let mut item = InvalidSymlinks :: new ( ) ;
261
265
262
- set_common_settings ( & mut item, & common_cli_items) ;
266
+ set_common_settings ( & mut item, & common_cli_items, None ) ;
263
267
if delete_files {
264
268
item. set_delete_method ( DeleteMethod :: Delete ) ;
265
269
}
@@ -283,7 +287,7 @@ fn broken_files(broken_files: BrokenFilesArgs, stop_receiver: &Receiver<()>, pro
283
287
let params = BrokenFilesParameters :: new ( checked_type) ;
284
288
let mut item = BrokenFiles :: new ( params) ;
285
289
286
- set_common_settings ( & mut item, & common_cli_items) ;
290
+ set_common_settings ( & mut item, & common_cli_items, None ) ;
287
291
if delete_files {
288
292
item. set_delete_method ( DeleteMethod :: Delete ) ;
289
293
}
@@ -295,6 +299,7 @@ fn broken_files(broken_files: BrokenFilesArgs, stop_receiver: &Receiver<()>, pro
295
299
296
300
fn similar_videos ( similar_videos : SimilarVideosArgs , stop_receiver : & Receiver < ( ) > , progress_sender : & Sender < ProgressData > ) {
297
301
let SimilarVideosArgs {
302
+ reference_directories,
298
303
common_cli_items,
299
304
tolerance,
300
305
minimal_file_size,
@@ -308,7 +313,7 @@ fn similar_videos(similar_videos: SimilarVideosArgs, stop_receiver: &Receiver<()
308
313
let params = SimilarVideosParameters :: new ( tolerance, ignore_same_size. ignore_same_size , !allow_hard_links. allow_hard_links ) ;
309
314
let mut item = SimilarVideos :: new ( params) ;
310
315
311
- set_common_settings ( & mut item, & common_cli_items) ;
316
+ set_common_settings ( & mut item, & common_cli_items, Some ( reference_directories . reference_directories . as_ref ( ) ) ) ;
312
317
item. set_minimal_file_size ( minimal_file_size) ;
313
318
item. set_maximal_file_size ( maximal_file_size) ;
314
319
item. set_delete_method ( delete_method. delete_method ) ;
@@ -325,7 +330,7 @@ fn bad_extensions(bad_extensions: BadExtensionsArgs, stop_receiver: &Receiver<()
325
330
let params = BadExtensionsParameters :: new ( ) ;
326
331
let mut item = BadExtensions :: new ( params) ;
327
332
328
- set_common_settings ( & mut item, & common_cli_items) ;
333
+ set_common_settings ( & mut item, & common_cli_items, None ) ;
329
334
330
335
item. find_bad_extensions_files ( Some ( stop_receiver) , Some ( progress_sender) ) ;
331
336
@@ -354,13 +359,19 @@ fn save_and_print_results<T: CommonData + PrintResults>(component: &mut T, commo
354
359
component. get_text_messages ( ) . print_messages ( ) ;
355
360
}
356
361
357
- fn set_common_settings < T > ( component : & mut T , common_cli_items : & CommonCliItems )
362
+ fn set_common_settings < T > ( component : & mut T , common_cli_items : & CommonCliItems , reference_directories : Option < & Vec < PathBuf > > )
358
363
where
359
364
T : CommonData + PrintResults ,
360
365
{
361
366
set_number_of_threads ( common_cli_items. thread_number ) ;
362
367
363
- component. set_included_directory ( common_cli_items. directories . clone ( ) ) ;
368
+ let mut included_directories = common_cli_items. directories . clone ( ) ;
369
+ if let Some ( reference_directories) = reference_directories {
370
+ included_directories. extend_from_slice ( reference_directories) ;
371
+ component. set_reference_directory ( reference_directories. clone ( ) ) ;
372
+ }
373
+
374
+ component. set_included_directory ( included_directories) ;
364
375
component. set_excluded_directory ( common_cli_items. excluded_directories . clone ( ) ) ;
365
376
component. set_excluded_items ( common_cli_items. excluded_items . clone ( ) ) ;
366
377
component. set_recursive_search ( !common_cli_items. not_recursive ) ;
0 commit comments