Skip to content

Commit 8da07a3

Browse files
committed
Refactor save-settings chain on exit (see Controllers package)
Remove concept of 'OldGoldleaf version'. Now all supported version of GoldLeaf listed in Settings tab and one of them has to be always selected. Add GoldLeaf CLI support Remove unnecessary tails of 'extras' from CLI Tinfoil/Awoo NET mode.
1 parent dc995e1 commit 8da07a3

16 files changed

+196
-107
lines changed

src/main/java/nsusbloader/AppPreferences.java

Lines changed: 8 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
*/
1919
package nsusbloader;
2020

21+
import nsusbloader.Controllers.SettingsController;
22+
2123
import java.util.Locale;
2224
import java.util.prefs.Preferences;
2325

@@ -29,41 +31,6 @@ public class AppPreferences {
2931

3032
private AppPreferences(){ preferences = Preferences.userRoot().node("NS-USBloader"); }
3133

32-
public void setAll(
33-
String Protocol,
34-
String PreviouslyOpened,
35-
String NetUsb,
36-
String NsIp,
37-
boolean NsIpValidate,
38-
boolean ExpertMode,
39-
boolean AutoIp,
40-
boolean RandPort,
41-
boolean NotServe,
42-
String HostIp,
43-
String HostPort,
44-
String HostExtra,
45-
boolean autoCheck4Updates,
46-
boolean tinfoilXciSupport,
47-
boolean nspFileFilterForGl,
48-
String useOldGlVersion
49-
){
50-
setProtocol(Protocol);
51-
setRecent(PreviouslyOpened);
52-
setNetUsb(NetUsb);
53-
setNsIp(NsIp);
54-
setNsIpValidationNeeded(NsIpValidate);
55-
setExpertMode(ExpertMode);
56-
setAutoDetectIp(AutoIp);
57-
setRandPort(RandPort);
58-
setNotServeRequests(NotServe);
59-
setHostIp(HostIp);
60-
setHostPort(HostPort);
61-
setHostExtra(HostExtra);
62-
setAutoCheckUpdates(autoCheck4Updates);
63-
setTfXCI(tinfoilXciSupport);
64-
setNspFileFilterGL(nspFileFilterForGl);
65-
setUseOldGlVersion(useOldGlVersion);
66-
}
6734
public String getTheme(){
6835
String theme = preferences.get("THEME", "/res/app_dark.css"); // Don't let user to change settings manually
6936
if (!theme.matches("(^/res/app_dark.css$)|(^/res/app_light.css$)"))
@@ -135,8 +102,12 @@ public String getHostPort(){
135102
public boolean getNspFileFilterGL(){return preferences.getBoolean("GL_NSP_FILTER", false); }
136103
public void setNspFileFilterGL(boolean prop){preferences.putBoolean("GL_NSP_FILTER", prop);}
137104

138-
public String getUseOldGlVersion(){ return preferences.get("OldGlVersion", ""); }
139-
public void setUseOldGlVersion(String version){ preferences.put("OldGlVersion", version);}
105+
public String getGlVersion(){
106+
int recentGlVersionIndex = SettingsController.glSupportedVersions.length - 1;
107+
String recentGlVersion = SettingsController.glSupportedVersions[recentGlVersionIndex];
108+
return preferences.get("gl_version", recentGlVersion);
109+
}
110+
public void setGlVersion(String version){ preferences.put("gl_version", version);}
140111

141112
public double getSceneWidth(){ return preferences.getDouble("WIND_WIDTH", 850.0); }
142113
public void setSceneWidth(double value){ preferences.putDouble("WIND_WIDTH", value); }

src/main/java/nsusbloader/COM/USB/GoldLeaf.java renamed to src/main/java/nsusbloader/COM/USB/GoldLeaf_08.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
/**
4141
* GoldLeaf 0.8 processing
4242
*/
43-
class GoldLeaf extends TransferModule {
43+
class GoldLeaf_08 extends TransferModule {
4444
private boolean nspFilterForGl;
4545

4646
// CMD
@@ -70,7 +70,7 @@ class GoldLeaf extends TransferModule {
7070
// For using in CMD_SelectFile with SPEC:/ prefix
7171
private File selectedFile;
7272

73-
GoldLeaf(DeviceHandle handler, LinkedHashMap<String, File> nspMap, ICommunications task, ILogPrinter logPrinter, boolean nspFilter){
73+
GoldLeaf_08(DeviceHandle handler, LinkedHashMap<String, File> nspMap, ICommunications task, ILogPrinter logPrinter, boolean nspFilter){
7474
super(handler, nspMap, task, logPrinter);
7575

7676
final byte CMD_GetDriveCount = 1;

src/main/java/nsusbloader/COM/USB/UsbCommunications.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
*/
1919
package nsusbloader.COM.USB;
2020

21-
import javafx.concurrent.Task;
2221
import nsusbloader.COM.ICommunications;
2322
import nsusbloader.ModelControllers.ILogPrinter;
2423
import nsusbloader.ModelControllers.Log;
@@ -69,8 +68,8 @@ public void run() {
6968
case "TinFoil":
7069
module = new TinFoil(handler, nspMap, this, logPrinter);
7170
break;
72-
case "GoldLeaf":
73-
module = new GoldLeaf(handler, nspMap, this, logPrinter, nspFilterForGl);
71+
case "GoldLeafv0.8":
72+
module = new GoldLeaf_08(handler, nspMap, this, logPrinter, nspFilterForGl);
7473
break;
7574
case "GoldLeafv0.7.x":
7675
module = new GoldLeaf_07(handler, nspMap, this, logPrinter, nspFilterForGl);

src/main/java/nsusbloader/Controllers/FrontController.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020

2121
import javafx.collections.FXCollections;
2222
import javafx.collections.ObservableList;
23-
import javafx.concurrent.Task;
2423
import javafx.fxml.FXML;
2524
import javafx.fxml.Initializable;
2625
import javafx.scene.control.*;
@@ -267,7 +266,7 @@ private void uploadBtnAction(){
267266
SettingsController settings = MediatorControl.getInstance().getContoller().getSettingsCtrlr();
268267
// If USB selected
269268
if (getSelectedProtocol().equals("GoldLeaf") || ( getSelectedProtocol().equals("TinFoil") && getSelectedNetUsb().equals("USB") ) ){
270-
usbNetCommunications = new UsbCommunications(nspToUpload, getSelectedProtocol() + settings.getGlOldVer(), settings.getNSPFileFilterForGL());
269+
usbNetCommunications = new UsbCommunications(nspToUpload, getSelectedProtocol() + settings.getGlVer(), settings.getNSPFileFilterForGL());
271270
}
272271
else { // NET INSTALL OVER TINFOIL
273272
final String ipValidationPattern = "^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])$";
@@ -381,4 +380,13 @@ public void disableUploadStopBtn(boolean disable){
381380
public String getRecentPath(){
382381
return previouslyOpenedPath;
383382
}
383+
384+
public void updatePreferencesOnExit(){
385+
AppPreferences preferences = AppPreferences.getInstance();
386+
387+
preferences.setProtocol(getSelectedProtocol());
388+
preferences.setRecent(getRecentPath());
389+
preferences.setNetUsb(getSelectedNetUsb());
390+
preferences.setNsIp(getNsIp());
391+
}
384392
}

src/main/java/nsusbloader/Controllers/NSLMainController.java

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -118,25 +118,8 @@ public SplitMergeController getSmCtrlr(){
118118
* Save preferences before exit
119119
* */
120120
public void exit(){
121-
AppPreferences.getInstance().setAll(
122-
FrontTabController.getSelectedProtocol(),
123-
FrontTabController.getRecentPath(),
124-
FrontTabController.getSelectedNetUsb(),
125-
FrontTabController.getNsIp(),
126-
SettingsTabController.isNsIpValidate(),
127-
SettingsTabController.getExpertModeSelected(),
128-
SettingsTabController.getAutoIpSelected(),
129-
SettingsTabController.getRandPortSelected(),
130-
SettingsTabController.getNotServeSelected(),
131-
SettingsTabController.getHostIp(),
132-
SettingsTabController.getHostPort(),
133-
SettingsTabController.getHostExtra(),
134-
SettingsTabController.getAutoCheckForUpdates(),
135-
SettingsTabController.getTfXciNszXczSupport(),
136-
SettingsTabController.getNSPFileFilterForGL(),
137-
SettingsTabController.getGlOldVer()
138-
);
139-
121+
FrontTabController.updatePreferencesOnExit();
122+
SettingsTabController.updatePreferencesOnExit();
140123
SplitMergeTabController.updatePreferencesOnExit(); // NOTE: This shit above should be re-written to similar pattern
141124
RcmTabController.updatePreferencesOnExit();
142125
NXDTabController.updatePreferencesOnExit();

src/main/java/nsusbloader/Controllers/SettingsController.java

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -76,14 +76,11 @@ public class SettingsController implements Initializable {
7676
private ChoiceBox<String> langCB;
7777

7878
@FXML
79-
private CheckBox glOldVerCheck;
80-
81-
@FXML
82-
private ChoiceBox<String> glOldVerChoice;
79+
private ChoiceBox<String> glVersionChoiceBox;
8380

8481
private HostServices hs;
8582

86-
private static final String[] oldGlSupportedVersions = {"v0.5", "v0.7.x"};
83+
public static final String[] glSupportedVersions = {"v0.5", "v0.7.x", "v0.8"};
8784

8885
@Override
8986
public void initialize(URL url, ResourceBundle resourceBundle) {
@@ -273,19 +270,9 @@ public void initialize(URL url, ResourceBundle resourceBundle) {
273270
.getString("windowBodyRestartToApplyLang"));
274271
});
275272
// Set supported old versions
276-
glOldVerChoice.getItems().addAll(oldGlSupportedVersions);
277-
String oldVer = AppPreferences.getInstance().getUseOldGlVersion(); // Overhead; Too much validation of consistency
278-
if (Arrays.asList(oldGlSupportedVersions).contains(oldVer)) {
279-
glOldVerChoice.getSelectionModel().select(oldVer);
280-
glOldVerChoice.setDisable(false);
281-
glOldVerCheck.setSelected(true);
282-
}
283-
else {
284-
glOldVerChoice.getSelectionModel().select(0);
285-
glOldVerChoice.setDisable(true);
286-
glOldVerCheck.setSelected(false);
287-
}
288-
glOldVerCheck.setOnAction(e-> glOldVerChoice.setDisable(! glOldVerCheck.isSelected()) );
273+
glVersionChoiceBox.getItems().addAll(glSupportedVersions);
274+
String oldVer = AppPreferences.getInstance().getGlVersion(); // Overhead; Too much validation of consistency
275+
glVersionChoiceBox.getSelectionModel().select(oldVer);
289276
}
290277

291278
private boolean isWindows(){
@@ -313,10 +300,24 @@ public void setNewVersionLink(String newVer){
313300
newVersionLink.setText("https://github.com/developersu/ns-usbloader/releases/tag/"+newVer);
314301
}
315302

316-
public String getGlOldVer() {
317-
if (glOldVerCheck.isSelected())
318-
return glOldVerChoice.getValue();
319-
else
320-
return "";
303+
public String getGlVer() {
304+
return glVersionChoiceBox.getValue();
305+
}
306+
307+
public void updatePreferencesOnExit(){
308+
AppPreferences preferences = AppPreferences.getInstance();
309+
310+
preferences.setNsIpValidationNeeded(isNsIpValidate());
311+
preferences.setExpertMode(getExpertModeSelected());
312+
preferences.setAutoDetectIp(getAutoIpSelected());
313+
preferences.setRandPort(getRandPortSelected());
314+
preferences.setNotServeRequests(getNotServeSelected());
315+
preferences.setHostIp(getHostIp());
316+
preferences.setHostPort(getHostPort());
317+
preferences.setHostExtra(getHostExtra());
318+
preferences.setAutoCheckUpdates(getAutoCheckForUpdates());
319+
preferences.setTfXCI(getTfXciNszXczSupport());
320+
preferences.setNspFileFilterGL(getNSPFileFilterForGL());
321+
preferences.setGlVersion(getGlVer());
321322
}
322323
}

src/main/java/nsusbloader/cli/CommandLineInterface.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,10 @@ public CommandLineInterface(String[] args) {
6666
new TinfoilUsb(tfArguments);
6767
return;
6868
}
69+
if (cli.hasOption("g") || cli.hasOption("goldleaf")){
70+
final String[] glArguments = cli.getOptionValues("goldleaf");
71+
new GoldLeaf(glArguments);
72+
}
6973
}
7074
catch (ParseException pe){
7175
System.out.println(pe.getLocalizedMessage() +
@@ -128,7 +132,13 @@ private Options createCliOptions(){
128132
.hasArgs()
129133
.argName("FILE1 ...")
130134
.build();
131-
135+
/* GoldLeaf USB */
136+
final Option glOption = Option.builder("g")
137+
.longOpt("goldleaf")
138+
.desc("Install via GoldLeaf mode. Check '-g help' for information.")
139+
.hasArgs()
140+
.argName("...")
141+
.build();
132142

133143
final OptionGroup group = new OptionGroup();
134144
group.addOption(rcmOption);
@@ -137,6 +147,7 @@ private Options createCliOptions(){
137147
group.addOption(versionOption);
138148
group.addOption(helpOption);
139149
group.addOption(tinfoilOption);
150+
group.addOption(glOption);
140151

141152
options.addOptionGroup(group);
142153

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
package nsusbloader.cli;
2+
3+
import nsusbloader.COM.ICommunications;
4+
import nsusbloader.COM.USB.UsbCommunications;
5+
import nsusbloader.Controllers.SettingsController;
6+
7+
import java.io.File;
8+
import java.util.ArrayList;
9+
import java.util.List;
10+
11+
public class GoldLeaf {
12+
13+
private final String[] arguments;
14+
private List<File> filesList;
15+
private String goldLeafVersion;
16+
private boolean filterForNsp;
17+
18+
private int parseFileSince = 1;
19+
20+
public GoldLeaf(String[] arguments) throws InterruptedException, IncorrectSetupException{
21+
this.arguments = arguments;
22+
23+
checkArguments();
24+
parseGoldLeafVersion();
25+
parseFilesArguments();
26+
runGoldLeafBackend();
27+
}
28+
29+
public void checkArguments() throws IncorrectSetupException{
30+
if (arguments == null || arguments.length == 0) {
31+
throw new IncorrectSetupException("No arguments.\n" +
32+
"Try 'ns-usbloader -g help' for more information.");
33+
}
34+
35+
if (arguments.length == 1){
36+
if (isHelpDirective(arguments[0])){
37+
showHelp();
38+
}
39+
}
40+
41+
if (arguments.length > 1 && arguments[1].equals("filter")){
42+
filterForNsp = true;
43+
}
44+
}
45+
private boolean isHelpDirective(String argument){
46+
return argument.equals("help");
47+
}
48+
private void showHelp() throws IncorrectSetupException{
49+
throw new IncorrectSetupException("Usage:\n"
50+
+ "\tns-usbloader -g ver=<arg1> [filter] FILE1 ...\n"
51+
+ "\tns-usbloader --goldleaf ver=<arg1> [filter] FILE1 ..."
52+
+ "\n\nOption:"
53+
+ "\n\tver=<goldleaf_version>\tDefine GoldLeaf version (mandatory)\n\n"
54+
+ "\n\tfilter\t\nShow only *.nsp in GoldLeaf (optional)\n\n"
55+
+ getGlSupportedVersions());
56+
}
57+
private String getGlSupportedVersions(){
58+
StringBuilder builder = new StringBuilder("Supported version: \n");
59+
60+
for (String a : SettingsController.glSupportedVersions){
61+
builder.append("\t");
62+
builder.append(a);
63+
builder.append("\n");
64+
}
65+
return builder.toString();
66+
}
67+
68+
public void parseGoldLeafVersion() throws IncorrectSetupException{
69+
String argument1 = arguments[0];
70+
71+
if (! argument1.startsWith("ver=")) {
72+
throw new IncorrectSetupException("First argument must be 'ver=<goldleaf_version>'\n" +
73+
"Try 'ns-usbloader -g help' for more information.");
74+
}
75+
76+
goldLeafVersion = argument1.replaceAll("^ver=", "");
77+
78+
if (goldLeafVersion.isEmpty()) {
79+
throw new IncorrectSetupException("No spaces allowed before or after 'ver=<goldleaf_version>' argument.\n" +
80+
"Try 'ns-usbloader -g help' for more information.");
81+
}
82+
83+
for (String version : SettingsController.glSupportedVersions){
84+
if (version.equals(goldLeafVersion))
85+
return;
86+
}
87+
88+
throw new IncorrectSetupException("GoldLeaf " + goldLeafVersion + " is not supported.\n" +
89+
getGlSupportedVersions());
90+
}
91+
92+
public void parseFilesArguments() throws IncorrectSetupException{
93+
filesList = new ArrayList<>();
94+
File file;
95+
96+
for (; parseFileSince < arguments.length; parseFileSince++) {
97+
file = new File(arguments[parseFileSince]);
98+
if (file.exists())
99+
filesList.add(file);
100+
}
101+
102+
if (filesList.size() == 0 && goldLeafVersion.equals("v0.5")) {
103+
throw new IncorrectSetupException("File(s) doesn't exist but should be set for GoldLeaf v0.5.\n" +
104+
"Try 'ns-usbloader -g help' for more information.");
105+
}
106+
}
107+
108+
public void runGoldLeafBackend() throws InterruptedException {
109+
ICommunications task = new UsbCommunications(filesList,
110+
"GoldLeaf"+goldLeafVersion,
111+
filterForNsp);
112+
Thread thread = new Thread(task);
113+
thread.start();
114+
thread.join();
115+
}
116+
}

0 commit comments

Comments
 (0)