Compare commits
2 commits
8348c9f2ab
...
66e7338fa5
Author | SHA1 | Date | |
---|---|---|---|
|
66e7338fa5 | ||
|
fa236cb1ad |
9 changed files with 244 additions and 9 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
offsets.txt
|
||||||
|
environment.txt
|
|
@ -29,7 +29,7 @@ public class AppPreferences {
|
||||||
|
|
||||||
private final Preferences preferences;
|
private final Preferences preferences;
|
||||||
private final Locale locale;
|
private final Locale locale;
|
||||||
public static final String[] goldleafSupportedVersions = {"v0.5", "v0.7.x", "v0.8-0.9", "v0.10"};
|
public static final String[] GOLDLEAF_SUPPORTED_VERSIONS = {"v0.5", "v0.7.x", "v0.8-0.9", "v0.10+"};
|
||||||
private static final Font DEFAULT_FONT = Font.getDefault();
|
private static final Font DEFAULT_FONT = Font.getDefault();
|
||||||
|
|
||||||
private AppPreferences(){
|
private AppPreferences(){
|
||||||
|
@ -42,13 +42,13 @@ public class AppPreferences {
|
||||||
}
|
}
|
||||||
|
|
||||||
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 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$)"))
|
||||||
theme = "/res/app_dark.css";
|
theme = "/res/app_dark.css";
|
||||||
return theme;
|
return theme;
|
||||||
}
|
}
|
||||||
public int getProtocol(){
|
public int getProtocol(){
|
||||||
int protocolIndex = preferences.getInt("protocol_index", 0); // Don't let user to change settings manually
|
int protocolIndex = preferences.getInt("protocol_index", 0); // Don't let user change settings manually
|
||||||
if (protocolIndex < 0 || protocolIndex > 1)
|
if (protocolIndex < 0 || protocolIndex > 1)
|
||||||
protocolIndex = 0;
|
protocolIndex = 0;
|
||||||
return protocolIndex;
|
return protocolIndex;
|
||||||
|
@ -56,7 +56,7 @@ public class AppPreferences {
|
||||||
public void setProtocol(int protocolIndex){ preferences.putInt("protocol_index", protocolIndex); }
|
public void setProtocol(int protocolIndex){ preferences.putInt("protocol_index", protocolIndex); }
|
||||||
|
|
||||||
public String getNetUsb(){
|
public String getNetUsb(){
|
||||||
String netUsb = preferences.get("NETUSB", "USB"); // Don't let user to change settings manually
|
String netUsb = preferences.get("NETUSB", "USB"); // Don't let user change settings manually
|
||||||
if (!netUsb.matches("(^USB$)|(^NET$)"))
|
if (!netUsb.matches("(^USB$)|(^NET$)"))
|
||||||
netUsb = "USB";
|
netUsb = "USB";
|
||||||
return netUsb;
|
return netUsb;
|
||||||
|
@ -120,7 +120,7 @@ public class AppPreferences {
|
||||||
public void setNspFileFilterGL(boolean prop){preferences.putBoolean("GL_NSP_FILTER", prop);}
|
public void setNspFileFilterGL(boolean prop){preferences.putBoolean("GL_NSP_FILTER", prop);}
|
||||||
|
|
||||||
public int getGlVersion(){
|
public int getGlVersion(){
|
||||||
return preferences.getInt("gl_ver", goldleafSupportedVersions.length - 1);
|
return preferences.getInt("gl_ver", GOLDLEAF_SUPPORTED_VERSIONS.length - 1);
|
||||||
}
|
}
|
||||||
public void setGlVersion(int version){ preferences.putInt("gl_ver", version);}
|
public void setGlVersion(int version){ preferences.putInt("gl_ver", version);}
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@ public class SettingsBlockGoldleafController implements Initializable {
|
||||||
final AppPreferences preferences = AppPreferences.getInstance();
|
final AppPreferences preferences = AppPreferences.getInstance();
|
||||||
|
|
||||||
nspFilesFilterForGLCB.setSelected(preferences.getNspFileFilterGL());
|
nspFilesFilterForGLCB.setSelected(preferences.getNspFileFilterGL());
|
||||||
glVersionChoiceBox.getItems().addAll(AppPreferences.goldleafSupportedVersions);
|
glVersionChoiceBox.getItems().addAll(AppPreferences.GOLDLEAF_SUPPORTED_VERSIONS);
|
||||||
|
|
||||||
glVersionChoiceBox.getSelectionModel().select(preferences.getGlVersion());
|
glVersionChoiceBox.getSelectionModel().select(preferences.getGlVersion());
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,7 +75,7 @@ public class GoldLeafCli {
|
||||||
private String getGlSupportedVersions(){
|
private String getGlSupportedVersions(){
|
||||||
StringBuilder builder = new StringBuilder("Supported versions: \n");
|
StringBuilder builder = new StringBuilder("Supported versions: \n");
|
||||||
|
|
||||||
for (String a : AppPreferences.goldleafSupportedVersions){
|
for (String a : AppPreferences.GOLDLEAF_SUPPORTED_VERSIONS){
|
||||||
builder.append("\t");
|
builder.append("\t");
|
||||||
builder.append(a);
|
builder.append(a);
|
||||||
builder.append("\n");
|
builder.append("\n");
|
||||||
|
@ -98,7 +98,7 @@ public class GoldLeafCli {
|
||||||
"Try 'ns-usbloader -g help' for more information.");
|
"Try 'ns-usbloader -g help' for more information.");
|
||||||
}
|
}
|
||||||
|
|
||||||
for (String version : AppPreferences.goldleafSupportedVersions){
|
for (String version : AppPreferences.GOLDLEAF_SUPPORTED_VERSIONS){
|
||||||
if (version.equals(goldLeafVersion))
|
if (version.equals(goldLeafVersion))
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,7 +66,7 @@ public class UsbCommunications extends CancellableRunnable {
|
||||||
case "TinFoil":
|
case "TinFoil":
|
||||||
module = new TinFoil(handler, nspMap, this, logPrinter);
|
module = new TinFoil(handler, nspMap, this, logPrinter);
|
||||||
break;
|
break;
|
||||||
case "GoldLeafv0.10":
|
case "GoldLeafv0.10+":
|
||||||
module = new GoldLeaf_010(handler, nspMap, this, logPrinter, nspFilterForGl);
|
module = new GoldLeaf_010(handler, nspMap, this, logPrinter, nspFilterForGl);
|
||||||
break;
|
break;
|
||||||
case "GoldLeafv0.8-0.9":
|
case "GoldLeafv0.8-0.9":
|
||||||
|
|
84
src/test/java/integration/Environment.java
Normal file
84
src/test/java/integration/Environment.java
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
/* Copyright WTFPL */
|
||||||
|
package integration;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.FileReader;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
public class Environment {
|
||||||
|
public final String CONTAINER = "environment.txt";
|
||||||
|
|
||||||
|
private String atmosphere;
|
||||||
|
private String prodkeys;
|
||||||
|
private String firmwares;
|
||||||
|
private String saveTo;
|
||||||
|
|
||||||
|
public Environment() throws Exception{
|
||||||
|
if (Files.notExists(Path.of(CONTAINER))) {
|
||||||
|
boolean createdTemplate = createTemplate();
|
||||||
|
throw new Exception("'environment.txt' not found\n" +
|
||||||
|
"Please "+(createdTemplate?"":"create and ") +
|
||||||
|
"set values in file");
|
||||||
|
}
|
||||||
|
|
||||||
|
read();
|
||||||
|
|
||||||
|
if (isNotValid())
|
||||||
|
throw new Exception("'environment.txt' doesn't contain valid data\n");
|
||||||
|
}
|
||||||
|
private void read() throws Exception{
|
||||||
|
HashMap<String, String> rawKeySet = new HashMap<>();
|
||||||
|
try (BufferedReader br = new BufferedReader(new FileReader(CONTAINER))) {
|
||||||
|
String fileLine;
|
||||||
|
String[] keyValue;
|
||||||
|
while ((fileLine = br.readLine()) != null) {
|
||||||
|
keyValue = fileLine.trim().split("\\s+?=\\s+?", 2);
|
||||||
|
if (keyValue.length == 2)
|
||||||
|
rawKeySet.put(keyValue[0], keyValue[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
atmosphere = rawKeySet.get("ATMOSPHERE");
|
||||||
|
prodkeys = rawKeySet.get("PRODKEYS");
|
||||||
|
firmwares = rawKeySet.get("NS_GLOBAL_FIRMWARES");
|
||||||
|
saveTo = rawKeySet.get("SAVE_TO");
|
||||||
|
}
|
||||||
|
private boolean isNotValid(){
|
||||||
|
return atmosphere == null || atmosphere.isBlank() ||
|
||||||
|
prodkeys == null || prodkeys.isBlank() ||
|
||||||
|
firmwares == null || firmwares.isBlank();
|
||||||
|
}
|
||||||
|
private boolean createTemplate(){
|
||||||
|
try(FileWriter writer = new FileWriter(CONTAINER)){
|
||||||
|
writer.write(
|
||||||
|
"ATMOSPHERE = \n" +
|
||||||
|
"PRODKEYS = \n" +
|
||||||
|
"NS_GLOBAL_FIRMWARES = \n" +
|
||||||
|
"SAVE_TO = /tmp");
|
||||||
|
}
|
||||||
|
catch (Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAtmosphereLocation() {
|
||||||
|
return atmosphere;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getProdkeysLocation() {
|
||||||
|
return prodkeys;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFirmwaresLocation() {
|
||||||
|
return firmwares;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSaveToLocation() {
|
||||||
|
return saveTo;
|
||||||
|
}
|
||||||
|
}
|
54
src/test/java/integration/EsIntegrationTest.java
Normal file
54
src/test/java/integration/EsIntegrationTest.java
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
/* Copyright WTFPL */
|
||||||
|
package integration;
|
||||||
|
|
||||||
|
import nsusbloader.NSLMain;
|
||||||
|
import nsusbloader.Utilities.patches.es.EsPatchMaker;
|
||||||
|
import org.junit.jupiter.api.*;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
public class EsIntegrationTest {
|
||||||
|
static String pathToFirmware;
|
||||||
|
static String pathToFirmwares;
|
||||||
|
static String pathToKeysFile;
|
||||||
|
static String saveTo;
|
||||||
|
|
||||||
|
@BeforeAll
|
||||||
|
static void init() throws Exception{
|
||||||
|
NSLMain.isCli = true;
|
||||||
|
Environment environment = new Environment();
|
||||||
|
pathToKeysFile = environment.getProdkeysLocation();
|
||||||
|
saveTo = environment.getSaveToLocation() + File.separator + "ES_LPR";
|
||||||
|
pathToFirmwares = environment.getFirmwaresLocation();
|
||||||
|
pathToFirmware = pathToFirmware + File.separator + "Firmware 14.1.0";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Disabled
|
||||||
|
@DisplayName("ES Integration validation - everything")
|
||||||
|
@Test
|
||||||
|
void makeEss() throws Exception{
|
||||||
|
File[] fwDirs = new File(pathToFirmwares).listFiles((file, s) -> {
|
||||||
|
return s.matches("^Firmware (9\\.|[0-9][0-9]\\.).*");
|
||||||
|
//return s.matches("^Firmware 10.0.1.*");
|
||||||
|
});
|
||||||
|
assert fwDirs != null;
|
||||||
|
Arrays.sort(fwDirs);
|
||||||
|
for (File dir : fwDirs){
|
||||||
|
EsPatchMaker esPatchMaker = new EsPatchMaker(dir.getAbsolutePath(), pathToKeysFile, saveTo);
|
||||||
|
Thread workThread = new Thread(esPatchMaker);
|
||||||
|
workThread.start();
|
||||||
|
workThread.join();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Disabled
|
||||||
|
@DisplayName("ES Integration validation - one particular firmware")
|
||||||
|
@Test
|
||||||
|
void makeEs() throws Exception{
|
||||||
|
EsPatchMaker esPatchMaker = new EsPatchMaker(pathToFirmware, pathToKeysFile, saveTo);
|
||||||
|
Thread workThread = new Thread(esPatchMaker);
|
||||||
|
workThread.start();
|
||||||
|
workThread.join();
|
||||||
|
}
|
||||||
|
}
|
60
src/test/java/integration/FsIntegrationTest.java
Normal file
60
src/test/java/integration/FsIntegrationTest.java
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
/* Copyright WTFPL */
|
||||||
|
package integration;
|
||||||
|
|
||||||
|
import nsusbloader.NSLMain;
|
||||||
|
import nsusbloader.Utilities.patches.fs.FsPatchMaker;
|
||||||
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
|
import org.junit.jupiter.api.Disabled;
|
||||||
|
import org.junit.jupiter.api.DisplayName;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
public class FsIntegrationTest {
|
||||||
|
static String pathToFirmware;
|
||||||
|
static String pathToFirmwares;
|
||||||
|
static String pathToKeysFile;
|
||||||
|
static String saveTo;
|
||||||
|
|
||||||
|
@BeforeAll
|
||||||
|
static void init() throws Exception{
|
||||||
|
NSLMain.isCli = true;
|
||||||
|
Environment environment = new Environment();
|
||||||
|
pathToKeysFile = environment.getProdkeysLocation();
|
||||||
|
saveTo = environment.getSaveToLocation() + File.separator + "FS_LPR";
|
||||||
|
pathToFirmwares = environment.getFirmwaresLocation();
|
||||||
|
pathToFirmware = pathToFirmware + File.separator + "Firmware 13.0.0";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Disabled
|
||||||
|
@DisplayName("FS Integration validation - everything")
|
||||||
|
@Test
|
||||||
|
void makeFss() throws Exception{
|
||||||
|
File[] fwDirs = new File(pathToFirmwares).listFiles((file, s) -> {
|
||||||
|
return (s.matches("^Firmware (9\\.|[0-9][0-9]\\.).*") && ! s.endsWith(".zip"));
|
||||||
|
//return s.matches("^Firmware 10.0.1.*");
|
||||||
|
});
|
||||||
|
assert fwDirs != null;
|
||||||
|
Arrays.sort(fwDirs);
|
||||||
|
|
||||||
|
for (File dir : fwDirs){
|
||||||
|
System.out.println("\n\t\t\t"+dir.getName());
|
||||||
|
FsPatchMaker fsPatchMaker = new FsPatchMaker(dir.getAbsolutePath(), pathToKeysFile, saveTo);
|
||||||
|
Thread workThread = new Thread(fsPatchMaker);
|
||||||
|
workThread.start();
|
||||||
|
workThread.join();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Disabled
|
||||||
|
@DisplayName("FS Integration validation - one particular firmware")
|
||||||
|
@Test
|
||||||
|
void makeFs() throws Exception{
|
||||||
|
System.out.println(pathToFirmware);
|
||||||
|
FsPatchMaker fsPatchMaker = new FsPatchMaker(pathToFirmware, pathToKeysFile, saveTo);
|
||||||
|
Thread workThread = new Thread(fsPatchMaker);
|
||||||
|
workThread.start();
|
||||||
|
workThread.join();
|
||||||
|
}
|
||||||
|
}
|
35
src/test/java/integration/LoaderIntegrationTest.java
Normal file
35
src/test/java/integration/LoaderIntegrationTest.java
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
/* Copyright WTFPL */
|
||||||
|
package integration;
|
||||||
|
|
||||||
|
import nsusbloader.NSLMain;
|
||||||
|
import nsusbloader.Utilities.patches.loader.LoaderPatchMaker;
|
||||||
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
|
import org.junit.jupiter.api.Disabled;
|
||||||
|
import org.junit.jupiter.api.DisplayName;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
public class LoaderIntegrationTest {
|
||||||
|
static String pathToAtmo;
|
||||||
|
static String saveTo;
|
||||||
|
|
||||||
|
@BeforeAll
|
||||||
|
static void init() throws Exception{
|
||||||
|
NSLMain.isCli = true;
|
||||||
|
Environment environment = new Environment();
|
||||||
|
saveTo = environment.getSaveToLocation() + File.separator + "Loader_LPR";
|
||||||
|
pathToAtmo = environment.getAtmosphereLocation();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Disabled
|
||||||
|
@DisplayName("Loader Integration validation")
|
||||||
|
@Test
|
||||||
|
void makeLoader() throws Exception{
|
||||||
|
System.out.println(pathToAtmo);
|
||||||
|
LoaderPatchMaker patchMaker = new LoaderPatchMaker(pathToAtmo, saveTo);
|
||||||
|
Thread workThread = new Thread(patchMaker);
|
||||||
|
workThread.start();
|
||||||
|
workThread.join();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue