Skip to content

Commit 0a8440e

Browse files
committed
Minor corrections to wolfposd's implementation
1 parent dcabf76 commit 0a8440e

File tree

1 file changed

+50
-30
lines changed

1 file changed

+50
-30
lines changed

src/main/java/nsusbloader/Controllers/GamesController.java

Lines changed: 50 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
Copyright 2019-2020 Dmitry Isaenko
2+
Copyright 2019-2020 Dmitry Isaenko, wolfposd
33
44
This file is part of NS-USBloader.
55
@@ -52,6 +52,7 @@ public class GamesController implements Initializable {
5252

5353
private static final String REGEX_ONLY_NSP = ".*\\.nsp$";
5454
private static final String REGEX_ALLFILES_TINFOIL = ".*\\.(nsp$|xci$|nsz$|xcz$)";
55+
private static final String REGEX_ALLFILES = ".*";
5556

5657
@FXML
5758
private AnchorPane usbNetPane;
@@ -204,8 +205,8 @@ private boolean isTinfoil() {
204205
return getSelectedProtocol().equals("TinFoil");
205206
}
206207

207-
private boolean isNSPFileFilterForGL() {
208-
return MediatorControl.getInstance().getContoller().getSettingsCtrlr().getGoldleafSettings().getNSPFileFilterForGL();
208+
private boolean isAllFiletypesAllowedForGL() {
209+
return ! MediatorControl.getInstance().getContoller().getSettingsCtrlr().getGoldleafSettings().getNSPFileFilterForGL();
209210
}
210211

211212
private boolean isXciNszXczSupport() {
@@ -222,13 +223,18 @@ private boolean isXciNszXczSupport() {
222223
private String getRegexForFiles() {
223224
if (isTinfoil() && isXciNszXczSupport())
224225
return REGEX_ALLFILES_TINFOIL;
226+
else if (isGoldLeaf() && isAllFiletypesAllowedForGL())
227+
return REGEX_ALLFILES;
225228
else
226229
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;
232238
}
233239

234240
/**
@@ -242,10 +248,12 @@ private void selectFilesBtnAction() {
242248

243249
if (isTinfoil() && isXciNszXczSupport()) {
244250
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()) {
246253
fileChooser.getExtensionFilters().addAll(new FileChooser.ExtensionFilter("Any file", "*.*"),
247254
new FileChooser.ExtensionFilter("NSP ROM", "*.nsp"));
248-
} else {
255+
}
256+
else {
249257
fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("NSP ROM", "*.nsp"));
250258
}
251259

@@ -270,7 +278,7 @@ private void selectFoldersBtnAction() {
270278

271279
performInBackgroundAndUpdate(() -> {
272280
final List<File> allFiles = new ArrayList<>();
273-
collectFiles(allFiles, startFolder, getRegexForFiles());
281+
collectFiles(allFiles, startFolder, getRegexForFiles(), getRegexForFolders());
274282
return allFiles;
275283
}, (files) -> {
276284
if (!files.isEmpty()) {
@@ -285,20 +293,34 @@ private void selectFoldersBtnAction() {
285293
* used to recursively walk all directories, every file will be added to the storage list
286294
* @param storage used to hold files
287295
* @param startFolder where to start
288-
* @param regex for filenames
296+
* @param filesRegex for filenames
289297
*/
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;
301316
}
317+
318+
File[] files = startFolder.listFiles();
319+
if (files == null)
320+
return;
321+
322+
for (File file : files)
323+
collectFiles(storage, file, filesRegex, foldersRegex);
302324
}
303325

304326
/**
@@ -414,15 +436,15 @@ private void handleDragOver(DragEvent event){
414436
* */
415437
@FXML
416438
private void handleDrop(DragEvent event) {
417-
final String regex = getRegexForFiles();
439+
final String regexForFiles = getRegexForFiles();
440+
final String regexForFolders = getRegexForFolders();
418441

419442
List<File> files = event.getDragboard().getFiles();
420443

421444
performInBackgroundAndUpdate(() -> {
422445
List<File> allFiles = new ArrayList<>();
423446
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));
426448
}
427449
return allFiles;
428450
}, allFiles -> {
@@ -484,9 +506,7 @@ public void disableUploadStopBtn(boolean disable){
484506
private <T> void performInBackgroundAndUpdate(Supplier<T> background, Consumer<T> update) {
485507
new Thread(() -> {
486508
final T result = background.get();
487-
Platform.runLater(() -> {
488-
update.accept(result);
489-
});
509+
Platform.runLater(() -> update.accept(result));
490510
}).start();
491511
}
492512

@@ -505,4 +525,4 @@ public void updatePreferencesOnExit(){
505525
preferences.setNetUsb(getSelectedNetUsb());
506526
preferences.setNsIp(getNsIp());
507527
}
508-
}
528+
}

0 commit comments

Comments
 (0)