added support for updating to different branches
* added support for updating to different branches * smmdb api fixed bad response from http url, using https now * code clean-up
This commit is contained in:
parent
40c6084412
commit
61e02f6ac1
|
@ -7,6 +7,7 @@
|
||||||
<?import com.jfoenix.controls.JFXToggleButton?>
|
<?import com.jfoenix.controls.JFXToggleButton?>
|
||||||
<?import com.jfoenix.controls.JFXTreeTableView?>
|
<?import com.jfoenix.controls.JFXTreeTableView?>
|
||||||
<?import javafx.geometry.Insets?>
|
<?import javafx.geometry.Insets?>
|
||||||
|
<?import javafx.scene.control.ChoiceBox?>
|
||||||
<?import javafx.scene.control.Label?>
|
<?import javafx.scene.control.Label?>
|
||||||
<?import javafx.scene.control.ScrollPane?>
|
<?import javafx.scene.control.ScrollPane?>
|
||||||
<?import javafx.scene.image.ImageView?>
|
<?import javafx.scene.image.ImageView?>
|
||||||
|
@ -88,6 +89,8 @@
|
||||||
<Label fx:id="updateLbl" layoutX="10.0" layoutY="315.0" text="Updates" AnchorPane.leftAnchor="10.0" AnchorPane.topAnchor="315.0" />
|
<Label fx:id="updateLbl" layoutX="10.0" layoutY="315.0" text="Updates" AnchorPane.leftAnchor="10.0" AnchorPane.topAnchor="315.0" />
|
||||||
<JFXButton fx:id="updateBtn" layoutX="14.0" layoutY="335.0" onAction="#updateBtnAction" prefHeight="32.0" text="check now!" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="335.0" />
|
<JFXButton fx:id="updateBtn" layoutX="14.0" layoutY="335.0" onAction="#updateBtnAction" prefHeight="32.0" text="check now!" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="335.0" />
|
||||||
<JFXToggleButton fx:id="autoUpdateToggleBtn" layoutX="10.0" layoutY="372.0" onAction="#autoUpdateToggleBtnAction" text="check for updates on startup" AnchorPane.leftAnchor="10.0" AnchorPane.topAnchor="372.0" />
|
<JFXToggleButton fx:id="autoUpdateToggleBtn" layoutX="10.0" layoutY="372.0" onAction="#autoUpdateToggleBtnAction" text="check for updates on startup" AnchorPane.leftAnchor="10.0" AnchorPane.topAnchor="372.0" />
|
||||||
|
<ChoiceBox fx:id="branchChoisBox" layoutX="270.0" layoutY="339.0" prefWidth="150.0" AnchorPane.leftAnchor="270.0" AnchorPane.topAnchor="339.0" />
|
||||||
|
<Label fx:id="branchLbl" layoutX="204.0" layoutY="337.0" prefHeight="32.0" text="Branch" AnchorPane.leftAnchor="204.0" AnchorPane.topAnchor="335.0" />
|
||||||
</children>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
</content>
|
</content>
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -7,6 +7,7 @@
|
||||||
<?import com.jfoenix.controls.JFXToggleButton?>
|
<?import com.jfoenix.controls.JFXToggleButton?>
|
||||||
<?import com.jfoenix.controls.JFXTreeTableView?>
|
<?import com.jfoenix.controls.JFXTreeTableView?>
|
||||||
<?import javafx.geometry.Insets?>
|
<?import javafx.geometry.Insets?>
|
||||||
|
<?import javafx.scene.control.ChoiceBox?>
|
||||||
<?import javafx.scene.control.Label?>
|
<?import javafx.scene.control.Label?>
|
||||||
<?import javafx.scene.control.ScrollPane?>
|
<?import javafx.scene.control.ScrollPane?>
|
||||||
<?import javafx.scene.image.ImageView?>
|
<?import javafx.scene.image.ImageView?>
|
||||||
|
@ -88,6 +89,8 @@
|
||||||
<Label fx:id="updateLbl" layoutX="10.0" layoutY="315.0" text="Updates" AnchorPane.leftAnchor="10.0" AnchorPane.topAnchor="315.0" />
|
<Label fx:id="updateLbl" layoutX="10.0" layoutY="315.0" text="Updates" AnchorPane.leftAnchor="10.0" AnchorPane.topAnchor="315.0" />
|
||||||
<JFXButton fx:id="updateBtn" layoutX="14.0" layoutY="335.0" onAction="#updateBtnAction" prefHeight="32.0" text="check now!" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="335.0" />
|
<JFXButton fx:id="updateBtn" layoutX="14.0" layoutY="335.0" onAction="#updateBtnAction" prefHeight="32.0" text="check now!" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="335.0" />
|
||||||
<JFXToggleButton fx:id="autoUpdateToggleBtn" layoutX="10.0" layoutY="372.0" onAction="#autoUpdateToggleBtnAction" text="check for updates on startup" AnchorPane.leftAnchor="10.0" AnchorPane.topAnchor="372.0" />
|
<JFXToggleButton fx:id="autoUpdateToggleBtn" layoutX="10.0" layoutY="372.0" onAction="#autoUpdateToggleBtnAction" text="check for updates on startup" AnchorPane.leftAnchor="10.0" AnchorPane.topAnchor="372.0" />
|
||||||
|
<ChoiceBox fx:id="branchChoisBox" layoutX="270.0" layoutY="339.0" prefWidth="150.0" AnchorPane.leftAnchor="270.0" AnchorPane.topAnchor="339.0" />
|
||||||
|
<Label fx:id="branchLbl" layoutX="204.0" layoutY="337.0" prefHeight="32.0" text="Branch" AnchorPane.leftAnchor="204.0" AnchorPane.topAnchor="335.0" />
|
||||||
</children>
|
</children>
|
||||||
</AnchorPane>
|
</AnchorPane>
|
||||||
</content>
|
</content>
|
||||||
|
|
|
@ -81,6 +81,7 @@ import javafx.scene.control.Alert.AlertType;
|
||||||
import javafx.scene.control.Button;
|
import javafx.scene.control.Button;
|
||||||
import javafx.scene.control.ButtonBar.ButtonData;
|
import javafx.scene.control.ButtonBar.ButtonData;
|
||||||
import javafx.scene.control.ButtonType;
|
import javafx.scene.control.ButtonType;
|
||||||
|
import javafx.scene.control.ChoiceBox;
|
||||||
import javafx.scene.control.ContextMenu;
|
import javafx.scene.control.ContextMenu;
|
||||||
import javafx.scene.control.Dialog;
|
import javafx.scene.control.Dialog;
|
||||||
import javafx.scene.control.Label;
|
import javafx.scene.control.Label;
|
||||||
|
@ -170,6 +171,9 @@ public class MainWindowController {
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private JFXToggleButton fullscreenToggleBtn;
|
private JFXToggleButton fullscreenToggleBtn;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private ChoiceBox<String> branchChoisBox;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private AnchorPane mainAnchorPane;
|
private AnchorPane mainAnchorPane;
|
||||||
|
@ -219,6 +223,9 @@ public class MainWindowController {
|
||||||
@FXML
|
@FXML
|
||||||
private Label updateLbl;
|
private Label updateLbl;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Label branchLbl;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private Label cemuSettingsLbl;
|
private Label cemuSettingsLbl;
|
||||||
|
|
||||||
|
@ -251,6 +258,7 @@ public class MainWindowController {
|
||||||
private boolean playTrue = false;
|
private boolean playTrue = false;
|
||||||
private boolean smmdbTrue = false;
|
private boolean smmdbTrue = false;
|
||||||
private boolean autoUpdate = false;
|
private boolean autoUpdate = false;
|
||||||
|
private boolean useBeta = false;
|
||||||
private boolean fullscreen;
|
private boolean fullscreen;
|
||||||
private boolean cloudSync;
|
private boolean cloudSync;
|
||||||
private String cloudService = ""; //set cloud provider (at the moment only GoogleDrive, Dropbox is planed)
|
private String cloudService = ""; //set cloud provider (at the moment only GoogleDrive, Dropbox is planed)
|
||||||
|
@ -280,6 +288,7 @@ public class MainWindowController {
|
||||||
private File configFileLinux = new File(dirLinux + "/config.xml");
|
private File configFileLinux = new File(dirLinux + "/config.xml");
|
||||||
File pictureCacheWin = new File(dirWin+"/picture_cache");
|
File pictureCacheWin = new File(dirWin+"/picture_cache");
|
||||||
File pictureCacheLinux = new File(dirLinux+"/picture_cache");
|
File pictureCacheLinux = new File(dirLinux+"/picture_cache");
|
||||||
|
private ObservableList<String> branches = FXCollections.observableArrayList("stable", "beta");
|
||||||
private ObservableList<String> smmIDs = FXCollections.observableArrayList("fe31b7f2", "44fc5929"); //TODO add more IDs
|
private ObservableList<String> smmIDs = FXCollections.observableArrayList("fe31b7f2", "44fc5929"); //TODO add more IDs
|
||||||
private ObservableList<UIROMDataType> games = FXCollections.observableArrayList();
|
private ObservableList<UIROMDataType> games = FXCollections.observableArrayList();
|
||||||
ObservableList<SmmdbApiDataType> courses = FXCollections.observableArrayList();
|
ObservableList<SmmdbApiDataType> courses = FXCollections.observableArrayList();
|
||||||
|
@ -328,8 +337,14 @@ public class MainWindowController {
|
||||||
fullscreenToggleBtn.setSelected(isFullscreen());
|
fullscreenToggleBtn.setSelected(isFullscreen());
|
||||||
cloudSyncToggleBtn.setSelected(isCloudSync());
|
cloudSyncToggleBtn.setSelected(isCloudSync());
|
||||||
autoUpdateToggleBtn.setSelected(isAutoUpdate());
|
autoUpdateToggleBtn.setSelected(isAutoUpdate());
|
||||||
updateBtn.setDisable(false); // TODO
|
branchChoisBox.setItems(branches);
|
||||||
autoUpdateToggleBtn.setDisable(false); // TODO
|
|
||||||
|
if (isUseBeta()) {
|
||||||
|
branchChoisBox.getSelectionModel().select(1);
|
||||||
|
} else {
|
||||||
|
branchChoisBox.getSelectionModel().select(0);
|
||||||
|
}
|
||||||
|
|
||||||
applyColor();
|
applyColor();
|
||||||
|
|
||||||
//initialize courseTable
|
//initialize courseTable
|
||||||
|
@ -695,6 +710,18 @@ public class MainWindowController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
branchChoisBox.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() {
|
||||||
|
@Override
|
||||||
|
public void changed(ObservableValue<? extends Number> ov, Number value, Number new_value) {
|
||||||
|
if (branchChoisBox.getItems().get((int) new_value).toString() == "beta") {
|
||||||
|
setUseBeta(true);
|
||||||
|
} else {
|
||||||
|
setUseBeta(false);
|
||||||
|
}
|
||||||
|
saveSettings();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
LOGGER.info("initializing Actions done!");
|
LOGGER.info("initializing Actions done!");
|
||||||
}
|
}
|
||||||
|
@ -834,7 +861,7 @@ public class MainWindowController {
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
void updateBtnAction(ActionEvent event) {
|
void updateBtnAction(ActionEvent event) {
|
||||||
updateController = new UpdateController(this, buildNumber);
|
updateController = new UpdateController(this, buildNumber, useBeta);
|
||||||
Thread updateThread = new Thread(updateController);
|
Thread updateThread = new Thread(updateController);
|
||||||
updateThread.setName("Updater");
|
updateThread.setName("Updater");
|
||||||
updateThread.start();
|
updateThread.start();
|
||||||
|
@ -1310,7 +1337,7 @@ public class MainWindowController {
|
||||||
if(isAutoUpdate()){
|
if(isAutoUpdate()){
|
||||||
try {
|
try {
|
||||||
LOGGER.info("AutoUpdate: looking for updates on startup ...");
|
LOGGER.info("AutoUpdate: looking for updates on startup ...");
|
||||||
updateController = new UpdateController(this, buildNumber);
|
updateController = new UpdateController(this, buildNumber, useBeta);
|
||||||
Thread updateThread = new Thread(updateController);
|
Thread updateThread = new Thread(updateController);
|
||||||
updateThread.setName("Updater");
|
updateThread.setName("Updater");
|
||||||
updateThread.start();
|
updateThread.start();
|
||||||
|
@ -1547,6 +1574,7 @@ public class MainWindowController {
|
||||||
props.setProperty("fullscreen", String.valueOf(isFullscreen()));
|
props.setProperty("fullscreen", String.valueOf(isFullscreen()));
|
||||||
props.setProperty("cloudSync", String.valueOf(isCloudSync()));
|
props.setProperty("cloudSync", String.valueOf(isCloudSync()));
|
||||||
props.setProperty("autoUpdate", String.valueOf(isAutoUpdate()));
|
props.setProperty("autoUpdate", String.valueOf(isAutoUpdate()));
|
||||||
|
props.setProperty("useBeta", String.valueOf(isUseBeta()));
|
||||||
if (getCloudService() == null) {
|
if (getCloudService() == null) {
|
||||||
props.setProperty("cloudService", "");
|
props.setProperty("cloudService", "");
|
||||||
} else {
|
} else {
|
||||||
|
@ -1624,7 +1652,13 @@ public class MainWindowController {
|
||||||
LOGGER.error("cloud not load autoUpdate", e);
|
LOGGER.error("cloud not load autoUpdate", e);
|
||||||
setAutoUpdate(false);
|
setAutoUpdate(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
setUseBeta(Boolean.parseBoolean(props.getProperty("useBeta")));
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOGGER.error("cloud not load autoUpdate", e);
|
||||||
|
setUseBeta(false);
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
setCloudService(props.getProperty("cloudService"));
|
setCloudService(props.getProperty("cloudService"));
|
||||||
|
@ -1844,6 +1878,14 @@ public class MainWindowController {
|
||||||
this.autoUpdate = autoUpdate;
|
this.autoUpdate = autoUpdate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isUseBeta() {
|
||||||
|
return useBeta;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUseBeta(boolean useBeta) {
|
||||||
|
this.useBeta = useBeta;
|
||||||
|
}
|
||||||
|
|
||||||
public String getGameExecutePath() {
|
public String getGameExecutePath() {
|
||||||
return gameExecutePath;
|
return gameExecutePath;
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,7 +38,7 @@ import datatypes.SmmdbApiDataType;
|
||||||
|
|
||||||
public class SmmdbApiQuery {
|
public class SmmdbApiQuery {
|
||||||
|
|
||||||
private String URL = "http://smmdb.ddns.net/api/getcourses?format=json";
|
private String URL = "https://smmdb.ddns.net/api/getcourses?format=json";
|
||||||
private static final Logger LOGGER = LogManager.getLogger(SmmdbApiQuery.class.getName());
|
private static final Logger LOGGER = LogManager.getLogger(SmmdbApiQuery.class.getName());
|
||||||
|
|
||||||
public SmmdbApiQuery() {
|
public SmmdbApiQuery() {
|
||||||
|
|
|
@ -48,16 +48,20 @@ public class UpdateController implements Runnable{
|
||||||
private String apiOutput;
|
private String apiOutput;
|
||||||
private String updateBuildNumber; //tag_name from Github
|
private String updateBuildNumber; //tag_name from Github
|
||||||
private String browserDownloadUrl; //update download link
|
private String browserDownloadUrl; //update download link
|
||||||
private String githubApi = "https://api.github.com/repos/Seil0/cemu_UI/releases/latest";
|
private String githubApiRelease = "https://api.github.com/repos/Seil0/cemu_UI/releases/latest";
|
||||||
|
private String githubApiBeta = "https://api.github.com/repos/Seil0/cemu_UI/releases";
|
||||||
|
private URL githubApiUrl;
|
||||||
|
private boolean useBeta;
|
||||||
private static final Logger LOGGER = LogManager.getLogger(UpdateController.class.getName());
|
private static final Logger LOGGER = LogManager.getLogger(UpdateController.class.getName());
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* updater for cemu_UI based on Project HomeFlix
|
* updater for cemu_UI based on Project HomeFlix
|
||||||
* checks for Updates and download it in case there is one
|
* checks for Updates and download it in case there is one
|
||||||
*/
|
*/
|
||||||
public UpdateController(MainWindowController mwc, String buildNumber){
|
public UpdateController(MainWindowController mwc, String buildNumber, boolean useBeta){
|
||||||
mainWindowController=mwc;
|
mainWindowController = mwc;
|
||||||
this.buildNumber=buildNumber;
|
this.buildNumber = buildNumber;
|
||||||
|
this.useBeta = useBeta;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void run(){
|
public void run(){
|
||||||
|
@ -67,7 +71,14 @@ public class UpdateController implements Runnable{
|
||||||
});
|
});
|
||||||
|
|
||||||
try {
|
try {
|
||||||
URL githubApiUrl = new URL(githubApi);
|
|
||||||
|
if (useBeta) {
|
||||||
|
githubApiUrl = new URL(githubApiBeta);
|
||||||
|
} else {
|
||||||
|
githubApiUrl = new URL(githubApiRelease);
|
||||||
|
}
|
||||||
|
|
||||||
|
// URL githubApiUrl = new URL(githubApiRelease);
|
||||||
BufferedReader ina = new BufferedReader(new InputStreamReader(githubApiUrl.openStream()));
|
BufferedReader ina = new BufferedReader(new InputStreamReader(githubApiUrl.openStream()));
|
||||||
apiOutput = ina.readLine();
|
apiOutput = ina.readLine();
|
||||||
ina.close();
|
ina.close();
|
||||||
|
@ -77,16 +88,32 @@ public class UpdateController implements Runnable{
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonObject object = Json.parse(apiOutput).asObject();
|
if (useBeta) {
|
||||||
JsonArray objectAssets = Json.parse(apiOutput).asObject().get("assets").asArray();
|
JsonArray objectArray = Json.parse("{\"items\": " + apiOutput + "}").asObject().get("items").asArray();
|
||||||
|
JsonValue object = objectArray.get(0);
|
||||||
updateBuildNumber = object.getString("tag_name", "");
|
JsonArray objectAssets = object.asObject().get("assets").asArray();
|
||||||
// updateName = object.getString("name", "");
|
|
||||||
// updateChanges = object.getString("body", "");
|
updateBuildNumber = object.asObject().getString("tag_name", "");
|
||||||
for (JsonValue asset : objectAssets) {
|
// updateName = object.asObject().getString("name", "");
|
||||||
browserDownloadUrl = asset.asObject().getString("browser_download_url", "");
|
// updateChanges = object.asObject().getString("body", "");
|
||||||
|
|
||||||
}
|
for (JsonValue asset : objectAssets) {
|
||||||
|
browserDownloadUrl = asset.asObject().getString("browser_download_url", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
JsonObject object = Json.parse(apiOutput).asObject();
|
||||||
|
JsonArray objectAssets = Json.parse(apiOutput).asObject().get("assets").asArray();
|
||||||
|
|
||||||
|
updateBuildNumber = object.getString("tag_name", "");
|
||||||
|
// updateName = object.getString("name", "");
|
||||||
|
// updateChanges = object.getString("body", "");
|
||||||
|
for (JsonValue asset : objectAssets) {
|
||||||
|
browserDownloadUrl = asset.asObject().getString("browser_download_url", "");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
LOGGER.info("Build: "+buildNumber+", Update: "+updateBuildNumber);
|
LOGGER.info("Build: "+buildNumber+", Update: "+updateBuildNumber);
|
||||||
|
|
||||||
//Compares the program BuildNumber with the current BuildNumber if program BuildNumber < current BuildNumber then perform a update
|
//Compares the program BuildNumber with the current BuildNumber if program BuildNumber < current BuildNumber then perform a update
|
||||||
|
|
Loading…
Reference in New Issue