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.
This commit is contained in:
Dmitry Isaenko 2020-07-07 02:20:57 +03:00
parent dc995e1bae
commit 8da07a37ba
16 changed files with 196 additions and 107 deletions

View file

@ -18,6 +18,8 @@
*/ */
package nsusbloader; package nsusbloader;
import nsusbloader.Controllers.SettingsController;
import java.util.Locale; import java.util.Locale;
import java.util.prefs.Preferences; import java.util.prefs.Preferences;
@ -29,41 +31,6 @@ public class AppPreferences {
private AppPreferences(){ preferences = Preferences.userRoot().node("NS-USBloader"); } private AppPreferences(){ preferences = Preferences.userRoot().node("NS-USBloader"); }
public void setAll(
String Protocol,
String PreviouslyOpened,
String NetUsb,
String NsIp,
boolean NsIpValidate,
boolean ExpertMode,
boolean AutoIp,
boolean RandPort,
boolean NotServe,
String HostIp,
String HostPort,
String HostExtra,
boolean autoCheck4Updates,
boolean tinfoilXciSupport,
boolean nspFileFilterForGl,
String useOldGlVersion
){
setProtocol(Protocol);
setRecent(PreviouslyOpened);
setNetUsb(NetUsb);
setNsIp(NsIp);
setNsIpValidationNeeded(NsIpValidate);
setExpertMode(ExpertMode);
setAutoDetectIp(AutoIp);
setRandPort(RandPort);
setNotServeRequests(NotServe);
setHostIp(HostIp);
setHostPort(HostPort);
setHostExtra(HostExtra);
setAutoCheckUpdates(autoCheck4Updates);
setTfXCI(tinfoilXciSupport);
setNspFileFilterGL(nspFileFilterForGl);
setUseOldGlVersion(useOldGlVersion);
}
public String getTheme(){ public String getTheme(){
String theme = preferences.get("THEME", "/res/app_dark.css"); // Don't let user to change settings manually String theme = preferences.get("THEME", "/res/app_dark.css"); // Don't let user to change settings manually
if (!theme.matches("(^/res/app_dark.css$)|(^/res/app_light.css$)")) if (!theme.matches("(^/res/app_dark.css$)|(^/res/app_light.css$)"))
@ -135,8 +102,12 @@ public class AppPreferences {
public boolean getNspFileFilterGL(){return preferences.getBoolean("GL_NSP_FILTER", false); } public boolean getNspFileFilterGL(){return preferences.getBoolean("GL_NSP_FILTER", false); }
public void setNspFileFilterGL(boolean prop){preferences.putBoolean("GL_NSP_FILTER", prop);} public void setNspFileFilterGL(boolean prop){preferences.putBoolean("GL_NSP_FILTER", prop);}
public String getUseOldGlVersion(){ return preferences.get("OldGlVersion", ""); } public String getGlVersion(){
public void setUseOldGlVersion(String version){ preferences.put("OldGlVersion", version);} int recentGlVersionIndex = SettingsController.glSupportedVersions.length - 1;
String recentGlVersion = SettingsController.glSupportedVersions[recentGlVersionIndex];
return preferences.get("gl_version", recentGlVersion);
}
public void setGlVersion(String version){ preferences.put("gl_version", version);}
public double getSceneWidth(){ return preferences.getDouble("WIND_WIDTH", 850.0); } public double getSceneWidth(){ return preferences.getDouble("WIND_WIDTH", 850.0); }
public void setSceneWidth(double value){ preferences.putDouble("WIND_WIDTH", value); } public void setSceneWidth(double value){ preferences.putDouble("WIND_WIDTH", value); }

View file

@ -40,7 +40,7 @@ import java.util.concurrent.CompletableFuture;
/** /**
* GoldLeaf 0.8 processing * GoldLeaf 0.8 processing
*/ */
class GoldLeaf extends TransferModule { class GoldLeaf_08 extends TransferModule {
private boolean nspFilterForGl; private boolean nspFilterForGl;
// CMD // CMD
@ -70,7 +70,7 @@ class GoldLeaf extends TransferModule {
// For using in CMD_SelectFile with SPEC:/ prefix // For using in CMD_SelectFile with SPEC:/ prefix
private File selectedFile; private File selectedFile;
GoldLeaf(DeviceHandle handler, LinkedHashMap<String, File> nspMap, ICommunications task, ILogPrinter logPrinter, boolean nspFilter){ GoldLeaf_08(DeviceHandle handler, LinkedHashMap<String, File> nspMap, ICommunications task, ILogPrinter logPrinter, boolean nspFilter){
super(handler, nspMap, task, logPrinter); super(handler, nspMap, task, logPrinter);
final byte CMD_GetDriveCount = 1; final byte CMD_GetDriveCount = 1;

View file

@ -18,7 +18,6 @@
*/ */
package nsusbloader.COM.USB; package nsusbloader.COM.USB;
import javafx.concurrent.Task;
import nsusbloader.COM.ICommunications; import nsusbloader.COM.ICommunications;
import nsusbloader.ModelControllers.ILogPrinter; import nsusbloader.ModelControllers.ILogPrinter;
import nsusbloader.ModelControllers.Log; import nsusbloader.ModelControllers.Log;
@ -69,8 +68,8 @@ public class UsbCommunications implements ICommunications {
case "TinFoil": case "TinFoil":
module = new TinFoil(handler, nspMap, this, logPrinter); module = new TinFoil(handler, nspMap, this, logPrinter);
break; break;
case "GoldLeaf": case "GoldLeafv0.8":
module = new GoldLeaf(handler, nspMap, this, logPrinter, nspFilterForGl); module = new GoldLeaf_08(handler, nspMap, this, logPrinter, nspFilterForGl);
break; break;
case "GoldLeafv0.7.x": case "GoldLeafv0.7.x":
module = new GoldLeaf_07(handler, nspMap, this, logPrinter, nspFilterForGl); module = new GoldLeaf_07(handler, nspMap, this, logPrinter, nspFilterForGl);

View file

@ -20,7 +20,6 @@ package nsusbloader.Controllers;
import javafx.collections.FXCollections; import javafx.collections.FXCollections;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
import javafx.concurrent.Task;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
import javafx.scene.control.*; import javafx.scene.control.*;
@ -267,7 +266,7 @@ public class FrontController implements Initializable {
SettingsController settings = MediatorControl.getInstance().getContoller().getSettingsCtrlr(); SettingsController settings = MediatorControl.getInstance().getContoller().getSettingsCtrlr();
// If USB selected // If USB selected
if (getSelectedProtocol().equals("GoldLeaf") || ( getSelectedProtocol().equals("TinFoil") && getSelectedNetUsb().equals("USB") ) ){ if (getSelectedProtocol().equals("GoldLeaf") || ( getSelectedProtocol().equals("TinFoil") && getSelectedNetUsb().equals("USB") ) ){
usbNetCommunications = new UsbCommunications(nspToUpload, getSelectedProtocol() + settings.getGlOldVer(), settings.getNSPFileFilterForGL()); usbNetCommunications = new UsbCommunications(nspToUpload, getSelectedProtocol() + settings.getGlVer(), settings.getNSPFileFilterForGL());
} }
else { // NET INSTALL OVER TINFOIL else { // NET INSTALL OVER TINFOIL
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])$"; 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 class FrontController implements Initializable {
public String getRecentPath(){ public String getRecentPath(){
return previouslyOpenedPath; return previouslyOpenedPath;
} }
public void updatePreferencesOnExit(){
AppPreferences preferences = AppPreferences.getInstance();
preferences.setProtocol(getSelectedProtocol());
preferences.setRecent(getRecentPath());
preferences.setNetUsb(getSelectedNetUsb());
preferences.setNsIp(getNsIp());
}
} }

View file

@ -118,25 +118,8 @@ public class NSLMainController implements Initializable {
* Save preferences before exit * Save preferences before exit
* */ * */
public void exit(){ public void exit(){
AppPreferences.getInstance().setAll( FrontTabController.updatePreferencesOnExit();
FrontTabController.getSelectedProtocol(), SettingsTabController.updatePreferencesOnExit();
FrontTabController.getRecentPath(),
FrontTabController.getSelectedNetUsb(),
FrontTabController.getNsIp(),
SettingsTabController.isNsIpValidate(),
SettingsTabController.getExpertModeSelected(),
SettingsTabController.getAutoIpSelected(),
SettingsTabController.getRandPortSelected(),
SettingsTabController.getNotServeSelected(),
SettingsTabController.getHostIp(),
SettingsTabController.getHostPort(),
SettingsTabController.getHostExtra(),
SettingsTabController.getAutoCheckForUpdates(),
SettingsTabController.getTfXciNszXczSupport(),
SettingsTabController.getNSPFileFilterForGL(),
SettingsTabController.getGlOldVer()
);
SplitMergeTabController.updatePreferencesOnExit(); // NOTE: This shit above should be re-written to similar pattern SplitMergeTabController.updatePreferencesOnExit(); // NOTE: This shit above should be re-written to similar pattern
RcmTabController.updatePreferencesOnExit(); RcmTabController.updatePreferencesOnExit();
NXDTabController.updatePreferencesOnExit(); NXDTabController.updatePreferencesOnExit();

View file

@ -76,14 +76,11 @@ public class SettingsController implements Initializable {
private ChoiceBox<String> langCB; private ChoiceBox<String> langCB;
@FXML @FXML
private CheckBox glOldVerCheck; private ChoiceBox<String> glVersionChoiceBox;
@FXML
private ChoiceBox<String> glOldVerChoice;
private HostServices hs; private HostServices hs;
private static final String[] oldGlSupportedVersions = {"v0.5", "v0.7.x"}; public static final String[] glSupportedVersions = {"v0.5", "v0.7.x", "v0.8"};
@Override @Override
public void initialize(URL url, ResourceBundle resourceBundle) { public void initialize(URL url, ResourceBundle resourceBundle) {
@ -273,19 +270,9 @@ public class SettingsController implements Initializable {
.getString("windowBodyRestartToApplyLang")); .getString("windowBodyRestartToApplyLang"));
}); });
// Set supported old versions // Set supported old versions
glOldVerChoice.getItems().addAll(oldGlSupportedVersions); glVersionChoiceBox.getItems().addAll(glSupportedVersions);
String oldVer = AppPreferences.getInstance().getUseOldGlVersion(); // Overhead; Too much validation of consistency String oldVer = AppPreferences.getInstance().getGlVersion(); // Overhead; Too much validation of consistency
if (Arrays.asList(oldGlSupportedVersions).contains(oldVer)) { glVersionChoiceBox.getSelectionModel().select(oldVer);
glOldVerChoice.getSelectionModel().select(oldVer);
glOldVerChoice.setDisable(false);
glOldVerCheck.setSelected(true);
}
else {
glOldVerChoice.getSelectionModel().select(0);
glOldVerChoice.setDisable(true);
glOldVerCheck.setSelected(false);
}
glOldVerCheck.setOnAction(e-> glOldVerChoice.setDisable(! glOldVerCheck.isSelected()) );
} }
private boolean isWindows(){ private boolean isWindows(){
@ -313,10 +300,24 @@ public class SettingsController implements Initializable {
newVersionLink.setText("https://github.com/developersu/ns-usbloader/releases/tag/"+newVer); newVersionLink.setText("https://github.com/developersu/ns-usbloader/releases/tag/"+newVer);
} }
public String getGlOldVer() { public String getGlVer() {
if (glOldVerCheck.isSelected()) return glVersionChoiceBox.getValue();
return glOldVerChoice.getValue(); }
else
return ""; public void updatePreferencesOnExit(){
AppPreferences preferences = AppPreferences.getInstance();
preferences.setNsIpValidationNeeded(isNsIpValidate());
preferences.setExpertMode(getExpertModeSelected());
preferences.setAutoDetectIp(getAutoIpSelected());
preferences.setRandPort(getRandPortSelected());
preferences.setNotServeRequests(getNotServeSelected());
preferences.setHostIp(getHostIp());
preferences.setHostPort(getHostPort());
preferences.setHostExtra(getHostExtra());
preferences.setAutoCheckUpdates(getAutoCheckForUpdates());
preferences.setTfXCI(getTfXciNszXczSupport());
preferences.setNspFileFilterGL(getNSPFileFilterForGL());
preferences.setGlVersion(getGlVer());
} }
} }

View file

@ -66,6 +66,10 @@ public class CommandLineInterface {
new TinfoilUsb(tfArguments); new TinfoilUsb(tfArguments);
return; return;
} }
if (cli.hasOption("g") || cli.hasOption("goldleaf")){
final String[] glArguments = cli.getOptionValues("goldleaf");
new GoldLeaf(glArguments);
}
} }
catch (ParseException pe){ catch (ParseException pe){
System.out.println(pe.getLocalizedMessage() + System.out.println(pe.getLocalizedMessage() +
@ -128,7 +132,13 @@ public class CommandLineInterface {
.hasArgs() .hasArgs()
.argName("FILE1 ...") .argName("FILE1 ...")
.build(); .build();
/* GoldLeaf USB */
final Option glOption = Option.builder("g")
.longOpt("goldleaf")
.desc("Install via GoldLeaf mode. Check '-g help' for information.")
.hasArgs()
.argName("...")
.build();
final OptionGroup group = new OptionGroup(); final OptionGroup group = new OptionGroup();
group.addOption(rcmOption); group.addOption(rcmOption);
@ -137,6 +147,7 @@ public class CommandLineInterface {
group.addOption(versionOption); group.addOption(versionOption);
group.addOption(helpOption); group.addOption(helpOption);
group.addOption(tinfoilOption); group.addOption(tinfoilOption);
group.addOption(glOption);
options.addOptionGroup(group); options.addOptionGroup(group);

View file

@ -0,0 +1,116 @@
package nsusbloader.cli;
import nsusbloader.COM.ICommunications;
import nsusbloader.COM.USB.UsbCommunications;
import nsusbloader.Controllers.SettingsController;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class GoldLeaf {
private final String[] arguments;
private List<File> filesList;
private String goldLeafVersion;
private boolean filterForNsp;
private int parseFileSince = 1;
public GoldLeaf(String[] arguments) throws InterruptedException, IncorrectSetupException{
this.arguments = arguments;
checkArguments();
parseGoldLeafVersion();
parseFilesArguments();
runGoldLeafBackend();
}
public void checkArguments() throws IncorrectSetupException{
if (arguments == null || arguments.length == 0) {
throw new IncorrectSetupException("No arguments.\n" +
"Try 'ns-usbloader -g help' for more information.");
}
if (arguments.length == 1){
if (isHelpDirective(arguments[0])){
showHelp();
}
}
if (arguments.length > 1 && arguments[1].equals("filter")){
filterForNsp = true;
}
}
private boolean isHelpDirective(String argument){
return argument.equals("help");
}
private void showHelp() throws IncorrectSetupException{
throw new IncorrectSetupException("Usage:\n"
+ "\tns-usbloader -g ver=<arg1> [filter] FILE1 ...\n"
+ "\tns-usbloader --goldleaf ver=<arg1> [filter] FILE1 ..."
+ "\n\nOption:"
+ "\n\tver=<goldleaf_version>\tDefine GoldLeaf version (mandatory)\n\n"
+ "\n\tfilter\t\nShow only *.nsp in GoldLeaf (optional)\n\n"
+ getGlSupportedVersions());
}
private String getGlSupportedVersions(){
StringBuilder builder = new StringBuilder("Supported version: \n");
for (String a : SettingsController.glSupportedVersions){
builder.append("\t");
builder.append(a);
builder.append("\n");
}
return builder.toString();
}
public void parseGoldLeafVersion() throws IncorrectSetupException{
String argument1 = arguments[0];
if (! argument1.startsWith("ver=")) {
throw new IncorrectSetupException("First argument must be 'ver=<goldleaf_version>'\n" +
"Try 'ns-usbloader -g help' for more information.");
}
goldLeafVersion = argument1.replaceAll("^ver=", "");
if (goldLeafVersion.isEmpty()) {
throw new IncorrectSetupException("No spaces allowed before or after 'ver=<goldleaf_version>' argument.\n" +
"Try 'ns-usbloader -g help' for more information.");
}
for (String version : SettingsController.glSupportedVersions){
if (version.equals(goldLeafVersion))
return;
}
throw new IncorrectSetupException("GoldLeaf " + goldLeafVersion + " is not supported.\n" +
getGlSupportedVersions());
}
public void parseFilesArguments() throws IncorrectSetupException{
filesList = new ArrayList<>();
File file;
for (; parseFileSince < arguments.length; parseFileSince++) {
file = new File(arguments[parseFileSince]);
if (file.exists())
filesList.add(file);
}
if (filesList.size() == 0 && goldLeafVersion.equals("v0.5")) {
throw new IncorrectSetupException("File(s) doesn't exist but should be set for GoldLeaf v0.5.\n" +
"Try 'ns-usbloader -g help' for more information.");
}
}
public void runGoldLeafBackend() throws InterruptedException {
ICommunications task = new UsbCommunications(filesList,
"GoldLeaf"+goldLeafVersion,
filterForNsp);
Thread thread = new Thread(task);
thread.start();
thread.join();
}
}

View file

@ -24,7 +24,6 @@ import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
// TODO: Add 'don't serve requests' option
public class TinfoilNet { public class TinfoilNet {
private final String[] arguments; private final String[] arguments;
@ -33,7 +32,7 @@ public class TinfoilNet {
private String hostIp = ""; private String hostIp = "";
private String hostPortNum = ""; private String hostPortNum = "";
private String hostExtras = ""; //private String hostExtras = ""; // TODO: Add 'don't serve requests' option or remove this
private int parseFileSince = 1; private int parseFileSince = 1;
@ -79,22 +78,24 @@ public class TinfoilNet {
+ "\tns-usbloader --tfn nsip=<arg1> [hostip=<arg2>] FILE1 ..." + "\tns-usbloader --tfn nsip=<arg1> [hostip=<arg2>] FILE1 ..."
+ "\n\nOptions:" + "\n\nOptions:"
+ "\n\tnsip=<ip>\t\t\tDefine NS IP address (mandatory)" + "\n\tnsip=<ip>\t\t\tDefine NS IP address (mandatory)"
+ "\n\thostip=<ip[:port][/extra]>\tDefine this host IP address. Will be obtained automatically if not set."); + "\n\thostip=<ip[:port]>\tDefine this host IP address. Will be obtained automatically if not set.");
} }
private void parseNsIP() throws IncorrectSetupException{ private void parseNsIP() throws IncorrectSetupException{
String argument1 = arguments[0]; String argument1 = arguments[0];
if (! argument1.startsWith("nsip=")) if (! argument1.startsWith("nsip=")) {
throw new IncorrectSetupException("First argument must be 'nsip=<ip_address>'\n" + throw new IncorrectSetupException("First argument must be 'nsip=<ip_address>'\n" +
"Try 'ns-usbloader -n help' for more information."); "Try 'ns-usbloader -n help' for more information.");
}
nsIp = argument1.replaceAll("^nsip=", ""); nsIp = argument1.replaceAll("^nsip=", "");
if (nsIp.isEmpty()) if (nsIp.isEmpty()) {
throw new IncorrectSetupException("No spaces allowed before or after 'nsip=<ip_address>' argument.\n" + throw new IncorrectSetupException("No spaces allowed before or after 'nsip=<ip_address>' argument.\n" +
"Try 'ns-usbloader -n help' for more information."); "Try 'ns-usbloader -n help' for more information.");
} }
}
private void parseHostSettings(){ private void parseHostSettings(){
String argument2 = arguments[1]; String argument2 = arguments[1];
@ -106,10 +107,10 @@ public class TinfoilNet {
hostIp = argument2.replaceAll("(^hostip=)|(:.+?$)|(:$)", ""); hostIp = argument2.replaceAll("(^hostip=)|(:.+?$)|(:$)", "");
if (argument2.contains(":")) if (argument2.contains(":"))
hostPortNum = argument2.replaceAll("(^.+:)|(/.+?$)|(/$)", ""); hostPortNum = argument2.replaceAll("(^.+:)", "");
// hostPortNum = argument2.replaceAll("(^.+:)|(/.+?$)|(/$)", "");
if (argument2.contains("/")) //if (argument2.contains("/"))
hostExtras = argument2.replaceAll("^[^/]*/", ""); // hostExtras = argument2.replaceAll("^[^/]*/", "");
} }
private void parseFilesArguments() throws IncorrectSetupException{ private void parseFilesArguments() throws IncorrectSetupException{
@ -135,7 +136,7 @@ public class TinfoilNet {
false, false,
hostIp, hostIp,
hostPortNum, hostPortNum,
hostExtras); "");
Thread netCommThread = new Thread(netCommunications); Thread netCommThread = new Thread(netCommunications);
netCommThread.start(); netCommThread.start();
netCommThread.join(); netCommThread.join();

View file

@ -55,8 +55,8 @@
</VBox.margin></CheckBox> </VBox.margin></CheckBox>
<HBox alignment="CENTER_LEFT" spacing="5.0"> <HBox alignment="CENTER_LEFT" spacing="5.0">
<children> <children>
<CheckBox fx:id="glOldVerCheck" mnemonicParsing="false" text="%tab2_Cb_UseOldGlVersion" /> <Label text="%tab2_Cb_GlVersion" />
<ChoiceBox fx:id="glOldVerChoice" prefWidth="75.0" /> <ChoiceBox fx:id="glVersionChoiceBox" prefWidth="75.0" />
</children> </children>
<VBox.margin> <VBox.margin>
<Insets left="5.0" /> <Insets left="5.0" />

View file

@ -42,8 +42,6 @@ tab2_Cb_AllowXciNszXcz=Allow XCI / NSZ / XCZ files selection for Tinfoil
tab2_Lbl_AllowXciNszXczDesc=Used by applications that support XCI/NSZ/XCZ and utilizes Tinfoil transfer protocol. Don't change if not sure. Enable for Awoo Installer. tab2_Lbl_AllowXciNszXczDesc=Used by applications that support XCI/NSZ/XCZ and utilizes Tinfoil transfer protocol. Don't change if not sure. Enable for Awoo Installer.
tab2_Lbl_Language=Language tab2_Lbl_Language=Language
windowBodyRestartToApplyLang=Please restart application to apply changes. windowBodyRestartToApplyLang=Please restart application to apply changes.
tab2_Cb_GLshowNspOnly=Show only *.nsp in GoldLeaf.
tab2_Cb_UseOldGlVersion=Use old GoldLeaf version
btn_OpenSplitFile=Select split NSP btn_OpenSplitFile=Select split NSP
tab2_Lbl_ApplicationSettings=Main settings tab2_Lbl_ApplicationSettings=Main settings
tabSplMrg_Lbl_SplitNMergeTitle=Split & merge files tool tabSplMrg_Lbl_SplitNMergeTitle=Split & merge files tool
@ -68,3 +66,5 @@ windowTitleDownloadDrivers=Download and install drivers
windowBodyDownloadDrivers=Downloading drivers (libusbK v3.0.7.0)... windowBodyDownloadDrivers=Downloading drivers (libusbK v3.0.7.0)...
btn_Cancel=Cancel btn_Cancel=Cancel
btn_Close=Close btn_Close=Close
tab2_Cb_GlVersion=GoldLeaf version
tab2_Cb_GLshowNspOnly=Show only *.nsp in GoldLeaf.

View file

@ -43,7 +43,6 @@ tab2_Lbl_AllowXciNszXczDesc=Usato dalle applicazioni che supportano XCI/NSZ/XCZ
tab2_Lbl_Language=Lingua tab2_Lbl_Language=Lingua
windowBodyRestartToApplyLang=Riavvia l'applicazione per applicare le modifiche. windowBodyRestartToApplyLang=Riavvia l'applicazione per applicare le modifiche.
tab2_Cb_GLshowNspOnly=Mostra solo *.nsp in GoldLeaf. tab2_Cb_GLshowNspOnly=Mostra solo *.nsp in GoldLeaf.
tab2_Cb_UseOldGlVersion=Usa una vecchia versione di GoldLeaf
btn_OpenSplitFile=Seleziona NSP troncato btn_OpenSplitFile=Seleziona NSP troncato
tab2_Lbl_ApplicationSettings=Impostazioni principali tab2_Lbl_ApplicationSettings=Impostazioni principali
tabSplMrg_Lbl_SplitNMergeTitle=Strumento tronca e unisci tabSplMrg_Lbl_SplitNMergeTitle=Strumento tronca e unisci
@ -63,4 +62,5 @@ failure_txt=Fallito
btn_Select=Seleziona btn_Select=Seleziona
btn_InjectPayloader=Inietta payload btn_InjectPayloader=Inietta payload
btn_Cancel=Annulla btn_Cancel=Annulla
tab2_Cb_GlVersion=Versione di GoldLeaf

View file

@ -43,7 +43,6 @@ tab2_Lbl_AllowXciNszXczDesc=Usado por aplica\u00E7\u00F5es que suportam XCI/NSZ/
tab2_Lbl_Language=Idioma tab2_Lbl_Language=Idioma
windowBodyRestartToApplyLang=Por favor, reinicie para aplicar as modifica\u00E7\u00F5es. windowBodyRestartToApplyLang=Por favor, reinicie para aplicar as modifica\u00E7\u00F5es.
tab2_Cb_GLshowNspOnly=Mostrar apenas arquivos .nsp no GoldLeaf. tab2_Cb_GLshowNspOnly=Mostrar apenas arquivos .nsp no GoldLeaf.
tab2_Cb_UseOldGlVersion=Usar vers\u00E3o antiga do GoldLeaf.
btn_OpenSplitFile=Selecionar arquivos .nsp fragmentados(splitted) btn_OpenSplitFile=Selecionar arquivos .nsp fragmentados(splitted)
tab2_Lbl_ApplicationSettings=Configura\u00E7\u00F5es principais tab2_Lbl_ApplicationSettings=Configura\u00E7\u00F5es principais
tabSplMrg_Lbl_SplitNMergeTitle=Ferramentas para fragmentar e juntar(merge) arquivos. tabSplMrg_Lbl_SplitNMergeTitle=Ferramentas para fragmentar e juntar(merge) arquivos.
@ -63,4 +62,5 @@ failure_txt=Falhou
btn_Select=Selecionar btn_Select=Selecionar
btn_InjectPayloader=Injetar payload btn_InjectPayloader=Injetar payload
btn_Cancel=Cancelar btn_Cancel=Cancelar
tab2_Cb_GlVersion=Vers\u00E3o do GoldLeaf.

View file

@ -43,7 +43,6 @@ tab2_Lbl_AllowXciNszXczDesc=\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u04
tab2_Lbl_Language=\u042F\u0437\u044B\u043A tab2_Lbl_Language=\u042F\u0437\u044B\u043A
windowBodyRestartToApplyLang=\u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u0435 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0447\u0442\u043E\u0431\u044B \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u0432\u0441\u0442\u0443\u043F\u0438\u043B\u0438 \u0432 \u0441\u0438\u043B\u0443. windowBodyRestartToApplyLang=\u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u0435 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0447\u0442\u043E\u0431\u044B \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u0432\u0441\u0442\u0443\u043F\u0438\u043B\u0438 \u0432 \u0441\u0438\u043B\u0443.
tab2_Cb_GLshowNspOnly=\u041E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C \u0438\u0441\u043A\u043B\u044E\u0447\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u0444\u0430\u0439\u043B\u044B *.nsp \u0432 GoldLeaf. tab2_Cb_GLshowNspOnly=\u041E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C \u0438\u0441\u043A\u043B\u044E\u0447\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u0444\u0430\u0439\u043B\u044B *.nsp \u0432 GoldLeaf.
tab2_Cb_UseOldGlVersion=\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0441\u0442\u0430\u0440\u0443\u044E \u0432\u0435\u0440\u0441\u0438\u044E GoldLeaf
btn_OpenSplitFile=\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0440\u0430\u0437\u0431\u0438\u0442\u044B\u0439 NSP btn_OpenSplitFile=\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0440\u0430\u0437\u0431\u0438\u0442\u044B\u0439 NSP
tab2_Lbl_ApplicationSettings=\u041E\u0441\u043D\u043E\u0432\u043D\u044B\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 tab2_Lbl_ApplicationSettings=\u041E\u0441\u043D\u043E\u0432\u043D\u044B\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438
tabSplMrg_Lbl_SplitNMergeTitle=\u0423\u0442\u0438\u043B\u0438\u0442\u0430 \u0440\u0430\u0437\u0431\u0438\u0432\u043A\u0438 \u0438 \u0441\u043B\u0438\u044F\u043D\u0438\u044F \u0444\u0430\u0439\u043B\u043E\u0432 tabSplMrg_Lbl_SplitNMergeTitle=\u0423\u0442\u0438\u043B\u0438\u0442\u0430 \u0440\u0430\u0437\u0431\u0438\u0432\u043A\u0438 \u0438 \u0441\u043B\u0438\u044F\u043D\u0438\u044F \u0444\u0430\u0439\u043B\u043E\u0432
@ -68,4 +67,5 @@ windowTitleDownloadDrivers=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044
windowBodyDownloadDrivers=\u0421\u043A\u0430\u0447\u0438\u0432\u0430\u0435\u043C \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u044B (libusbK v3.0.7.0)... windowBodyDownloadDrivers=\u0421\u043A\u0430\u0447\u0438\u0432\u0430\u0435\u043C \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u044B (libusbK v3.0.7.0)...
btn_Cancel=\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C btn_Cancel=\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C
btn_Close=\u0417\u0430\u043A\u0440\u044B\u0442\u044C btn_Close=\u0417\u0430\u043A\u0440\u044B\u0442\u044C
tab2_Cb_GlVersion=\u0412\u0435\u0440\u0441\u0438\u044F GoldLeaf

View file

@ -43,7 +43,6 @@ tab2_Lbl_AllowXciNszXczDesc=\u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u04
tab2_Lbl_Language=\u041C\u043E\u0432\u0430 tab2_Lbl_Language=\u041C\u043E\u0432\u0430
windowBodyRestartToApplyLang=\u0411\u0443\u0434\u044C \u043B\u0430\u0441\u043A\u0430, \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0443\u0441\u0442\u0456\u0442\u044C \u0434\u043E\u0434\u0430\u0442\u043E\u043A \u0449\u043E\u0431 \u0437\u043C\u0456\u043D\u0438 \u0432\u0441\u0442\u0443\u043F\u0438\u043B\u0438 \u0432 \u0441\u0438\u043B\u0443. windowBodyRestartToApplyLang=\u0411\u0443\u0434\u044C \u043B\u0430\u0441\u043A\u0430, \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0443\u0441\u0442\u0456\u0442\u044C \u0434\u043E\u0434\u0430\u0442\u043E\u043A \u0449\u043E\u0431 \u0437\u043C\u0456\u043D\u0438 \u0432\u0441\u0442\u0443\u043F\u0438\u043B\u0438 \u0432 \u0441\u0438\u043B\u0443.
tab2_Cb_GLshowNspOnly=\u0412\u0456\u0434\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u0438 \u0432\u0438\u043A\u043B\u044E\u0447\u043D\u043E *.nsp \u0444\u0430\u0439\u043B\u0438 \u0443 GoldLeaf. tab2_Cb_GLshowNspOnly=\u0412\u0456\u0434\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u0438 \u0432\u0438\u043A\u043B\u044E\u0447\u043D\u043E *.nsp \u0444\u0430\u0439\u043B\u0438 \u0443 GoldLeaf.
tab2_Cb_UseOldGlVersion=\u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0432\u0430\u0442\u0438 \u0441\u0442\u0430\u0440\u0443 \u0432\u0435\u0440\u0441\u0456\u044E GoldLeaf
btn_OpenSplitFile=\u0412\u0438\u0431\u0440\u0430\u0442\u0438 \u0440\u043E\u0437\u0431\u0438\u0442\u0438\u0439 NSP btn_OpenSplitFile=\u0412\u0438\u0431\u0440\u0430\u0442\u0438 \u0440\u043E\u0437\u0431\u0438\u0442\u0438\u0439 NSP
tab2_Lbl_ApplicationSettings=\u041E\u0441\u043D\u043E\u0432\u043D\u0456 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F tab2_Lbl_ApplicationSettings=\u041E\u0441\u043D\u043E\u0432\u043D\u0456 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F
tabSplMrg_Lbl_SplitNMergeTitle=\u041F\u043E\u043C\u0456\u0447\u043D\u0438\u043A \u0440\u043E\u0437\u0431\u0432\u043A\u0438 \u0442\u0430 \u043E\u0431'\u0454\u0434\u043D\u0430\u043D\u043D\u044F \u0444\u0430\u0439\u043B\u0456\u0432 tabSplMrg_Lbl_SplitNMergeTitle=\u041F\u043E\u043C\u0456\u0447\u043D\u0438\u043A \u0440\u043E\u0437\u0431\u0432\u043A\u0438 \u0442\u0430 \u043E\u0431'\u0454\u0434\u043D\u0430\u043D\u043D\u044F \u0444\u0430\u0439\u043B\u0456\u0432
@ -68,3 +67,4 @@ windowTitleDownloadDrivers=\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u043
windowBodyDownloadDrivers=\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0443\u0454\u043C\u043E \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0438 (libusbK v3.0.7.0)... windowBodyDownloadDrivers=\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0443\u0454\u043C\u043E \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0438 (libusbK v3.0.7.0)...
btn_Cancel=\u0412\u0456\u0434\u043C\u0456\u043D\u0438\u0442\u0438 btn_Cancel=\u0412\u0456\u0434\u043C\u0456\u043D\u0438\u0442\u0438
btn_Close=\u0417\u0430\u043A\u0440\u0438\u0442\u0438 btn_Close=\u0417\u0430\u043A\u0440\u0438\u0442\u0438
tab2_Cb_GlVersion=\u0412\u0435\u0440\u0441\u0456\u044F GoldLeaf

View file

@ -22,7 +22,6 @@ tab2_Cb_DontServeRequests=Kh\u00F4ng ph\u1EE5c v\u1EE5 c\u00E1c y\u00EAu c\u1EA7
tab2_Cb_ExpertMode=Ch\u1EBF \u0111\u1ED9 Chuy\u00EAn gia tab2_Cb_ExpertMode=Ch\u1EBF \u0111\u1ED9 Chuy\u00EAn gia
tab2_Cb_GLshowNspOnly=Ch\u1EC9 hi\u1EC3n th\u1ECB *.nsp trong GoldLeaf. tab2_Cb_GLshowNspOnly=Ch\u1EC9 hi\u1EC3n th\u1ECB *.nsp trong GoldLeaf.
tab2_Cb_RandSelectPort=L\u1EA5y c\u1ED5ng ng\u1EABu nhi\u00EAn tab2_Cb_RandSelectPort=L\u1EA5y c\u1ED5ng ng\u1EABu nhi\u00EAn
tab2_Cb_UseOldGlVersion=D\u00F9ng phi\u00EAn b\u1EA3n GoldLeaf c\u0169
tab2_Cb_ValidateNSHostName=Lu\u00F4n x\u00E1c th\u1EF1c \u0111\u1EA7u v\u00E0o IP NS. tab2_Cb_ValidateNSHostName=Lu\u00F4n x\u00E1c th\u1EF1c \u0111\u1EA7u v\u00E0o IP NS.
tab2_Lbl_AllowXciNszXczDesc=\u0110\u01B0\u1EE3c s\u1EED d\u1EE5ng b\u1EDFi c\u00E1c \u1EE9ng d\u1EE5ng b\u00EAn th\u1EE9 ba h\u1ED7 tr\u1EE3 XCI/NSZ/XCZ v\u00E0 v\u1EADn d\u1EE5ng giao th\u1EE9c truy\u1EC1n t\u1EA3i TinFoil. \u0110\u1EEBng thay \u0111\u1ED5i n\u1EBFu b\u1EA1n kh\u00F4ng ch\u1EAFc. tab2_Lbl_AllowXciNszXczDesc=\u0110\u01B0\u1EE3c s\u1EED d\u1EE5ng b\u1EDFi c\u00E1c \u1EE9ng d\u1EE5ng b\u00EAn th\u1EE9 ba h\u1ED7 tr\u1EE3 XCI/NSZ/XCZ v\u00E0 v\u1EADn d\u1EE5ng giao th\u1EE9c truy\u1EC1n t\u1EA3i TinFoil. \u0110\u1EEBng thay \u0111\u1ED5i n\u1EBFu b\u1EA1n kh\u00F4ng ch\u1EAFc.
tab2_Lbl_ApplicationSettings=Thi\u1EBFt l\u1EADp ch\u00EDnh tab2_Lbl_ApplicationSettings=Thi\u1EBFt l\u1EADp ch\u00EDnh