Compare commits

...

38 Commits
v7.0 ... master

Author SHA1 Message Date
Dmitry Isaenko 5ee9f6aacd
Merge pull request #160 from secretjupiter/patch-1
continuous-integration/drone Build is passing Details
Added mandatory info to README.md for Apple Silicon users
2024-02-07 13:07:53 +03:00
Dmitry Isaenko 7f9b3a7598
Merge pull request #161 from Erimsaholut/master
Turkish Lang file
2024-02-07 13:07:24 +03:00
01ut cd9e3ddf30
Turkish Lang file
I just upload the .properties file
2024-02-03 16:05:11 +03:00
Kevin | Secret Jupiter d1ac1f5403
Added mandatory info to README.md for Apple Silicon users
Added mandatory info for Apple Silicon users
2024-01-28 22:00:45 +01:00
Dmitry Isaenko e9b0fa309e Merge remote-tracking branch 'origin/master'
continuous-integration/drone Build is passing Details
2023-12-26 14:39:31 +03:00
Dmitry Isaenko c0bf247666 Bundle drivers to windows installer #156 2023-12-26 14:39:05 +03:00
Dmitry Isaenko 66758ffdb9
Merge pull request #154 from justindhillon/broken-links
Fix Broken Links
2023-11-15 18:01:36 +03:00
Justin Dhillon b32986682e revert maven.apache.org link 2023-11-11 12:49:17 -08:00
Justin Dhillon 2935d4ef55 revert broken link 2023-11-11 12:48:21 -08:00
Justin Dhillon 353b058388 revert Swarsele 2023-11-08 09:13:44 -08:00
Justin Dhillon 5b3ea13b08 revert Stephane Meden (JackFromNice) 2023-11-08 09:12:22 -08:00
Justin Dhillon 1251d39a6b revert Adubbz/Tinfoil 2023-11-08 09:11:36 -08:00
Justin Dhillon 57e7f72531
Merge branch 'developersu:master' into broken-links 2023-11-08 09:08:38 -08:00
Dmitry Isaenko 88ca0815ed Properly disable integration tests
continuous-integration/drone/push Build is passing Details
2023-11-08 15:08:24 +03:00
Dmitry Isaenko 66e7338fa5 Save few integration tests
continuous-integration/drone/push Build is failing Details
2023-11-08 14:35:15 +03:00
Dmitry Isaenko fa236cb1ad Correct Goldleaf supported versions list 2023-11-08 14:34:00 +03:00
Justin Dhillon 5b120204ef fixed broken link 2023-11-07 10:10:24 -08:00
Justin Dhillon 94ad332bf7 fixed broken link to maven.apache.org/POM/4.0.0 2023-11-07 10:05:17 -08:00
Justin Dhillon b89bfa806d fixed broken link to github user developersu 2023-11-07 09:59:17 -08:00
Justin Dhillon abf7621f28 github account does not exist anymore, so I replaced the link with instagram 2023-11-07 09:57:50 -08:00
Justin Dhillon c5688f79df replaced missing github repo link with link to creator 2023-11-07 09:56:31 -08:00
Justin Dhillon 25910ac94c fixed broken website link 2023-11-07 09:55:05 -08:00
Justin Dhillon 474f90a427 replaced 404 github link to twitter profile 2023-11-07 09:52:55 -08:00
Dmitry Isaenko 8348c9f2ab Correct 'Font settings' window size.
continuous-integration/drone/push Build is passing Details
2023-10-30 00:09:27 +03:00
Dmitry Isaenko 47045b2aeb correct version
continuous-integration/drone/push Build is passing Details
2023-10-29 06:29:33 +03:00
Dmitry Isaenko 67351642ae Merge remote-tracking branch 'origin/master'
continuous-integration/drone Build is failing Details
2023-10-29 06:16:10 +03:00
Dmitry Isaenko 3909371774 Add fonts selector for #153 2023-10-29 06:15:43 +03:00
Dmitry Isaenko 1e4593afb6
Merge pull request #145 from DDinghoya/patch-7
continuous-integration/drone/push Build is passing Details
Update locale_ko_KR.properties
2023-06-02 15:54:55 +03:00
DDinghoya d3faa384ae
Update locale_ko_KR.properties 2023-05-30 23:32:29 +09:00
Dmitry Isaenko 9d4cac26e5
Merge pull request #144 from requinDr/patch-1
continuous-integration/drone/push Build is passing Details
Update locale_fr_FR.properties
2023-05-17 16:32:32 +03:00
requinDr ad211cd562
\N -> \n 2023-05-17 00:16:11 +02:00
requinDr 4bdc5ffb63
Update locale_fr_FR.properties
Add missings translations and missing accents to French (note that a few translations are still missing)
2023-05-17 00:14:00 +02:00
Dmitry Isaenko 7db7af0cf8
Merge pull request #140 from exiori/patch-1
continuous-integration/drone/push Build is passing Details
Update locale_zh_CN.properties
2023-04-15 14:24:13 +03:00
exiori 6052d385d9
Update locale_zh_CN.properties 2023-04-15 17:00:46 +08:00
exiori f6b875af0b
Update locale_zh_CN.properties
Update Dialog Tips
2023-04-05 10:58:17 +08:00
Dmitry Isaenko 01a25f071a Make CI output a bit more verbose
continuous-integration/drone/push Build is passing Details
2023-03-17 04:27:09 +03:00
Dmitry Isaenko c1651e874b Correct AppPreferences class. Fix #139
continuous-integration/drone/push Build is passing Details
2023-03-17 04:00:48 +03:00
Dmitry Isaenko 94845c1411 readme update
continuous-integration/drone/push Build is passing Details
2023-03-09 04:12:28 +03:00
43 changed files with 866 additions and 147 deletions

View File

@ -16,6 +16,7 @@ steps:
image: alpine:latest
commands:
- mkdir -p /builds/ns-usbloader
- echo target/ns-usbloader-*jar
- cp target/ns-usbloader-*jar /builds/ns-usbloader/
volumes:
- name: builds
@ -28,20 +29,25 @@ steps:
- misc/windows/update_version.sh
- cd misc/windows/NSIS
- makensis -V4 ./installer.nsi
- echo Installer-*.exe
- cp Installer-*.exe /builds/ns-usbloader/
- rm ./NS-USBloader.exe
- rm ./Installer-*.exe
- cd ../../../
volumes:
- name: builds
path: /builds
- name: jdk
path: /drone/src/misc/windows/NSIS/jdk
- name: drivers
path: /drone/src/misc/windows/NSIS/Drivers_set.exe
- name: emerge-legacy-artifact
image: maven:3-openjdk-17
commands:
- . ./.make_legacy
- mvn -B -DskipTests clean package
- echo target/ns-usbloader-*jar
- cp target/ns-usbloader-*jar /builds/ns-usbloader/
volumes:
- name: m2
@ -56,6 +62,7 @@ steps:
- misc/windows/update_version.sh legacy
- cd misc/windows/NSIS
- makensis -V4 ./installer.nsi
- echo Installer-*.exe
- cp Installer-*.exe /builds/ns-usbloader/
- cd ../../../
volumes:
@ -63,12 +70,15 @@ steps:
path: /builds
- name: jdk
path: /drone/src/misc/windows/NSIS/jdk
- name: drivers
path: /drone/src/misc/windows/NSIS/Drivers_set.exe
- name: emerge-mac-m1-artifact
image: maven:3-openjdk-17
commands:
- . ./.make_m1
- mvn -B -DskipTests clean package
- echo target/ns-usbloader-*jar
- cp target/ns-usbloader-*jar /builds/ns-usbloader/
volumes:
- name: m2
@ -85,4 +95,7 @@ volumes:
path: /home/www/builds
- name: jdk
host:
path: /home/docker/drone/files/assembly/openjdk-19.0.2
path: /home/docker/drone/files/assembly/openjdk-19.0.2
- name: drivers
host:
path: /home/docker/drone/files/assembly/Drivers_set.exe

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
offsets.txt
environment.txt

View File

