2020-03-30 04:58:39 +03:00
|
|
|
/*
|
|
|
|
Copyright 2019-2020 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/>.
|
|
|
|
*/
|
2019-03-17 19:45:51 +03:00
|
|
|
package nsusbloader.Controllers;
|
|
|
|
|
2019-03-23 20:05:48 +03:00
|
|
|
import javafx.application.HostServices;
|
|
|
|
import javafx.concurrent.Task;
|
2019-03-17 19:45:51 +03:00
|
|
|
import javafx.fxml.FXML;
|
|
|
|
import javafx.fxml.Initializable;
|
2019-03-23 20:05:48 +03:00
|
|
|
import javafx.scene.control.*;
|
|
|
|
import javafx.scene.layout.Region;
|
2019-03-19 03:10:00 +03:00
|
|
|
import javafx.scene.layout.VBox;
|
2019-03-17 19:45:51 +03:00
|
|
|
import nsusbloader.AppPreferences;
|
2019-03-19 05:06:18 +03:00
|
|
|
import nsusbloader.ServiceWindow;
|
2019-03-23 20:05:48 +03:00
|
|
|
import nsusbloader.ModelControllers.UpdatesChecker;
|
2020-07-28 02:09:10 +03:00
|
|
|
import nsusbloader.UI.LocaleHolder;
|
|
|
|
import nsusbloader.UI.SettingsLanguagesSetup;
|
2020-06-12 17:40:17 +03:00
|
|
|
import nsusbloader.Utilities.WindowsDrivers.DriversInstall;
|
2019-03-17 19:45:51 +03:00
|
|
|
|
|
|
|
import java.net.URL;
|
2019-06-14 05:06:26 +03:00
|
|
|
import java.util.*;
|
2019-03-17 19:45:51 +03:00
|
|
|
|
2019-03-18 19:12:11 +03:00
|
|
|
public class SettingsController implements Initializable {
|
2019-08-14 05:37:58 +03:00
|
|
|
@FXML
|
2020-06-12 17:40:17 +03:00
|
|
|
private CheckBox nspFilesFilterForGLCB,
|
|
|
|
validateNSHostNameCb,
|
|
|
|
expertModeCb,
|
|
|
|
autoDetectIpCb,
|
2020-07-28 02:09:10 +03:00
|
|
|
randPortCb,
|
|
|
|
dontServeCb,
|
|
|
|
autoCheckUpdCb,
|
|
|
|
tfXciSpprtCb;
|
2019-03-19 03:10:00 +03:00
|
|
|
|
2019-03-17 19:45:51 +03:00
|
|
|
@FXML
|
2020-06-12 17:40:17 +03:00
|
|
|
private TextField pcIpTextField,
|
|
|
|
pcPortTextField,
|
|
|
|
pcExtraTextField;
|
2019-03-19 03:10:00 +03:00
|
|
|
|
|
|
|
@FXML
|
|
|
|
private VBox expertSettingsVBox;
|
2019-03-17 19:45:51 +03:00
|
|
|
|
2019-03-23 20:05:48 +03:00
|
|
|
@FXML
|
|
|
|
private Hyperlink newVersionLink;
|
2020-06-12 17:40:17 +03:00
|
|
|
|
2019-06-14 05:06:26 +03:00
|
|
|
@FXML
|
2020-06-12 17:40:17 +03:00
|
|
|
private Button langBtn,
|
|
|
|
checkForUpdBtn,
|
|
|
|
drvInstBtn;
|
2019-06-14 05:06:26 +03:00
|
|
|
@FXML
|
2020-07-28 02:09:10 +03:00
|
|
|
private ChoiceBox<LocaleHolder> langCB;
|
2019-06-14 05:06:26 +03:00
|
|
|
|
2019-09-26 05:15:37 +03:00
|
|
|
@FXML
|
2020-07-07 02:20:57 +03:00
|
|
|
private ChoiceBox<String> glVersionChoiceBox;
|
2019-09-26 05:15:37 +03:00
|
|
|
|
2020-07-28 02:09:10 +03:00
|
|
|
private HostServices hostServices;
|
2019-03-23 20:05:48 +03:00
|
|
|
|
2020-07-07 02:20:57 +03:00
|
|
|
public static final String[] glSupportedVersions = {"v0.5", "v0.7.x", "v0.8"};
|
2019-09-26 05:15:37 +03:00
|
|
|
|
2020-07-28 02:09:10 +03:00
|
|
|
private ResourceBundle resourceBundle;
|
|
|
|
|
2019-03-17 19:45:51 +03:00
|
|
|
@Override
|
|
|
|
public void initialize(URL url, ResourceBundle resourceBundle) {
|
2020-07-28 02:09:10 +03:00
|
|
|
this.resourceBundle = resourceBundle;
|
|
|
|
final AppPreferences preferences = AppPreferences.getInstance();
|
2019-08-14 05:37:58 +03:00
|
|
|
|
2020-07-28 02:09:10 +03:00
|
|
|
nspFilesFilterForGLCB.setSelected(preferences.getNspFileFilterGL());
|
|
|
|
validateNSHostNameCb.setSelected(preferences.getNsIpValidationNeeded());
|
|
|
|
expertSettingsVBox.setDisable(! preferences.getExpertMode());
|
|
|
|
expertModeCb.setSelected(preferences.getExpertMode());
|
|
|
|
expertModeCb.setOnAction(e-> expertSettingsVBox.setDisable(! expertModeCb.isSelected()));
|
2019-03-18 19:12:11 +03:00
|
|
|
|
2020-07-28 02:09:10 +03:00
|
|
|
autoDetectIpCb.setSelected(preferences.getAutoDetectIp());
|
|
|
|
pcIpTextField.setDisable(preferences.getAutoDetectIp());
|
2019-03-19 05:06:18 +03:00
|
|
|
autoDetectIpCb.setOnAction(e->{
|
|
|
|
pcIpTextField.setDisable(autoDetectIpCb.isSelected());
|
2020-07-28 02:09:10 +03:00
|
|
|
if (! autoDetectIpCb.isSelected())
|
2019-03-19 07:01:30 +03:00
|
|
|
pcIpTextField.requestFocus();
|
2019-03-19 05:06:18 +03:00
|
|
|
});
|
2019-03-19 03:30:13 +03:00
|
|
|
|
2020-07-28 02:09:10 +03:00
|
|
|
randPortCb.setSelected(preferences.getRandPort());
|
|
|
|
pcPortTextField.setDisable(preferences.getRandPort());
|
2019-03-19 05:06:18 +03:00
|
|
|
randPortCb.setOnAction(e->{
|
|
|
|
pcPortTextField.setDisable(randPortCb.isSelected());
|
2020-07-28 02:09:10 +03:00
|
|
|
if (! randPortCb.isSelected())
|
2019-03-19 07:01:30 +03:00
|
|
|
pcPortTextField.requestFocus();
|
2019-03-19 05:06:18 +03:00
|
|
|
});
|
2019-03-19 03:30:13 +03:00
|
|
|
|
2020-07-28 02:09:10 +03:00
|
|
|
if (preferences.getNotServeRequests()){
|
2019-03-19 05:06:18 +03:00
|
|
|
dontServeCb.setSelected(true);
|
|
|
|
|
|
|
|
autoDetectIpCb.setSelected(false);
|
|
|
|
autoDetectIpCb.setDisable(true);
|
|
|
|
pcIpTextField.setDisable(false);
|
|
|
|
|
|
|
|
randPortCb.setSelected(false);
|
|
|
|
randPortCb.setDisable(true);
|
|
|
|
pcPortTextField.setDisable(false);
|
|
|
|
}
|
2020-07-28 02:09:10 +03:00
|
|
|
pcExtraTextField.setDisable(! preferences.getNotServeRequests());
|
2019-03-19 05:06:18 +03:00
|
|
|
|
|
|
|
dontServeCb.setOnAction(e->{
|
|
|
|
if (dontServeCb.isSelected()){
|
|
|
|
autoDetectIpCb.setSelected(false);
|
|
|
|
autoDetectIpCb.setDisable(true);
|
|
|
|
pcIpTextField.setDisable(false);
|
|
|
|
|
|
|
|
randPortCb.setSelected(false);
|
|
|
|
randPortCb.setDisable(true);
|
|
|
|
pcPortTextField.setDisable(false);
|
|
|
|
|
|
|
|
pcExtraTextField.setDisable(false);
|
2019-03-19 07:01:30 +03:00
|
|
|
pcIpTextField.requestFocus();
|
2019-03-19 05:06:18 +03:00
|
|
|
}
|
|
|
|
else {
|
|
|
|
autoDetectIpCb.setDisable(false);
|
|
|
|
autoDetectIpCb.setSelected(true);
|
|
|
|
pcIpTextField.setDisable(true);
|
|
|
|
|
|
|
|
randPortCb.setDisable(false);
|
|
|
|
randPortCb.setSelected(true);
|
|
|
|
pcPortTextField.setDisable(true);
|
|
|
|
|
|
|
|
pcExtraTextField.setDisable(true);
|
|
|
|
}
|
|
|
|
});
|
2019-03-19 03:30:13 +03:00
|
|
|
|
2020-07-28 02:09:10 +03:00
|
|
|
pcIpTextField.setText(preferences.getHostIp());
|
|
|
|
pcPortTextField.setText(preferences.getHostPort());
|
|
|
|
pcExtraTextField.setText(preferences.getHostExtra());
|
2019-03-19 03:30:13 +03:00
|
|
|
|
2019-03-19 05:06:18 +03:00
|
|
|
pcIpTextField.setTextFormatter(new TextFormatter<>(change -> {
|
|
|
|
if (change.getControlNewText().contains(" ") | change.getControlNewText().contains("\t"))
|
|
|
|
return null;
|
|
|
|
else
|
|
|
|
return change;
|
|
|
|
}));
|
2019-09-25 07:24:38 +03:00
|
|
|
pcPortTextField.setTextFormatter(new TextFormatter<>(change -> {
|
2019-03-19 05:06:18 +03:00
|
|
|
if (change.getControlNewText().matches("^[0-9]{0,5}$")) {
|
2019-03-20 00:56:44 +03:00
|
|
|
if (!change.getControlNewText().isEmpty()
|
|
|
|
&& ((Integer.parseInt(change.getControlNewText()) > 65535) || (Integer.parseInt(change.getControlNewText()) == 0))
|
|
|
|
) {
|
2019-03-19 05:06:18 +03:00
|
|
|
ServiceWindow.getErrorNotification(resourceBundle.getString("windowTitleErrorPort"), resourceBundle.getString("windowBodyErrorPort"));
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
return change;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
return null;
|
|
|
|
}));
|
|
|
|
pcExtraTextField.setTextFormatter(new TextFormatter<>(change -> {
|
|
|
|
if (change.getControlNewText().contains(" ") | change.getControlNewText().contains("\t"))
|
|
|
|
return null;
|
|
|
|
else
|
|
|
|
return change;
|
|
|
|
}));
|
2019-03-23 20:05:48 +03:00
|
|
|
|
|
|
|
newVersionLink.setVisible(false);
|
2020-07-28 02:09:10 +03:00
|
|
|
newVersionLink.setOnAction(e-> hostServices.showDocument(newVersionLink.getText()));
|
2019-03-23 20:05:48 +03:00
|
|
|
|
2020-07-28 02:09:10 +03:00
|
|
|
autoCheckUpdCb.setSelected(preferences.getAutoCheckUpdates());
|
2019-03-23 20:05:48 +03:00
|
|
|
|
|
|
|
Region btnSwitchImage = new Region();
|
|
|
|
btnSwitchImage.getStyleClass().add("regionUpdatesCheck");
|
|
|
|
checkForUpdBtn.setGraphic(btnSwitchImage);
|
|
|
|
|
2020-07-28 02:09:10 +03:00
|
|
|
checkForUpdBtn.setOnAction(e->checkForUpdatesAction());
|
2020-06-12 17:40:17 +03:00
|
|
|
|
2020-07-28 02:09:10 +03:00
|
|
|
setDriversInstallFeature();
|
2020-06-12 17:40:17 +03:00
|
|
|
|
2020-07-28 02:09:10 +03:00
|
|
|
tfXciSpprtCb.setSelected(preferences.getTfXCI());
|
2019-06-14 05:06:26 +03:00
|
|
|
|
2020-07-28 02:09:10 +03:00
|
|
|
SettingsLanguagesSetup settingsLanguagesSetup = new SettingsLanguagesSetup();
|
|
|
|
langCB.setItems(settingsLanguagesSetup.getLanguages());
|
|
|
|
langCB.getSelectionModel().select(settingsLanguagesSetup.getRecentLanguage());
|
2019-06-14 05:06:26 +03:00
|
|
|
|
2020-07-28 02:09:10 +03:00
|
|
|
configureLanguageButton();
|
2019-06-15 03:27:03 +03:00
|
|
|
|
2019-09-26 05:15:37 +03:00
|
|
|
// Set supported old versions
|
2020-07-07 02:20:57 +03:00
|
|
|
glVersionChoiceBox.getItems().addAll(glSupportedVersions);
|
2020-07-28 02:09:10 +03:00
|
|
|
String oldVer = preferences.getGlVersion(); // Overhead; Too much validation of consistency
|
2020-07-07 02:20:57 +03:00
|
|
|
glVersionChoiceBox.getSelectionModel().select(oldVer);
|
2019-03-17 19:45:51 +03:00
|
|
|
}
|
2020-06-12 17:40:17 +03:00
|
|
|
|
2020-07-28 02:09:10 +03:00
|
|
|
private void checkForUpdatesAction(){
|
|
|
|
Task<List<String>> updTask = new UpdatesChecker();
|
|
|
|
updTask.setOnSucceeded(event->{
|
|
|
|
List<String> result = updTask.getValue();
|
|
|
|
|
|
|
|
if (result == null){
|
|
|
|
ServiceWindow.getInfoNotification(resourceBundle.getString("windowTitleNewVersionUnknown"),
|
|
|
|
resourceBundle.getString("windowBodyNewVersionUnknown"));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (result.get(0).isEmpty()){
|
|
|
|
ServiceWindow.getInfoNotification(resourceBundle.getString("windowTitleNewVersionNOTAval"),
|
|
|
|
resourceBundle.getString("windowBodyNewVersionNOTAval"));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
setNewVersionLink(result.get(0));
|
|
|
|
ServiceWindow.getInfoNotification(resourceBundle.getString("windowTitleNewVersionAval"),
|
|
|
|
resourceBundle.getString("windowTitleNewVersionAval")+": "+result.get(0) + "\n\n" + result.get(1));
|
|
|
|
});
|
|
|
|
Thread updates = new Thread(updTask);
|
|
|
|
updates.setDaemon(true);
|
|
|
|
updates.start();
|
|
|
|
}
|
|
|
|
|
|
|
|
private void setDriversInstallFeature(){
|
|
|
|
if (isWindows()){
|
|
|
|
Region btnDrvImage = new Region();
|
|
|
|
btnDrvImage.getStyleClass().add("regionWindows");
|
|
|
|
drvInstBtn.setGraphic(btnDrvImage);
|
|
|
|
drvInstBtn.setVisible(true);
|
|
|
|
drvInstBtn.setOnAction(actionEvent -> new DriversInstall(resourceBundle));
|
|
|
|
}
|
|
|
|
}
|
2020-06-12 17:40:17 +03:00
|
|
|
private boolean isWindows(){
|
|
|
|
return System.getProperty("os.name").toLowerCase().replace(" ", "").contains("windows");
|
|
|
|
}
|
|
|
|
|
2020-07-28 02:09:10 +03:00
|
|
|
private void configureLanguageButton(){
|
|
|
|
langBtn.setOnAction(e->languageButtonAction());
|
|
|
|
}
|
|
|
|
private void languageButtonAction(){
|
|
|
|
LocaleHolder localeHolder = langCB.getSelectionModel().getSelectedItem();
|
|
|
|
AppPreferences.getInstance().setLocale(localeHolder.getLocaleCode());
|
|
|
|
Locale newLocale = localeHolder.getLocale();
|
|
|
|
ServiceWindow.getInfoNotification("",
|
|
|
|
ResourceBundle.getBundle("locale", newLocale).getString("windowBodyRestartToApplyLang"));
|
|
|
|
}
|
|
|
|
|
2019-08-14 05:37:58 +03:00
|
|
|
public boolean getNSPFileFilterForGL(){return nspFilesFilterForGLCB.isSelected(); }
|
2019-03-19 05:06:18 +03:00
|
|
|
public boolean getExpertModeSelected(){ return expertModeCb.isSelected(); }
|
|
|
|
public boolean getAutoIpSelected(){ return autoDetectIpCb.isSelected(); }
|
|
|
|
public boolean getRandPortSelected(){ return randPortCb.isSelected(); }
|
|
|
|
public boolean getNotServeSelected(){ return dontServeCb.isSelected(); }
|
2019-03-19 03:30:13 +03:00
|
|
|
|
2019-03-17 19:45:51 +03:00
|
|
|
public boolean isNsIpValidate(){ return validateNSHostNameCb.isSelected(); }
|
2019-03-19 05:06:18 +03:00
|
|
|
|
|
|
|
public String getHostIp(){ return pcIpTextField.getText(); }
|
|
|
|
public String getHostPort(){ return pcPortTextField.getText(); }
|
|
|
|
public String getHostExtra(){ return pcExtraTextField.getText(); }
|
2019-03-23 20:05:48 +03:00
|
|
|
public boolean getAutoCheckForUpdates(){ return autoCheckUpdCb.isSelected(); }
|
2019-10-24 16:33:42 +03:00
|
|
|
public boolean getTfXciNszXczSupport(){ return tfXciSpprtCb.isSelected(); } // Used also for NSZ/XCZ
|
2019-03-23 20:05:48 +03:00
|
|
|
|
2020-07-28 02:09:10 +03:00
|
|
|
public void registerHostServices(HostServices hostServices){this.hostServices = hostServices;}
|
2019-03-23 20:05:48 +03:00
|
|
|
|
|
|
|
public void setNewVersionLink(String newVer){
|
|
|
|
newVersionLink.setVisible(true);
|
|
|
|
newVersionLink.setText("https://github.com/developersu/ns-usbloader/releases/tag/"+newVer);
|
|
|
|
}
|
2019-09-26 05:15:37 +03:00
|
|
|
|
2020-07-07 02:20:57 +03:00
|
|
|
public String getGlVer() {
|
|
|
|
return glVersionChoiceBox.getValue();
|
|
|
|
}
|
|
|
|
|
|
|
|
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());
|
2019-09-26 05:15:37 +03:00
|
|
|
}
|
2019-03-19 05:06:18 +03:00
|
|
|
}
|