1
1
/*
2
- Copyright 2019-2020 Dmitry Isaenko
2
+ Copyright 2019-2020 Dmitry Isaenko, wolfposd
3
3
4
4
This file is part of NS-USBloader.
5
5
@@ -52,6 +52,7 @@ public class GamesController implements Initializable {
52
52
53
53
private static final String REGEX_ONLY_NSP = ".*\\ .nsp$" ;
54
54
private static final String REGEX_ALLFILES_TINFOIL = ".*\\ .(nsp$|xci$|nsz$|xcz$)" ;
55
+ private static final String REGEX_ALLFILES = ".*" ;
55
56
56
57
@ FXML
57
58
private AnchorPane usbNetPane ;
@@ -204,8 +205,8 @@ private boolean isTinfoil() {
204
205
return getSelectedProtocol ().equals ("TinFoil" );
205
206
}
206
207
207
- private boolean isNSPFileFilterForGL () {
208
- return MediatorControl .getInstance ().getContoller ().getSettingsCtrlr ().getGoldleafSettings ().getNSPFileFilterForGL ();
208
+ private boolean isAllFiletypesAllowedForGL () {
209
+ return ! MediatorControl .getInstance ().getContoller ().getSettingsCtrlr ().getGoldleafSettings ().getNSPFileFilterForGL ();
209
210
}
210
211
211
212
private boolean isXciNszXczSupport () {
@@ -222,13 +223,18 @@ private boolean isXciNszXczSupport() {
222
223
private String getRegexForFiles () {
223
224
if (isTinfoil () && isXciNszXczSupport ())
224
225
return REGEX_ALLFILES_TINFOIL ;
226
+ else if (isGoldLeaf () && isAllFiletypesAllowedForGL ())
227
+ return REGEX_ALLFILES ;
225
228
else
226
229
return REGEX_ONLY_NSP ;
227
- // currently only tinfoil supports all filetypes
228
- // everything else only supports nsp
229
- // else if (isGoldLeaf())
230
- // return REGEX_ONLY_NSP;
231
- // else
230
+ }
231
+ private String getRegexForFolders () {
232
+ final String regexForFiles = getRegexForFiles ();
233
+
234
+ if (regexForFiles .equals (REGEX_ALLFILES ))
235
+ return REGEX_ALLFILES_TINFOIL ;
236
+ else
237
+ return regexForFiles ;
232
238
}
233
239
234
240
/**
@@ -242,10 +248,12 @@ private void selectFilesBtnAction() {
242
248
243
249
if (isTinfoil () && isXciNszXczSupport ()) {
244
250
fileChooser .getExtensionFilters ().add (new FileChooser .ExtensionFilter ("NSP/XCI/NSZ/XCZ" , "*.nsp" , "*.xci" , "*.nsz" , "*.xcz" ));
245
- } else if (isGoldLeaf () && !isNSPFileFilterForGL ()) {
251
+ }
252
+ else if (isGoldLeaf () && isAllFiletypesAllowedForGL ()) {
246
253
fileChooser .getExtensionFilters ().addAll (new FileChooser .ExtensionFilter ("Any file" , "*.*" ),
247
254
new FileChooser .ExtensionFilter ("NSP ROM" , "*.nsp" ));
248
- } else {
255
+ }
256
+ else {
249
257
fileChooser .getExtensionFilters ().add (new FileChooser .ExtensionFilter ("NSP ROM" , "*.nsp" ));
250
258
}
251
259
@@ -270,7 +278,7 @@ private void selectFoldersBtnAction() {
270
278
271
279
performInBackgroundAndUpdate (() -> {
272
280
final List <File > allFiles = new ArrayList <>();
273
- collectFiles (allFiles , startFolder , getRegexForFiles ());
281
+ collectFiles (allFiles , startFolder , getRegexForFiles (), getRegexForFolders () );
274
282
return allFiles ;
275
283
}, (files ) -> {
276
284
if (!files .isEmpty ()) {
@@ -285,20 +293,34 @@ private void selectFoldersBtnAction() {
285
293
* used to recursively walk all directories, every file will be added to the storage list
286
294
* @param storage used to hold files
287
295
* @param startFolder where to start
288
- * @param regex for filenames
296
+ * @param filesRegex for filenames
289
297
*/
290
- private void collectFiles (List <File > storage , File startFolder , final String regex ) {
291
- if (startFolder .isDirectory ()) {
292
- File [] files = startFolder .listFiles ();
293
- if (files != null )
294
- for (File f : files ) {
295
- if (f .isDirectory ()) {
296
- collectFiles (storage , f , regex );
297
- } else if (f .getName ().toLowerCase ().matches (regex )) {
298
- storage .add (f );
299
- }
300
- }
298
+ // TODO: Too sophisticated. Should be moved to simple class to keep things simplier
299
+ private void collectFiles (List <File > storage ,
300
+ File startFolder ,
301
+ final String filesRegex ,
302
+ final String foldersRegex )
303
+ {
304
+ final String startFolderNameInLowercase = startFolder .getName ().toLowerCase ();
305
+
306
+ if (startFolder .isFile ()) {
307
+ if (startFolderNameInLowercase .matches (filesRegex )) {
308
+ storage .add (startFolder );
309
+ }
310
+ return ;
311
+ }
312
+
313
+ if (startFolderNameInLowercase .matches (foldersRegex )) {
314
+ storage .add (startFolder );
315
+ return ;
301
316
}
317
+
318
+ File [] files = startFolder .listFiles ();
319
+ if (files == null )
320
+ return ;
321
+
322
+ for (File file : files )
323
+ collectFiles (storage , file , filesRegex , foldersRegex );
302
324
}
303
325
304
326
/**
@@ -414,15 +436,15 @@ private void handleDragOver(DragEvent event){
414
436
* */
415
437
@ FXML
416
438
private void handleDrop (DragEvent event ) {
417
- final String regex = getRegexForFiles ();
439
+ final String regexForFiles = getRegexForFiles ();
440
+ final String regexForFolders = getRegexForFolders ();
418
441
419
442
List <File > files = event .getDragboard ().getFiles ();
420
443
421
444
performInBackgroundAndUpdate (() -> {
422
445
List <File > allFiles = new ArrayList <>();
423
446
if (files != null && files .size () != 0 ) {
424
- files .stream ().filter (File ::isDirectory ).forEach (f -> collectFiles (allFiles , f , regex ));
425
- files .stream ().filter (f -> f .getName ().toLowerCase ().matches (regex )).forEach (allFiles ::add );
447
+ files .forEach (f -> collectFiles (allFiles , f , regexForFiles , regexForFolders ));
426
448
}
427
449
return allFiles ;
428
450
}, allFiles -> {
@@ -484,9 +506,7 @@ public void disableUploadStopBtn(boolean disable){
484
506
private <T > void performInBackgroundAndUpdate (Supplier <T > background , Consumer <T > update ) {
485
507
new Thread (() -> {
486
508
final T result = background .get ();
487
- Platform .runLater (() -> {
488
- update .accept (result );
489
- });
509
+ Platform .runLater (() -> update .accept (result ));
490
510
}).start ();
491
511
}
492
512
@@ -505,4 +525,4 @@ public void updatePreferencesOnExit(){
505
525
preferences .setNetUsb (getSelectedNetUsb ());
506
526
preferences .setNsIp (getNsIp ());
507
527
}
508
- }
528
+ }
0 commit comments