@ -49,8 +49,8 @@ Sometimes I add new posts about this project [on my blog page](https://developer
* Korean by [DDinghoya](https://github.com/DDinghoya)
* Portuguese by [almircanella](https://github.com/almircanella)
* Spanish by [/u/cokimaya007](https://www.reddit.com/u/cokimaya007), [Kuziel Alejandro](https://github.com/Uzi-Oni)
* Chinese (Simplified) by [Huang YunKun (htynkn)](https://github.com/htynkn), [FFT9 (XXgame Group)](https://www.xxgame.net)
* Chinese (Traditional) by [qazrfv1234](https://github.com/qazrfv1234), [FFT9 (XXgame Group)](https://www.xxgame.net)
* Chinese (Simplified) by [Huang YunKun (htynkn)](https://github.com/htynkn), [FFT9 (XXgame Group)](http://xxgame.net/)
* Chinese (Traditional) by [qazrfv1234](https://github.com/qazrfv1234), [FFT9 (XXgame Group)](http://xxgame.net/)
* German by [Swarsele](https://github.com/Swarsele)
* Vietnamese by [Hai Phan Nguyen (pnghai)](https://github.com/pnghai)
* Czech by [Spenaat](https://github.com/spenaat)
@ -65,7 +65,8 @@ Sometimes I add new posts about this project [on my blog page](https://developer
### System requirements
JDK 11 for macOS and Linux
- JDK 11 for macOS and Linux
- libusb, if you have a Mac with Apple Silicon (install via `brew install libusb`)
### Supported Goldleaf versions
| Goldleaf version | NS-USBloader version |
@ -127,6 +128,8 @@ Set 'Security & Privacy' settings if needed.
Download application with `-m1.jar` postfix.
Manually install libusb with Homebrew by running `brew install libusb` in your Terminal.
##### Windows:
* Once application opens click on 'Gear' icon.
@ -255,17 +258,14 @@ This is non-commercial project.
Nevertheless, I'll be more than happy if you find a chance to make a donation for charity to people I trust:
* BTC → bc1q67j4yjmt67mes0hv03fyydjejmw6ahw0v932su
* ETH → 0x82Ab0ddE183C12cAa6eD61DF3671675C4bdC42fc
* DOGE → D8o42b952yjEWZ5Ajq4ZtjGvx1kR7DyDHm
* DOT → 1511KQqm6Mme5Za4rtgsSdzCyuEzQ6CC1a6XLxQJXXW3GWpo
* LTC → LRFXTN4rTEiQ3RxzssMFC5S1WMRd1raN2Q
* LUNA → terra1n0sfmljpuu87h7lrn9nzxadfa3qxthlmvtq5lf
* TRX → TU3AyFkF12Jg1yApcXGz91R8xKvXV1EzkW
* ETC → 0x78A946fC9708c024298c9a4f8961A49B7a830d53
* USDT (TRC20) → TU3AyFkF12Jg1yApcXGz91R8xKvXV1EzkW
* USDT (ERC20) → 0x82Ab0ddE183C12cAa6eD61DF3671675C4bdC42fc
* XRP → r91kfRiRsvnDp7evHNmXkrL3yAL7eakWk1
* BTC → 1BnErE3n6LEdEjvvFrt4FMdXd1UGa5L7Ge
* ETH → 0x9c29418129553bE171181bb6245151aa0576A3b7
* DOT → 15BWSwmA4xEHZdq3gGftWg7dctMQk9vXwqA92Pg22gsxDweF
* LTC → ltc1qfjvzxm04tax077ra9rvmxdnsum8alws2n20fag
* ETC → 0xe9064De288C8454942533a005AB72515e689226E
* USDT (TRC20) → TKgp5SvJGiqYNFtvJfEDGLFbezFEHq1tBy
* USDT (ERC20) → 0x9c29418129553bE171181bb6245151aa0576A3b7
* XRP → rGmGaLsKmSUbxWfyi4mujtVamTzj3Nqxbw.
Thanks!

View File

@ -92,6 +92,7 @@ Section "NS-USBloader" Install
SetOutPath "$INSTDIR"
file /r jdk
file Drivers_set.exe
file NS-USBloader.exe
file logo.ico
@ -143,6 +144,7 @@ Section "Uninstall"
;Delete installed files
RMDir /r "$INSTDIR\jdk\*"
Delete "$INSTDIR\Drivers_set.exe"
Delete "$INSTDIR\NS-USBloader.exe"
Delete "$INSTDIR\logo.ico"
Delete "$SMPROGRAMS\Uninstall.exe"

View File

@ -8,7 +8,7 @@
<name>NS-USBloader</name>
<artifactId>ns-usbloader</artifactId>
<version>7.0</version> <!-- linked via script to NSIS system. Should have format of 2 blocks of numbers. May have end on '-SNAPSHOT' -->
<version>7.1</version> <!-- linked via script to NSIS system. Should have format of 2 blocks of numbers -->
<url>https://redrise.ru</url>
<description>NS multi-tool</description>
@ -55,7 +55,7 @@
<issueManagement>
<system>GitHub</system>
<url>https://github.com/developer_su/${project.artifactId}/issues</url>
<url>https://github.com/developersu/${project.artifactId}/issues</url>
</issueManagement>
<dependencies>
<!-- https://mvnrepository.com/artifact/commons-cli/commons-cli -->

View File

@ -18,6 +18,8 @@
*/
package nsusbloader;
import javafx.scene.text.Font;
import java.util.Locale;
import java.util.prefs.Preferences;
@ -27,22 +29,26 @@ public class AppPreferences {
private final Preferences preferences;
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 AppPreferences(){
this.preferences = Preferences.userRoot().node("NS-USBloader");
String localeCode = preferences.get("locale", Locale.getDefault().toString());
this.locale = new Locale(localeCode.substring(0, 2), localeCode.substring(3));
if (localeCode.length() < 5)
this.locale = new Locale("en", "EN");
else
this.locale = new Locale(localeCode.substring(0, 2), localeCode.substring(3));
}
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$)"))
theme = "/res/app_dark.css";
return theme;
}
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)
protocolIndex = 0;
return protocolIndex;
@ -50,7 +56,7 @@ public class AppPreferences {
public void setProtocol(int protocolIndex){ preferences.putInt("protocol_index", protocolIndex); }
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$)"))
netUsb = "USB";
return netUsb;
@ -114,7 +120,7 @@ public class AppPreferences {
public void setNspFileFilterGL(boolean prop){preferences.putBoolean("GL_NSP_FILTER", prop);}
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);}
@ -147,6 +153,19 @@ public class AppPreferences {
public boolean getPatchesTabInvisible(){return preferences.getBoolean("patches_tab_visible", true); }
public void setPatchesTabInvisible(boolean value){preferences.putBoolean("patches_tab_visible", value);}
public String getPatchOffset(String type, int moduleNumber, int offsetId){ return preferences.get(String.format("%s_%02x_%02x", type, moduleNumber, offsetId), ""); }
public void setPatchOffset(String fullTypeSpecifier, String offset){ preferences.put(fullTypeSpecifier, offset); }
public String getPatchPattern(String type, int moduleNumber, int offsetId){ return preferences.get(String.format("%s_%02x_%02x", type, moduleNumber, offsetId), ""); }
public void setPatchPattern(String fullTypeSpecifier, String offset){ preferences.put(fullTypeSpecifier, offset); }
public String getFontFamily(){ return preferences.get("font_family", DEFAULT_FONT.getFamily()); }
public double getFontSize(){ return preferences.getDouble("font_size", DEFAULT_FONT.getSize()); }
public String getFontStyle(){
final String fontFamily = preferences.get("font_family", DEFAULT_FONT.getFamily());
final double fontSize = preferences.getDouble("font_size", DEFAULT_FONT.getSize());
return String.format("-fx-font-family: \"%s\"; -fx-font-size: %.0f;", fontFamily, fontSize);
}
public void setFontStyle(String fontFamily, double size){
preferences.put("font_family", fontFamily);
preferences.putDouble("font_size", size);
}
}

View File

@ -87,6 +87,7 @@ public class FilesDropHandle {
Scene mainScene = new Scene(parentVBox, 310, 185);
mainScene.getStylesheets().add(AppPreferences.getInstance().getTheme());
parentVBox.setStyle(AppPreferences.getInstance().getFontStyle());
stage.setOnHidden(windowEvent -> filesDropHandleTask.cancel(true ) );

View File

@ -0,0 +1,56 @@
/*
Copyright 2019-2023 Dmitry Isaenko
This file is part of NS-USBloader.
NS-USBloader is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
NS-USBloader is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with NS-USBloader. If not, see <https://www.gnu.org/licenses/>.
*/
package nsusbloader.Controllers;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.stage.Stage;
import nsusbloader.AppPreferences;
import java.util.ResourceBundle;
public class FontSettings {
public FontSettings(ResourceBundle resourceBundle) throws Exception{
Stage stage = new Stage();
stage.setMinWidth(650);
stage.setMinHeight(450);
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/FontSettings.fxml"));
fxmlLoader.setResources(resourceBundle);
stage.setTitle(resourceBundle.getString("tab2_Btn_ApplicationFont"));
stage.getIcons().addAll(
new Image("/res/app_icon32x32.png"),
new Image("/res/app_icon48x48.png"),
new Image("/res/app_icon64x64.png"),
new Image("/res/app_icon128x128.png"));
Parent parent = fxmlLoader.load();
Scene fontScene = new Scene(parent, 660, 525);
fontScene.getStylesheets().add(AppPreferences.getInstance().getTheme());
parent.setStyle(AppPreferences.getInstance().getFontStyle());
stage.setAlwaysOnTop(true);
stage.setScene(fontScene);
stage.show();
}
}

View File

@ -0,0 +1,153 @@
/*
Copyright 2019-2023 Dmitry Isaenko
This file is part of NS-USBloader.
NS-USBloader is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
NS-USBloader is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with NS-USBloader. If not, see <https://www.gnu.org/licenses/>.
*/
package nsusbloader.Controllers;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.*;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import nsusbloader.AppPreferences;
import nsusbloader.MediatorControl;
import java.net.URL;
import java.util.ResourceBundle;
public class FontSettingsController implements Initializable {
private final AppPreferences preferences = AppPreferences.getInstance();
@FXML
private Button applyBtn, cancelBtn, resetBtn;
@FXML
private ListView<String> fontsLv;
@FXML
private Spinner<Double> fontSizeSpinner;
@FXML
private Text exampleText;
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
applyBtn.setDefaultButton(true);
applyBtn.getStyleClass().add("buttonUp");
applyBtn.setOnAction(e -> applyChanges());
cancelBtn.setCancelButton(true);
cancelBtn.setOnAction(e -> closeWindow());
resetBtn.setOnAction(e -> reset());
fontsLv.setCellFactory(item -> getCellFactory());
fontsLv.setItems(getFonts());
fontsLv.getSelectionModel().select(preferences.getFontFamily());
fontsLv.getSelectionModel().selectedIndexProperty().addListener(
(observableValue, oldValueNumber, newValueNumber) -> setExampleTextFont());
fontsLv.setFixedCellSize(40.0);
fontSizeSpinner.setEditable(false);
fontSizeSpinner.setValueFactory(getValueFactory());
exampleText.setText(resourceBundle.getString("fontPreviewText"));
fontSizeSpinner.getValueFactory().setValue(preferences.getFontSize());
}
private ListCell<String> getCellFactory(){
return new ListCell<>(){
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (empty || item == null)
return;
Font font = Font.font(item);
Text itemText = new Text(item);
itemText.setFont(font);
setGraphic(itemText);
}
};
}
private ObservableList<String> getFonts(){
ObservableList<String> fonts = FXCollections.observableArrayList();
fonts.addAll(Font.getFamilies());
return fonts;
}
private SpinnerValueFactory<Double> getValueFactory(){
return new SpinnerValueFactory<>() {
@Override
public void decrement(int i) {
double value = getValue() - i;
if (value < 4)
return;
setValue(value);
setExampleTextFont(value);
}
@Override
public void increment(int i) {
double value = getValue() + i;
if (value > 100)
return;
setValue(value);
setExampleTextFont(value);
}
};
}
private void setExampleTextFont(){
setExampleTextFont(fontsLv.getSelectionModel().getSelectedItem(), fontSizeSpinner.getValue());
}
private void setExampleTextFont(double size){
setExampleTextFont(fontsLv.getSelectionModel().getSelectedItem(), size);
}
private void setExampleTextFont(String font, double size){
exampleText.setFont(Font.font(font, size));
}
private void reset(){
final Font defaultFont = Font.getDefault();
exampleText.setFont(defaultFont);
fontsLv.getSelectionModel().select(defaultFont.getFamily());
fontSizeSpinner.getValueFactory().setValue(defaultFont.getSize());
}
private void applyChanges(){
final String fontFamily = fontsLv.getSelectionModel().getSelectedItem();
final double fontSize = fontSizeSpinner.getValue().intValue();
preferences.setFontStyle(fontFamily, fontSize);
MediatorControl.getInstance().updateApplicationFont(fontFamily, fontSize);
closeWindow();
}
private void closeWindow(){
((Stage) cancelBtn.getScene().getWindow()).close();
}
}

View File

@ -169,7 +169,7 @@ public class PatchesController implements Initializable {
continue;
if (! lineValues[1].matches("^(([0-9A-Fa-f]{2})|\\.)+?$"))
continue;
preferences.setPatchOffset(lineValues[0], lineValues[1]);
preferences.setPatchPattern(lineValues[0], lineValues[1]);
System.out.println(pointer[0]+"_"+pointer[1]+"_"+pointer[2]+" = "+lineValues[1]);
count++;

View File

@ -43,6 +43,9 @@ import java.util.ResourceBundle;
public class SettingsBlockGenericController implements Initializable {
@FXML
private ChoiceBox<LocaleHolder> languagesChB;
@FXML
private Button fontSelectBtn;
@FXML
private Button submitLanguageBtn,
driversInstallBtn,
@ -81,6 +84,14 @@ public class SettingsBlockGenericController implements Initializable {
newVersionHyperlink.setOnAction(e-> hostServices.showDocument(newVersionHyperlink.getText()));
checkForUpdBtn.setOnAction(e->checkForUpdatesAction());
submitLanguageBtn.setOnAction(e->languageButtonAction());
fontSelectBtn.setOnAction(e -> openFontSettings());
}
private void openFontSettings() {
try {
new FontSettings(resourceBundle);
} catch (Exception ex) {
throw new RuntimeException(ex);
}
}
private void setDriversInstallFeature(){

View File

@ -38,7 +38,7 @@ public class SettingsBlockGoldleafController implements Initializable {
final AppPreferences preferences = AppPreferences.getInstance();
nspFilesFilterForGLCB.setSelected(preferences.getNspFileFilterGL());
glVersionChoiceBox.getItems().addAll(AppPreferences.goldleafSupportedVersions);
glVersionChoiceBox.getItems().addAll(AppPreferences.GOLDLEAF_SUPPORTED_VERSIONS);
glVersionChoiceBox.getSelectionModel().select(preferences.getGlVersion());
}

View File

@ -60,4 +60,8 @@ public class MediatorControl {
getPatchesController().notifyThreadStarted(isActive, appModuleType);
}
public synchronized boolean getTransferActive() { return this.isTransferActive.get(); }
public void updateApplicationFont(String fontFamily, double fontSize){
mainController.logArea.getScene().getRoot().setStyle(
String.format("-fx-font-family: \"%s\"; -fx-font-size: %.0f;", fontFamily, fontSize));
}
}

View File

@ -62,6 +62,7 @@ public class NSLMain extends Application {
);
mainScene.getStylesheets().add(AppPreferences.getInstance().getTheme());
root.setStyle(AppPreferences.getInstance().getFontStyle());
primaryStage.setScene(mainScene);
primaryStage.show();

View File

@ -44,7 +44,6 @@ public class ServiceWindow {
alertBox.getDialogPane().setMinWidth(Region.USE_PREF_SIZE);
alertBox.getDialogPane().setMinHeight(Region.USE_PREF_SIZE);
alertBox.setResizable(true); // Java bug workaround for JDR11/OpenJFX. TODO: nothing. really.
alertBox.getDialogPane().getStylesheets().add(AppPreferences.getInstance().getTheme());
Stage dialogStage = (Stage) alertBox.getDialogPane().getScene().getWindow();
dialogStage.setAlwaysOnTop(true);
@ -54,6 +53,9 @@ public class ServiceWindow {
new Image("/res/warn_ico64x64.png"),
new Image("/res/warn_ico128x128.png")
);
alertBox.getDialogPane().getStylesheets().add(AppPreferences.getInstance().getTheme());
dialogStage.getScene().getRoot().setStyle(AppPreferences.getInstance().getFontStyle());
alertBox.show();
dialogStage.toFront();
}
@ -68,7 +70,6 @@ public class ServiceWindow {
alertBox.getDialogPane().setMinWidth(Region.USE_PREF_SIZE);
alertBox.getDialogPane().setMinHeight(Region.USE_PREF_SIZE);
alertBox.setResizable(true); // Java bug workaround for JDR11/OpenJFX. TODO: nothing. really.
alertBox.getDialogPane().getStylesheets().add(AppPreferences.getInstance().getTheme());
Stage dialogStage = (Stage) alertBox.getDialogPane().getScene().getWindow();
dialogStage.setAlwaysOnTop(true);
@ -78,6 +79,10 @@ public class ServiceWindow {
new Image("/res/ask_ico64x64.png"),
new Image("/res/ask_ico128x128.png")
);
alertBox.getDialogPane().getStylesheets().add(AppPreferences.getInstance().getTheme());
dialogStage.getScene().getRoot().setStyle(AppPreferences.getInstance().getFontStyle());
dialogStage.toFront();
Optional<ButtonType> result = alertBox.showAndWait();

View File

@ -1,5 +1,5 @@
/*
Copyright 2019-2020 Dmitry Isaenko
Copyright 2019-2023 Dmitry Isaenko
This file is part of NS-USBloader.
@ -25,8 +25,8 @@ import java.net.URL;
public class DownloadDriversTask extends Task<String> {
public static final long DRIVERS_FILE_SIZE = 3857375;
private static final String driverFileLocationURL = "https://github.com/developersu/NS-Drivers/releases/download/v1.0/Drivers_set.exe";
private static final long driversFileSize = 3857375;
private static File driversInstallerFile;
@ -38,7 +38,7 @@ public class DownloadDriversTask extends Task<String> {
}
private boolean isDriversDownloaded(){
return driversInstallerFile != null && driversInstallerFile.length() == driversFileSize;
return driversInstallerFile != null && driversInstallerFile.length() == DRIVERS_FILE_SIZE;
}
private boolean downloadDrivers(){
@ -64,7 +64,7 @@ public class DownloadDriversTask extends Task<String> {
while ((bytesRead = bis.read(dataBuffer, 0, 1024)) != -1) {
fos.write(dataBuffer, 0, bytesRead);
totalRead += bytesRead;
updateProgress(totalRead, driversFileSize);
updateProgress(totalRead, DRIVERS_FILE_SIZE);
if (this.isCancelled()) {
bis.close();
fos.close();

View File

@ -1,5 +1,5 @@
/*
Copyright 2019-2020 Dmitry Isaenko
Copyright 2019-2023 Dmitry Isaenko
This file is part of NS-USBloader.
@ -32,16 +32,32 @@ import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import nsusbloader.AppPreferences;
import java.io.File;
import java.util.ResourceBundle;
public class DriversInstall {
private static volatile boolean isRunning;
private final ResourceBundle resourceBundle;
private Label runInstallerStatusLabel;
public DriversInstall(ResourceBundle rb){
this.resourceBundle = rb;
if (isDriversDistributesWithExecutable())
runInstaller("Drivers_set.exe");
else
runDownloadProcess();
}
private boolean isDriversDistributesWithExecutable(){
final File drivers = new File("Drivers_set.exe");
return drivers.length() == DownloadDriversTask.DRIVERS_FILE_SIZE;
}
private void runDownloadProcess(){
if (DriversInstall.isRunning)
return;
@ -49,11 +65,11 @@ public class DriversInstall {
DownloadDriversTask downloadTask = new DownloadDriversTask();
Button cancelButton = new Button(rb.getString("btn_Cancel"));
Button cancelButton = new Button(resourceBundle.getString("btn_Cancel"));
HBox hBoxInformation = new HBox();
hBoxInformation.setAlignment(Pos.TOP_LEFT);
hBoxInformation.getChildren().add(new Label(rb.getString("windowBodyDownloadDrivers")));
hBoxInformation.getChildren().add(new Label(resourceBundle.getString("windowBodyDownloadDrivers")));
ProgressBar progressBar = new ProgressBar();
progressBar.setPrefWidth(Double.MAX_VALUE);
@ -90,7 +106,7 @@ public class DriversInstall {
Stage stage = new Stage();
stage.setTitle(rb.getString("windowTitleDownloadDrivers"));
stage.setTitle(resourceBundle.getString("windowTitleDownloadDrivers"));
stage.getIcons().addAll(
new Image("/res/dwnload_ico32x32.png"), //TODO: REDRAW
new Image("/res/dwnload_ico48x48.png"),
@ -103,6 +119,7 @@ public class DriversInstall {
Scene mainScene = new Scene(parentVBox, 405, 155);
mainScene.getStylesheets().add(AppPreferences.getInstance().getTheme());
parentVBox.setStyle(AppPreferences.getInstance().getFontStyle());
stage.setOnHidden(windowEvent -> {
downloadTask.cancel(true );
@ -114,7 +131,7 @@ public class DriversInstall {
stage.toFront();
downloadTask.setOnSucceeded(event -> {
cancelButton.setText(rb.getString("btn_Close"));
cancelButton.setText(resourceBundle.getString("btn_Close"));
String returnedValue = downloadTask.getValue();
@ -140,7 +157,7 @@ public class DriversInstall {
return true;
}
catch (Exception e){
runInstallerStatusLabel.setText("Error: "+e.toString());
runInstallerStatusLabel.setText("Error: "+e);
e.printStackTrace();
return false;
}

View File

@ -27,7 +27,7 @@ import nsusbloader.Utilities.patches.SimplyFind;
import java.util.List;
class HeuristicEs1 extends AHeuristic {
private static final String PATTERN = AppPreferences.getInstance().getPatchOffset("ES", 1, 0);
private static final String PATTERN = AppPreferences.getInstance().getPatchPattern("ES", 1, 0);
private final List<Integer> findings;
private final byte[] where;

View File

@ -28,7 +28,7 @@ import java.util.ArrayList;
import java.util.List;
class HeuristicEs2 extends AHeuristic {
private static final String PATTERN = AppPreferences.getInstance().getPatchOffset("ES", 2, 0);
private static final String PATTERN = AppPreferences.getInstance().getPatchPattern("ES", 2, 0);
private List<Integer> findings;
private final byte[] where;

View File

@ -27,8 +27,8 @@ import nsusbloader.Utilities.patches.SimplyFind;
import java.util.List;
class HeuristicEs3 extends AHeuristic {
private static final String PATTERN0 = AppPreferences.getInstance().getPatchOffset("ES", 3, 0);
private static final String PATTERN1 = AppPreferences.getInstance().getPatchOffset("ES", 3, 1);
private static final String PATTERN0 = AppPreferences.getInstance().getPatchPattern("ES", 3, 0);
private static final String PATTERN1 = AppPreferences.getInstance().getPatchPattern("ES", 3, 1);
private final List<Integer> findings;
private final byte[] where;

View File

@ -28,7 +28,7 @@ import java.util.ArrayList;
import java.util.List;
class HeuristicFs1 extends AHeuristic {
private static final String PATTERN = AppPreferences.getInstance().getPatchOffset("FS", 1, 0); // TBZ
private static final String PATTERN = AppPreferences.getInstance().getPatchPattern("FS", 1, 0); // TBZ
private final byte[] where;
private final List<Integer> findings;

View File

@ -28,7 +28,7 @@ import java.util.ArrayList;
import java.util.List;
class HeuristicFs2 extends AHeuristic {
private static final String PATTERN = AppPreferences.getInstance().getPatchOffset("FS", 2, 0);
private static final String PATTERN = AppPreferences.getInstance().getPatchPattern("FS", 2, 0);
private final byte[] where;
private final List<Integer> findings;

View File

@ -75,7 +75,7 @@ public class GoldLeafCli {
private String getGlSupportedVersions(){
StringBuilder builder = new StringBuilder("Supported versions: \n");
for (String a : AppPreferences.goldleafSupportedVersions){
for (String a : AppPreferences.GOLDLEAF_SUPPORTED_VERSIONS){
builder.append("\t");
builder.append(a);
builder.append("\n");
@ -98,7 +98,7 @@ public class GoldLeafCli {
"Try 'ns-usbloader -g help' for more information.");
}
for (String version : AppPreferences.goldleafSupportedVersions){
for (String version : AppPreferences.GOLDLEAF_SUPPORTED_VERSIONS){
if (version.equals(goldLeafVersion))
return;
}

View File

@ -66,7 +66,7 @@ public class UsbCommunications extends CancellableRunnable {
case "TinFoil":
module = new TinFoil(handler, nspMap, this, logPrinter);
break;
case "GoldLeafv0.10":
case "GoldLeafv0.10+":
module = new GoldLeaf_010(handler, nspMap, this, logPrinter, nspFilterForGl);
break;
case "GoldLeafv0.8-0.9":

View File

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ListView?>
<?import javafx.scene.control.Spinner?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Text?>
<AnchorPane xmlns="http://javafx.com/javafx/18" xmlns:fx="http://javafx.com/fxml/1" fx:controller="nsusbloader.Controllers.FontSettingsController">
<children>
<VBox layoutX="344.0" layoutY="132.0" prefHeight="200.0" prefWidth="100.0" spacing="5.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<children>
<ListView fx:id="fontsLv" prefHeight="200.0" prefWidth="200.0" VBox.vgrow="ALWAYS" />
<Text fx:id="exampleText" strokeType="OUTSIDE" strokeWidth="0.0" />
<HBox alignment="CENTER_RIGHT" spacing="5.0">
<children>
<Label text="%fontSize" wrapText="true" />
<Spinner fx:id="fontSizeSpinner" minWidth="100.0" />
<Pane HBox.hgrow="ALWAYS" />
<Button fx:id="resetBtn" mnemonicParsing="false" text="%btn_ResetToDefaults">
<HBox.margin>
<Insets right="5.0" />
</HBox.margin>
</Button>
<Button fx:id="cancelBtn" mnemonicParsing="false" text="%btn_Cancel" wrapText="true" />
<Button fx:id="applyBtn" mnemonicParsing="false" styleClass="buttonUp" text="%btn_Select" wrapText="true" />
</children>
</HBox>
</children>
<padding>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
</padding>
</VBox>
</children>
</AnchorPane>

View File

@ -12,21 +12,12 @@
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.shape.SVGPath?>
<?import javafx.scene.text.Font?>
<VBox spacing="15.0" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="nsusbloader.Controllers.NxdtController">
<VBox spacing="15.0" xmlns="http://javafx.com/javafx/18" xmlns:fx="http://javafx.com/fxml/1" fx:controller="nsusbloader.Controllers.NxdtController">
<HBox alignment="CENTER">
<children>
<Label styleClass="nxdt" text="nx">
<font>
<Font name="System Bold" size="18.0" />
</font>
</Label>
<Label text="dumptool">
<font>
<Font name="System Bold" size="18.0" />
</font>
</Label>
<Label styleClass="nxdt" text="nx" />
<Label styleClass="bold-text" text="dumptool" />
</children>
</HBox>
<GridPane>

View File

@ -12,18 +12,13 @@
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.shape.SVGPath?>
<?import javafx.scene.text.Font?>
<ScrollPane fitToWidth="true" onDragDropped="#handleDrop" onDragOver="#handleDragOver" xmlns="http://javafx.com/javafx/18" xmlns:fx="http://javafx.com/fxml/1" fx:controller="nsusbloader.Controllers.PatchesController">
<VBox fx:id="patchesToolPane" spacing="15.0">
<Pane minHeight="-Infinity" prefHeight="10.0" style="-fx-background-color: linear-gradient(from 41px 34px to 50px 50px, reflect, #2cd882 40%, transparent 45%);" />
<HBox alignment="CENTER">
<children>
<Label text="%tabPatches_Lbl_Title">
<font>
<Font name="System Bold" size="15.0" />
</font>
</Label>
<Label styleClass="bold-text" text="%tabPatches_Lbl_Title" />
</children>
</HBox>
<GridPane>
@ -55,11 +50,7 @@
</Button>
</children>
</HBox>
<Label fx:id="locationFirmwareLbl" disable="true" textOverrun="LEADING_WORD_ELLIPSIS">
<font>
<Font name="System Italic" size="13.0" />
</font>
</Label>
<Label fx:id="locationFirmwareLbl" disable="true" styleClass="italic-text" textOverrun="LEADING_WORD_ELLIPSIS" />
<HBox alignment="CENTER_LEFT" spacing="5.0">
<children>
<Label minHeight="-Infinity" minWidth="-Infinity" text="%tabPatches_Lbl_Atmo" wrapText="true" />
@ -72,11 +63,7 @@
</Button>
</children>
</HBox>
<Label fx:id="locationAtmosphereLbl" disable="true" textOverrun="LEADING_WORD_ELLIPSIS">
<font>
<Font name="System Italic" size="13.0" />
</font>
</Label>
<Label fx:id="locationAtmosphereLbl" disable="true" styleClass="italic-text" textOverrun="LEADING_WORD_ELLIPSIS" />
</children>
</VBox>
<Separator prefWidth="200.0" />
@ -94,10 +81,7 @@
</Button>
</children>
</HBox>
<Label fx:id="locationKeysLbl" disable="true" textOverrun="LEADING_WORD_ELLIPSIS">
<font>
<Font name="System Italic" size="13.0" />
</font></Label>
<Label fx:id="locationKeysLbl" disable="true" styleClass="italic-text" textOverrun="LEADING_WORD_ELLIPSIS" />
</children>
</VBox>
<VBox spacing="5.0">

View File

@ -14,18 +14,13 @@
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.shape.SVGPath?>
<?import javafx.scene.text.Font?>
<ScrollPane fitToWidth="true" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="nsusbloader.Controllers.RcmController">
<ScrollPane fitToWidth="true" xmlns="http://javafx.com/javafx/18" xmlns:fx="http://javafx.com/fxml/1" fx:controller="nsusbloader.Controllers.RcmController">
<VBox fx:id="rcmToolPane" spacing="15.0">
<Pane minHeight="-Infinity" prefHeight="10.0" style="-fx-background-color: linear-gradient(from 41px 34px to 50px 50px, reflect, #ff1515 40%, transparent 45%);" />
<HBox alignment="CENTER">
<children>
<Label text="%tabRcm_Lbl_FuseeGelee">
<font>
<Font name="System Bold" size="15.0" />
</font>
</Label>
<Label styleClass="bold-text" text="%tabRcm_Lbl_FuseeGelee" />
</children>
</HBox>
<GridPane>
@ -57,11 +52,7 @@
<Label fx:id="payloadFNameLbl1" />
</children>
</HBox>
<Label fx:id="payloadFPathLbl1" disable="true">
<font>
<Font name="System Italic" size="13.0" />
</font>
</Label>
<Label fx:id="payloadFPathLbl1" disable="true" styleClass="italic-text" />
</children>
</VBox>
<Button fx:id="selPldBtn1" mnemonicParsing="false" onAction="#bntSelectPayloader" styleClass="buttonSelect">
@ -86,11 +77,7 @@
<Label fx:id="payloadFNameLbl2" />
</children>
</HBox>
<Label fx:id="payloadFPathLbl2" disable="true">
<font>
<Font name="System Italic" size="13.0" />
</font>
</Label>
<Label fx:id="payloadFPathLbl2" disable="true" styleClass="italic-text" />
</children>
</VBox>
<Button fx:id="selPldBtn2" mnemonicParsing="false" onAction="#bntSelectPayloader" styleClass="buttonSelect">
@ -115,11 +102,7 @@
<Label fx:id="payloadFNameLbl3" />
</children>
</HBox>
<Label fx:id="payloadFPathLbl3" disable="true">
<font>
<Font name="System Italic" size="13.0" />
</font>
</Label>
<Label fx:id="payloadFPathLbl3" disable="true" styleClass="italic-text" />
</children>
</VBox>
<Button fx:id="selPldBtn3" mnemonicParsing="false" onAction="#bntSelectPayloader" styleClass="buttonSelect">
@ -144,11 +127,7 @@
<Label fx:id="payloadFNameLbl4" />
</children>
</HBox>
<Label fx:id="payloadFPathLbl4" disable="true">
<font>
<Font name="System Italic" size="13.0" />
</font>
</Label>
<Label fx:id="payloadFPathLbl4" disable="true" styleClass="italic-text" />
</children>
</VBox>
<Button fx:id="selPldBtn4" mnemonicParsing="false" onAction="#bntSelectPayloader" styleClass="buttonSelect">
@ -173,11 +152,7 @@
<Label fx:id="payloadFNameLbl5" />
</children>
</HBox>
<Label fx:id="payloadFPathLbl5" disable="true">
<font>
<Font name="System Italic" size="13.0" />
</font>
</Label>
<Label fx:id="payloadFPathLbl5" disable="true" styleClass="italic-text" />
</children>
</VBox>
<Button fx:id="selPldBtn5" mnemonicParsing="false" onAction="#bntSelectPayloader" styleClass="buttonSelect">

View File

@ -10,7 +10,7 @@
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.VBox?>
<VBox spacing="5.0" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="nsusbloader.Controllers.SettingsBlockGenericController">
<VBox spacing="5.0" xmlns="http://javafx.com/javafx/18" xmlns:fx="http://javafx.com/fxml/1" fx:controller="nsusbloader.Controllers.SettingsBlockGenericController">
<children>
<Label text="%tab2_Lbl_ApplicationSettings" />
<HBox alignment="CENTER_LEFT" spacing="5.0">
@ -28,6 +28,11 @@
<Insets left="5.0" />
</VBox.margin>
</HBox>
<Button fx:id="fontSelectBtn" mnemonicParsing="false" text="%tab2_Btn_ApplicationFont">
<VBox.margin>
<Insets left="5.0" />
</VBox.margin>
</Button>
<HBox>
<children>
<VBox>

View File

@ -12,19 +12,14 @@
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<VBox fx:id="smToolPane" onDragDropped="#handleDrop" onDragOver="#handleDragOver" spacing="20.0" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="nsusbloader.Controllers.SplitMergeController">
<VBox fx:id="smToolPane" onDragDropped="#handleDrop" onDragOver="#handleDragOver" spacing="20.0" xmlns="http://javafx.com/javafx/18" xmlns:fx="http://javafx.com/fxml/1" fx:controller="nsusbloader.Controllers.SplitMergeController">
<VBox spacing="15.0">
<children>
<Pane minHeight="-Infinity" prefHeight="10.0" style="-fx-background-color: linear-gradient(from 41px 34px to 50px 50px, reflect, #00c8fc 40%, transparent 45%);" />
<HBox alignment="CENTER">
<children>
<Label text="%tabSplMrg_Lbl_SplitNMergeTitle">
<font>
<Font name="System Bold" size="15.0" />
</font>
</Label>
<Label styleClass="bold-text" text="%tabSplMrg_Lbl_SplitNMergeTitle" />
</children>
</HBox>
<GridPane>

View File

@ -91,3 +91,7 @@ tabPatches_Btn_MakeAtmo=Make Loader (Atmosphere)
tabPatches_Btn_MakeAll=Make all
tabPatches_ServiceWindowMessageEsFs=Both firmware and keys should be set to generate patches. Otherwise, it's not clear what to patch.
tabPatches_ServiceWindowMessageLoader=Atmosphere folder should be defined to generate 'Loader' patch.
tab2_Btn_ApplicationFont=Change application font
btn_ResetToDefaults=Reset
fontPreviewText=Text preview
fontSize=Font size:

View File

@ -1,6 +1,8 @@
btn_OpenFile=Selectionner les fichiers
btn_OpenFile=S\u00E9l\u00E9ctionner les fichiers
btn_OpenFolders=S\u00E9l\u00E9ctionner un dossier
btn_Upload=Envoyer vers NS
tab3_Txt_EnteredAsMsg1=Vous etes connect\u00E9 en tant que:
btn_OpenFolders_tooltip=S\u00E9lectionnez un dossier \u00E0 analyser.\nCe dossier et tous ses sous-dossiers seront analys\u00E9s.\nTous les fichiers pertinents seront ajout\u00E9s à la liste.
tab3_Txt_EnteredAsMsg1=Vous \u00EAtes connect\u00E9 en tant que :
tab3_Txt_EnteredAsMsg2=Vous devez \u00EAtre root ou avoir configur\u00E9 les r\u00E8gles 'udev' pour cet utilisateur afin d'\u00E9viter tout probl\u00E8me.
tab3_Txt_FilesToUploadTitle=Fichiers a envoyer:
tab3_Txt_GreetingsMessage=Bienvenue sur NS-USBloader
@ -9,21 +11,21 @@ windowBodyConfirmExit=Le transfert de donn\u00E9es est en cours et la fermeture
windowTitleConfirmExit=Non, ne faites pas \u00E7a!
btn_Stop=Interrompre
tab3_Txt_GreetingsMessage2=--\n\
Source: https://git.redrise.ru/desu/ns-usbloader\n\
Mirror: https://github.com/developersu/ns-usbloader/\n\
Site: https://redrise.ru\n\
Source : https://git.redrise.ru/desu/ns-usbloader\n\
Mirror : https://github.com/developersu/ns-usbloader/\n\
Site : https://redrise.ru\n\
Dmitry Isaenko [developer.su]
tab1_table_Lbl_Upload=Envoyer ?
tab1_table_Lbl_Size=Taille
tab1_table_Lbl_FileName=Nom de fichier
tab1_table_Lbl_Status=Statut
tab1_table_Lbl_FileName=Nom de fichier
tab1_table_Lbl_Size=Taille
tab1_table_Lbl_Upload=Envoyer ?
tab1_table_contextMenu_Btn_BtnDelete=Supprimer
tab1_table_contextMenu_Btn_DeleteAll=Supprimer tout
tab2_Lbl_HostIP=IP de l'ordinateur
tab1_Lbl_NSIP=IP de NS:
tab2_Cb_ValidateNSHostName=Toujours v\u00E9rifier que l'adresse IP de NS entr\u00E9e est correcte
windowTitleBadIp=L'adresse IP de NS est probablement incorrecte
windowBodyBadIp=\u00CAtes-vous s\u00FBr que l'adresse IP de NS entr\u00E9e est correcte ?
windowTitleBadIp=L'adresse IP de NS est probablement incorrecte
tab2_Cb_ExpertMode=Mode expert
tab2_Lbl_HostPort=port
tab2_Cb_AutoDetectIp=D\u00E9tection automatique d'IP
@ -37,12 +39,24 @@ tab2_Cb_AutoCheckForUpdates=V\u00E9rifier automatiquement les mises \u00E0 jour
windowTitleNewVersionAval=Nouvelle version disponible
windowTitleNewVersionNOTAval=Aucune nouvelle version disponible
windowTitleNewVersionUnknown=Impossible de v\u00E9rifier les nouvelles versions
windowBodyNewVersionNOTAval=Vous utilisez la derni\u00E8re version
windowBodyNewVersionUnknown=Une erreur s'est produite\nPeut-\u00EAtre des probl\u00E8mes de connexion Internet ou GitHub est en panne
windowBodyNewVersionNOTAval=Vous utilisez la derni\u00E8re version
tab2_Cb_AllowXciNszXcz=Autoriser la s\u00E9lection de fichiers XCI / NSZ / XCZ pour Awoo
tab2_Lbl_AllowXciNszXczDesc=Utilis\u00E9 par certaines applications tierces prenant en charge XCI/NSZ/XCZ et utilisant le protocole de transfert TinFoil. Ne changez pas en cas de doute.
tab2_Lbl_Language=La langue
tab2_Lbl_Language=Langue
windowBodyRestartToApplyLang=Red\u00E9marrez l'application pour appliquer les modifications.
btn_OpenSplitFile=S\u00E9lectionner un NSP divis\u00E9
tab2_Lbl_ApplicationSettings=Param\u00E8tres principaux
tabSplMrg_RadioBtn_Split=Diviser
tabSplMrg_RadioBtn_Merge=Fusionner
failure_txt=Erreur
btn_Select=S\u00E9lectionner
btn_InjectPayloader=Injecter le payload
tab2_Btn_InstallDrivers=T\u00E9l\u00E9charger et installer les pilotes
windowTitleDownloadDrivers=T\u00E9l\u00E9charger et installer les pilotes
btn_Cancel=Annuler
btn_Close=Fermer
tab2_Cb_GlVersion=Version de GoldLeaf
tab2_Cb_GLshowNspOnly=N'afficher que les *.nsp dans GoldLeaf.
tab2_Cb_foldersSelectorForRoms=S\u00E9lectionnez un dossier contenant des fichiers ROM plutôt que de les s\u00E9lectionner individuellement.

View File

@ -1,5 +1,5 @@
btn_OpenFile=\uD30C\uC77C \uC120\uD0DD
btn_OpenFolders=\uD30C\uC77C \uC120\uD0DD
btn_OpenFolders=\uD30C\uC77C \uC120\uD0DD
btn_Upload=NS\uC5D0 \uC5C5\uB85C\uB4DC
btn_OpenFolders_tooltip=\uC2A4\uCE94\uD560 \uD3F4\uB354\uB97C \uC120\uD0DD\uD569\uB2C8\uB2E4.\n\uC774 \uD3F4\uB354\uC640 \uBAA8\uB4E0 \uD558\uC704 \uD3F4\uB354\uAC00 \uAC80\uC0C9\uB429\uB2C8\uB2E4.\n\uC77C\uCE58\uD558\uB294 \uBAA8\uB4E0 \uD30C\uC77C\uC774 \uBAA9\uB85D\uC5D0 \uCD94\uAC00\uB429\uB2C8\uB2E4.
tab3_Txt_EnteredAsMsg1=\uB2E4\uC74C\uACFC \uAC19\uC774 \uC785\uB825\uB418\uC5C8\uC2B5\uB2C8\uB2E4:
@ -79,4 +79,15 @@ windowBodyFilesScanned=\uC2A4\uCE94 \uB41C \uD30C\uC77C: %d\n\uCD94\uAC00 \uB420
tab2_Lbl_AwooBlockTitle=Awoo \uC124\uCE58 \uD504\uB85C\uADF8\uB7A8\uACFC \uD638\uD658\uC131
tabRcm_Lbl_Payload=\uD398\uC774\uB85C\uB4DC:
tabRcm_Lbl_FuseeGelee=Fus\u00E9e Gel\u00E9e RCM
tabPatches_Lbl_Firmware=\uD38C\uC6E8\uC5B4:
tabPatches_Lbl_Atmo=Atmosphere:
tabPatches_Btn_fromFolder=\uD3F4\uB354\uC5D0\uC11C
tabPatches_Btn_asZipFile=ZIP \uD30C\uC77C\uB85C
tabPatches_Lbl_Title=\uD328\uCE58
tabPatches_Lbl_Keys=\uD0A4:
tabPatches_Btn_MakeEs=ES \uB9CC\uB4E4\uAE30
tabPatches_Btn_MakeFs=FS \uB9CC\uB4E4\uAE30
tabPatches_Btn_MakeAtmo=\uB85C\uB354 \uB9CC\uB4E4\uAE30 (Atmosphere)
tabPatches_Btn_MakeAll=\uBAA8\uB450 \uB9CC\uB4E4\uAE30
tabPatches_ServiceWindowMessageEsFs=\uD38C\uC6E8\uC5B4\uC640 \uD0A4 \uBAA8\uB450 \uD328\uCE58\uB97C \uC0DD\uC131\uD558\uB3C4\uB85D \uC124\uC815\uD574\uC57C \uD569\uB2C8\uB2E4. \uADF8\uB807\uC9C0 \uC54A\uC73C\uBA74 \uBB34\uC5C7\uC744 \uD328\uCE58\uD560\uC9C0 \uBA85\uD655\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
tabPatches_ServiceWindowMessageLoader='\uB85C\uB354' \uD328\uCE58\uB97C \uC0DD\uC131\uD558\uB824\uBA74 Atmosphere \uD3F4\uB354\uB97C \uC815\uC758\uD574\uC57C \uD569\uB2C8\uB2E4.

View File

@ -23,7 +23,7 @@ tab2_Lbl_HostIP=IP \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0430
tab1_Lbl_NSIP=NS IP:
tab2_Cb_ValidateNSHostName=\u0412\u0441\u0435\u0433\u0434\u0430 \u043F\u0440\u043E\u0432\u0435\u0440\u044F\u0442\u044C \u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u043E\u0441\u0442\u044C NS IP.
windowTitleBadIp=IP \u0430\u0434\u0440\u0435\u0441 NS \u043F\u043E\u0445\u043E\u0436\u0435 \u043D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u044B\u0439
windowBodyBadIp=\u0412\u044B \u0443\u0432\u0435\u0440\u0435\u043D\u044B \u0447\u0442\u043E IP \u0430\u0434\u0440\u0435\u0441 NS \u0432\u0432\u0435\u0434\u0451\u043D \u0431\u0435\u0437 \u043E\u0448\u0438\u0431\u043E\u043A?
windowBodyBadIp=\u0412\u044B \u0443\u0432\u0435\u0440\u0435\u043D\u044B, \u0447\u0442\u043E IP \u0430\u0434\u0440\u0435\u0441 NS \u0432\u0432\u0435\u0434\u0451\u043D \u0431\u0435\u0437 \u043E\u0448\u0438\u0431\u043E\u043A?
tab2_Cb_ExpertMode=\u0420\u0435\u0436\u0438\u043C \u044D\u043A\u0441\u043F\u0435\u0440\u0442\u0430 (\u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0441\u0435\u0442\u0438)
tab2_Lbl_HostPort=\u043F\u043E\u0440\u0442
tab2_Cb_AutoDetectIp=\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0442\u044C IP
@ -89,5 +89,9 @@ tabPatches_Lbl_Keys=\u041A\u043B\u044E\u0447\u0438:
tabPatches_Lbl_Title=\u041F\u0430\u0442\u0447\u0438
tabPatches_ServiceWindowMessageEsFs=\u0414\u043B\u044F \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F \u043F\u0430\u0442\u0447\u0435\u0439 \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u043E \u0443\u043A\u0430\u0437\u0430\u0442\u044C \u043A\u0430\u043A \u043F\u0443\u0442\u044C \u043A \u043F\u0440\u043E\u0448\u0438\u0432\u043A\u0435, \u0442\u0430\u043A \u0438 \u043F\u0443\u0442\u044C \u043A \u0444\u0430\u0439\u043B\u0443 \u043A\u043B\u044E\u0447\u0435\u0439. \u0418\u043D\u0430\u0447\u0435 \u043D\u0435 \u043F\u043E\u043D\u044F\u0442\u043D\u043E \u0447\u0442\u043E \u0436\u0435 \u043F\u0430\u0442\u0447\u0438\u0442\u044C.
tabPatches_ServiceWindowMessageLoader=\u0414\u043B\u044F \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F \u043F\u0430\u0442\u0447\u0430 \u00ABLoader\u00BB \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u043E \u0443\u043A\u0430\u0437\u0430\u0442\u044C \u043F\u0443\u0442\u044C \u043A Atmosphere.
tab2_Btn_ApplicationFont=\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0448\u0440\u0438\u0444\u0442 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F
btn_ResetToDefaults=\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C
fontPreviewText=\u041F\u0440\u0438\u043C\u0435\u0440 \u0442\u0435\u043A\u0441\u0442\u0430
fontSize=\u0420\u0430\u0437\u043C\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u043E\u0432:

View File

@ -0,0 +1,97 @@
btn_OpenFile=Dosya secimi
btn_OpenFolders=Klasor secimi
btn_Upload=NS'e yukle
btn_OpenFolders_tooltip=Taranmasi icin bir klasor secin.\nBu klasor ve butun alt klasorleri taranacaktir.\nButun uyusan dosyalar listeye eklenecektir.
tab3_Txt_EnteredAsMsg1=Olarak giris yaptiniz:
tab3_Txt_EnteredAsMsg2=Bir cok hatadan kacinmak icin root olmaniz ya da bu kullanici icin 'udev' kurallarini ayarlamaniz gerekmektedir.
tab3_Txt_FilesToUploadTitle=Yuklenecek dosyalar:
tab3_Txt_GreetingsMessage= NS-USBloader'a Hos Geldiniz
tab3_Txt_NoFolderOrFileSelected=Hicbir dosya secilmedi: hicbir sey yuklenmedi.
windowBodyConfirmExit=Data transferi devam ediyor ve uygulamayi kapatmak bunu yarida kesecek.\nBu su an yapabileceginiz en kotu sey.\nIslemi yardida kes ve cik ?
windowTitleConfirmExit=Hayir,Bunu yapma!
btn_Stop=Hata
tab3_Txt_GreetingsMessage2=--\n\
Source: https://git.redrise.ru/desu/ns-usbloader\n\
Mirror: https://github.com/developersu/ns-usbloader/\n\
Site: https://redrise.ru\n\
Dmitry Isaenko [developer.su]
tab1_table_Lbl_Status=Durum
tab1_table_Lbl_FileName=Dosya Ismi
tab1_table_Lbl_Size=Boyut
tab1_table_Lbl_Upload=Yukle?
tab1_table_contextMenu_Btn_BtnDelete=Kaldir
tab1_table_contextMenu_Btn_DeleteAll=Hepsini kaldir
tab2_Lbl_HostIP=Host IP
tab1_Lbl_NSIP=NS IP:
tab2_Cb_ValidateNSHostName= NS IP girislerinizi her zaman dogrulayin.
windowBodyBadIp=Girilen NS IP adresinin dogru olduguna emin misiniz?
windowTitleBadIp=NS'in IP adressi buyuk ihtimalle yanlis
tab2_Cb_ExpertMode=Uzman modu (NET setup)
tab2_Lbl_HostPort=Port
tab2_Cb_AutoDetectIp=Oto-Tespit IP
tab2_Cb_RandSelectPort=Portu rastgele al
tab2_Cb_DontServeRequests=Istekleri yerine getirme
tab2_Lbl_DontServeRequestsDesc=Eger secili ise, bu bilgisayar NS'den (ag uzerinden) gelen NSP dosyalarinin isteklerine yanit vermez ve Awoo Installer'a (veya uyumlu uygulamalara) dosyalari nerede aramasi gerektigini soylemek icin tanimlanmis ana bilgisayar ayarlarini kullanir.
tab2_Lbl_HostExtra=Ekstra
windowTitleErrorPort=Port seti hatali!
windowBodyErrorPort=Port 0 olamaz ve 65535'den buyuk olamaz.
tab2_Cb_AutoCheckForUpdates=Guncellemeleri otomatik kontrol et
windowTitleNewVersionAval=Yeni versiyon mevcut
windowTitleNewVersionNOTAval=Yeni versiyon mevcut degil
windowTitleNewVersionUnknown=Yeni versiyon kontrolu yapilamiyor
windowBodyNewVersionUnknown=Bir sey ters gitti\nBelki internet yoktur ya da GitHub cokmustur
windowBodyNewVersionNOTAval=En son versiyonu kullaniyorsunuz
tab2_Cb_AllowXciNszXcz=XCI / NSZ / XCZ dosyalaninin Awoo icin seciminine izin ver.
tab2_Lbl_AllowXciNszXczDesc=XCI/NSZ/XCZ'yi destekleyen uygulamalar tarafindan kullanilir ve Awoo (Adubbz/TinFoil olarak da bilinir) transfer protokolunu uygular. Emin degilseniz degistirmeyin. Installer icin AWOO'yu etkinlestirin.
tab2_Lbl_Language=Dil
windowBodyRestartToApplyLang=Lutfen degisikliklerin uygulanabilmesi icin uygulamayi yendiden baslatin.
btn_OpenSplitFile=Bolme sec
tab2_Lbl_ApplicationSettings=Ana ayarlar
tabSplMrg_Lbl_SplitNMergeTitle=Dosyalari bolme & birlestirme araci
tabSplMrg_RadioBtn_Split=Ayir
tabSplMrg_RadioBtn_Merge=Birlestir
tabSplMrg_Txt_File=Dosya:
tabSplMrg_Txt_Folder=Dosyayi ayir (klasor):
tabSplMrg_Btn_SelectFile=Dosya sec
tabSplMrg_Btn_SelectFolder=Klasor Sec
tabSplMrg_Lbl_SaveToLocation=Buraya kaydet:
tabSplMrg_Btn_ChangeSaveToLocation=Degistir
tabSplMrg_Btn_Convert=Cevir
windowTitleError=Hata
windowBodyPleaseFinishTransfersFirst=Bolme/Birlestirme islemleri USB/Network transfer sureci aktifken yapilamaz. Lutfen once aktif transfer isleminizi bitiriniz.
done_txt=Hazir!
failure_txt=Basarisiz
btn_Select=Secim yap
btn_InjectPayloader=payload yukle (enject)
tabNXDT_Btn_Start=Basla!
tab2_Btn_InstallDrivers=Suruculeri indir ve yukle
windowTitleDownloadDrivers=Suruculeri indir ve yukle
windowBodyDownloadDrivers=Suruculer indiriliyor (libusbK v3.0.7.0)...
btn_Cancel=Iptal
btn_Close=Kapat
tab2_Cb_GlVersion=GoldLeaf versiyonu
tab2_Cb_GLshowNspOnly=Goldleaf'ta sadece *.nsp goster.
windowBodyPleaseStopOtherProcessFirst=Lutfen devam etmeden once butun diger aktif islemleri durdurun.
tab2_Cb_foldersSelectorForRoms=Direkt ROM dosyalini secmek yerine ROM klasorunu sec
tab2_Cb_foldersSelectorForRomsDesc=Oyunlar' sekmesinde 'Dosyalari Sec' dugmesi davranisini degistirir: Tek tek ROM dosyalarini secmek yerine, desteklenen her dosyayi bir klasor secerek ekleyebilirsiniz.
windowTitleAddingFiles=Dosyalar araniyor...
windowBodyFilesScanned=Dosyalar tarandi: %d\nEklenecek: %d
tab2_Lbl_AwooBlockTitle=Awoo Yukleyicisi ve Uyumu
tabRcm_Lbl_Payload=Payload:
tabRcm_Lbl_FuseeGelee=Fus\u00E9e Gel\u00E9e RCM
tabPatches_Lbl_Firmware=Firmware:
tabPatches_Lbl_Atmo=Atmosphere:
tabPatches_Btn_fromFolder=Klasorden
tabPatches_Btn_asZipFile=ZIP dosyasi olarak
tabPatches_Lbl_Title=Yamalar
tabPatches_Lbl_Keys=Anahtarlar:
tabPatches_Btn_MakeEs=ES yap
tabPatches_Btn_MakeFs=FS yap
tabPatches_Btn_MakeAtmo=Loader yap (Atmosphere)
tabPatches_Btn_MakeAll=Hepsini yap
tabPatches_ServiceWindowMessageEsFs=Firmware ve anahtarlar, yamalari olusturmak icin ayarlanmalidir. Aksi takdirde, neyi duzeltecegi belirsiz olacaktir.
tabPatches_ServiceWindowMessageLoader='Loader' yamasi olusturmak icin Atmosphere klasoru tanimlanmalidir.
tab2_Btn_ApplicationFont=Uygulama yazi tipini degistir
btn_ResetToDefaults=Reset
fontPreviewText=Yazi Onizlemesi
fontSize=Yazi boyutu:

View File

@ -89,4 +89,8 @@ tabPatches_Lbl_Keys=\u041A\u043B\u044E\u0447\u0456:
tabPatches_Lbl_Title=\u041F\u0430\u0442\u0447\u0438
tabPatches_ServiceWindowMessageEsFs=\u0414\u043B\u044F \u0441\u0442\u0432\u043E\u0440\u0435\u043D\u043D\u044F \u043F\u0430\u0442\u0447\u0456\u0432 \u043D\u0435\u043E\u0431\u0445\u0456\u0434\u043D\u043E \u0432\u043A\u0430\u0437\u0430\u0442\u0438 \u044F\u043A \u0448\u043B\u044F\u0445 \u0434\u043E \u043F\u0440\u043E\u0448\u0438\u0432\u043A\u0438, \u0442\u0430\u043A \u0456 \u0434\u043E \u0444\u0430\u0439\u043B\u0443 \u043A\u043B\u044E\u0447\u0456\u0432. \u0411\u043E \u0456\u043D\u0430\u043A\u0448\u0435 \u043D\u0435 \u0437\u0440\u043E\u0437\u0443\u043C\u0456\u043B\u043E \u0449\u043E \u0436 \u0442\u0440\u0435\u0431\u0430 \u043F\u0430\u0442\u0447\u0438\u0442\u0438.
tabPatches_ServiceWindowMessageLoader=\u0414\u043B\u044F \u0433\u0435\u043D\u0435\u0440\u0430\u0446\u0456\u0457 "Loader"-\u043F\u0430\u0442\u0447\u0443 \u043D\u0435\u043E\u0431\u0445\u0456\u0434\u043D\u043E \u0432\u043A\u0430\u0437\u0430\u0442\u0438 \u0448\u043B\u044F\u0445 \u0434\u043E Atmosphere.
tab2_Btn_ApplicationFont=\u0417\u043C\u0456\u043D\u0438\u0442\u0438 \u0448\u0440\u0438\u0444\u0442 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u0438
btn_ResetToDefaults=C\u043A\u0438\u043D\u0443\u0442\u0438
fontPreviewText=\u041F\u0440\u0438\u043A\u043B\u0430\u0434 \u0442\u0435\u043A\u0441\u0442\u0443
fontSize=\u0420\u043E\u0437\u043C\u0456\u0440 \u0448\u0440\u0438\u0444\u0442\u0456\u0432:

View File

@ -44,7 +44,7 @@ windowBodyNewVersionNOTAval=\u4F60\u6B63\u5728\u4F7F\u7528\u6700\u65B0\u7248
tab2_Cb_AllowXciNszXcz=Awoo\u6A21\u5F0F\u5141\u8BB8\u9009\u62E9XCI\u6587\u4EF6
tab2_Lbl_AllowXciNszXczDesc=\u7528\u4E8E\u4E00\u4E9B\u652F\u6301XCI/NSZ/XCZ\u548CTinfoil\u4F20\u8F93\u534F\u8BAE\u7684\u7B2C\u4E09\u65B9\u5E94\u7528\u3002\u5982\u679C\u4E0D\u6E05\u695A\u4E0D\u8981\u4FEE\u6539\u3002
tab2_Lbl_Language=\u8BED\u8A00
windowBodyRestartToApplyLang=\u8BF7\u91CD\u542F\u5E94\u7528\u4EE5\u5E94\u7528\u66F4\u6539\u3002
windowBodyRestartToApplyLang=\u8bf7\u91cd\u542f\u7a0b\u5e8f\u005c\u006e\u914d\u7f6e\u624d\u4f1a\u751f\u6548\uff01
btn_OpenSplitFile=\u9009\u62E9\u5206\u5272\u7684ROM
tab2_Lbl_ApplicationSettings=\u4E3B\u8981\u8BBE\u5B9A
tabSplMrg_Lbl_SplitNMergeTitle=\u5206\u5272&\u5408\u5E76\u6587\u4EF6\u5DE5\u5177

View File

@ -5,6 +5,18 @@
-fx-background: #2d2d2d;
}
Text {
-fx-fill: white;
}
.bold-text{
-fx-font-weight: bold;
}
.italic-text{
-fx-font-style: italic;
}
.button, .buttonUp, .buttonStop, .buttonSelect{
-fx-background-color: #4f4f4f;
-fx-border-color: #4f4f4f;
@ -235,21 +247,31 @@
-fx-border-width: 2;
}
.list-cell, .list-cell:selected, .list-cell:filled:selected{
.list-cell:even,
.list-cell:even:selected,
.list-cell:even:filled:selected{
-fx-background-color: -fx-table-cell-border-color, #424242;
-fx-background-insets: 0, 0 0 1 0;
-fx-table-cell-border-color: #6d8484;
}
.list-cell:odd, .list-cell:odd:selected, .list-cell:odd:filled:selected{
.list-cell:odd,
.list-cell:odd:selected,
.list-cell:odd:filled:selected{
-fx-background-color: -fx-table-cell-border-color, #4f4f4f;
-fx-background-insets: 0, 0 0 1 0;
-fx-table-cell-border-color: #6d8484;
}
.list-cell .text, .list-cell:odd .text{
.list-cell .text,
.list-cell:odd .text,
.list-cell Text,
.list-cell:odd Text{
-fx-fill: #f7fafa;
}
.list-cell:filled:selected .text, .list-cell:odd:filled:selected .text{
.list-cell:filled:selected .text,
.list-cell:odd:filled:selected .text,
.list-cell:filled:selected Text,
.list-cell:odd:filled:selected Text{
-fx-fill: #08f3ff;
}
/* -========================== Context menu =====================- */
@ -445,6 +467,7 @@
}
.nxdt.label .text {
-fx-fill: #cb0010;
-fx-font-weight: bold;
}
.regionWindows {
@ -468,7 +491,39 @@
-fx-min-height: -size;
-fx-min-width: 24;
}
//
/********************* Spinner **************************/
.spinner{
-fx-background-color: #4f4f4f;
-fx-border-radius: 3;
-fx-border-width: 1;
-fx-border-color: #4f4f4f;
-fx-mark-color: #eea11e;
-fx-effect: none;
}
.spinner .increment-arrow-button,
.spinner .decrement-arrow-button {
-fx-background-radius: 0;
-fx-background-color: #4f4f4f;
}
.spinner .increment-arrow-button:hover .increment-arrow,
.spinner .decrement-arrow-button:hover .decrement-arrow {
-fx-background-color: #ff8000;
}
.spinner .increment-arrow-button:hover:pressed .increment-arrow,
.spinner .decrement-arrow-button:hover:pressed .decrement-arrow,
.spinner .increment-arrow-button:pressed .increment-arrow,
.spinner .decrement-arrow-button:pressed .decrement-arrow {
-fx-background-color: #71e016;
}
.spinner .increment-arrow-button .increment-arrow,
.spinner .decrement-arrow-button .decrement-arrow {
-fx-background-color: #eea11e;
}
//.lineGradient {
// -fx-background-color: linear-gradient(from 41px 34px to 50px 50px, reflect, #00c8fc 30%, transparent 45%);
//}

View File

@ -5,6 +5,18 @@
-fx-background: #ebebeb;
}
Text {
-fx-fill: black;
}
.bold-text{
-fx-font-weight: bold;
}
.italic-text{
-fx-font-style: italic;
}
.button, .buttonUp, .buttonStop, .buttonSelect{
-fx-background-color: #fefefe;
-fx-background-insets: 0 0 0 0, 0, 1, 2;
@ -253,23 +265,35 @@
-fx-border-width: 2;
}
.list-cell, .list-cell:selected, .list-cell:filled:selected{
.list-cell:even{
-fx-background-color: -fx-table-cell-border-color, #ebfffe;
-fx-background-insets: 0, 0 0 1 0;
-fx-table-cell-border-color: #b0b0b0;
}
.list-cell:odd, .list-cell:odd:selected, .list-cell:odd:filled:selected{
.list-cell:odd{
-fx-background-color: -fx-table-cell-border-color, #fefefe;
-fx-background-insets: 0, 0 0 1 0;
-fx-table-cell-border-color: #b0b0b0;
}
.list-cell .text, .list-cell:odd .text{
.list-cell:even:selected,
.list-cell:even:filled:selected,
.list-cell:odd:selected,
.list-cell:odd:filled:selected{
-fx-background-color: -fx-table-cell-border-color, #e4ffde;
}
.list-cell .text,
.list-cell:odd .text,
.list-cell Text,
.list-cell:odd Text{
-fx-fill: #2c2c2c;
}
.list-cell:filled:selected .text, .list-cell:odd:filled:selected .text{
.list-cell:filled:selected .text,
.list-cell:odd:filled:selected .text,
.list-cell:filled:selected Text,
.list-cell:odd:filled:selected Text{
-fx-fill: #2c2c2c;
-fx-font-weight: bold
}
/* -========================= Separator ===================- */
.separator *.line {
@ -363,6 +387,7 @@
}
.nxdt.label .text {
-fx-fill: #9d010e;
-fx-font-weight: bold;
}
.regionWindows {
-fx-shape: "M3,12V6.75L9,5.43V11.91L3,12M20,3V11.75L10,11.9V5.21L20,3M3,13L9,13.09V19.9L3,18.75V13M20,13.25V22L10,20.09V13.1L20,13.25Z";

View 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;
}
}

View File

@ -0,0 +1,53 @@
/* 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;
@Disabled
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";
}
@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();
}
}
@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();
}
}

View File

@ -0,0 +1,59 @@
/* 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;
@Disabled
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";
}
@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();
}
}
@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();
}
}

View 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;
@Disabled
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();
}
@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();
}
}