diff --git a/bin/application/MainWindow.fxml b/bin/application/MainWindow.fxml
index 5ce3d8a..4567ada 100644
--- a/bin/application/MainWindow.fxml
+++ b/bin/application/MainWindow.fxml
@@ -7,6 +7,7 @@
+
@@ -88,6 +89,8 @@
+
+
diff --git a/bin/application/MainWindowController$1.class b/bin/application/MainWindowController$1.class
index 831b770..657b563 100644
Binary files a/bin/application/MainWindowController$1.class and b/bin/application/MainWindowController$1.class differ
diff --git a/bin/application/MainWindowController$10.class b/bin/application/MainWindowController$10.class
index c31f0b5..42a7f19 100644
Binary files a/bin/application/MainWindowController$10.class and b/bin/application/MainWindowController$10.class differ
diff --git a/bin/application/MainWindowController$11.class b/bin/application/MainWindowController$11.class
index 1c7389a..95ab54e 100644
Binary files a/bin/application/MainWindowController$11.class and b/bin/application/MainWindowController$11.class differ
diff --git a/bin/application/MainWindowController$12.class b/bin/application/MainWindowController$12.class
index b69604a..50ac6b3 100644
Binary files a/bin/application/MainWindowController$12.class and b/bin/application/MainWindowController$12.class differ
diff --git a/bin/application/MainWindowController$2.class b/bin/application/MainWindowController$2.class
index 1f4287f..3fb586c 100644
Binary files a/bin/application/MainWindowController$2.class and b/bin/application/MainWindowController$2.class differ
diff --git a/bin/application/MainWindowController$3.class b/bin/application/MainWindowController$3.class
index 05b2a8a..1be9464 100644
Binary files a/bin/application/MainWindowController$3.class and b/bin/application/MainWindowController$3.class differ
diff --git a/bin/application/MainWindowController$4.class b/bin/application/MainWindowController$4.class
index 739c3f6..391eec4 100644
Binary files a/bin/application/MainWindowController$4.class and b/bin/application/MainWindowController$4.class differ
diff --git a/bin/application/MainWindowController$5.class b/bin/application/MainWindowController$5.class
index dc8e58c..d9d3d21 100644
Binary files a/bin/application/MainWindowController$5.class and b/bin/application/MainWindowController$5.class differ
diff --git a/bin/application/MainWindowController$6.class b/bin/application/MainWindowController$6.class
index b112c42..787f90d 100644
Binary files a/bin/application/MainWindowController$6.class and b/bin/application/MainWindowController$6.class differ
diff --git a/bin/application/MainWindowController$7.class b/bin/application/MainWindowController$7.class
index bdbb52f..058c406 100644
Binary files a/bin/application/MainWindowController$7.class and b/bin/application/MainWindowController$7.class differ
diff --git a/bin/application/MainWindowController$8.class b/bin/application/MainWindowController$8.class
index 2d5a480..8281739 100644
Binary files a/bin/application/MainWindowController$8.class and b/bin/application/MainWindowController$8.class differ
diff --git a/bin/application/MainWindowController$9.class b/bin/application/MainWindowController$9.class
index d3336d7..56e7b23 100644
Binary files a/bin/application/MainWindowController$9.class and b/bin/application/MainWindowController$9.class differ
diff --git a/bin/application/MainWindowController.class b/bin/application/MainWindowController.class
index dbe7700..7a69b52 100644
Binary files a/bin/application/MainWindowController.class and b/bin/application/MainWindowController.class differ
diff --git a/bin/application/SmmdbApiQuery.class b/bin/application/SmmdbApiQuery.class
index 1b41e98..fb3a921 100644
Binary files a/bin/application/SmmdbApiQuery.class and b/bin/application/SmmdbApiQuery.class differ
diff --git a/src/application/MainWindow.fxml b/src/application/MainWindow.fxml
index 5ce3d8a..4567ada 100644
--- a/src/application/MainWindow.fxml
+++ b/src/application/MainWindow.fxml
@@ -7,6 +7,7 @@
+
@@ -88,6 +89,8 @@
+
+
diff --git a/src/application/MainWindowController.java b/src/application/MainWindowController.java
index 6e82aaf..c786756 100644
--- a/src/application/MainWindowController.java
+++ b/src/application/MainWindowController.java
@@ -81,6 +81,7 @@ import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonBar.ButtonData;
import javafx.scene.control.ButtonType;
+import javafx.scene.control.ChoiceBox;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.Dialog;
import javafx.scene.control.Label;
@@ -170,6 +171,9 @@ public class MainWindowController {
@FXML
private JFXToggleButton fullscreenToggleBtn;
+
+ @FXML
+ private ChoiceBox branchChoisBox;
@FXML
private AnchorPane mainAnchorPane;
@@ -219,6 +223,9 @@ public class MainWindowController {
@FXML
private Label updateLbl;
+ @FXML
+ private Label branchLbl;
+
@FXML
private Label cemuSettingsLbl;
@@ -251,6 +258,7 @@ public class MainWindowController {
private boolean playTrue = false;
private boolean smmdbTrue = false;
private boolean autoUpdate = false;
+ private boolean useBeta = false;
private boolean fullscreen;
private boolean cloudSync;
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");
File pictureCacheWin = new File(dirWin+"/picture_cache");
File pictureCacheLinux = new File(dirLinux+"/picture_cache");
+ private ObservableList branches = FXCollections.observableArrayList("stable", "beta");
private ObservableList smmIDs = FXCollections.observableArrayList("fe31b7f2", "44fc5929"); //TODO add more IDs
private ObservableList games = FXCollections.observableArrayList();
ObservableList courses = FXCollections.observableArrayList();
@@ -328,8 +337,14 @@ public class MainWindowController {
fullscreenToggleBtn.setSelected(isFullscreen());
cloudSyncToggleBtn.setSelected(isCloudSync());
autoUpdateToggleBtn.setSelected(isAutoUpdate());
- updateBtn.setDisable(false); // TODO
- autoUpdateToggleBtn.setDisable(false); // TODO
+ branchChoisBox.setItems(branches);
+
+ if (isUseBeta()) {
+ branchChoisBox.getSelectionModel().select(1);
+ } else {
+ branchChoisBox.getSelectionModel().select(0);
+ }
+
applyColor();
//initialize courseTable
@@ -695,6 +710,18 @@ public class MainWindowController {
}
}
});
+
+ branchChoisBox.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() {
+ @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!");
}
@@ -834,7 +861,7 @@ public class MainWindowController {
@FXML
void updateBtnAction(ActionEvent event) {
- updateController = new UpdateController(this, buildNumber);
+ updateController = new UpdateController(this, buildNumber, useBeta);
Thread updateThread = new Thread(updateController);
updateThread.setName("Updater");
updateThread.start();
@@ -1310,7 +1337,7 @@ public class MainWindowController {
if(isAutoUpdate()){
try {
LOGGER.info("AutoUpdate: looking for updates on startup ...");
- updateController = new UpdateController(this, buildNumber);
+ updateController = new UpdateController(this, buildNumber, useBeta);
Thread updateThread = new Thread(updateController);
updateThread.setName("Updater");
updateThread.start();
@@ -1547,6 +1574,7 @@ public class MainWindowController {
props.setProperty("fullscreen", String.valueOf(isFullscreen()));
props.setProperty("cloudSync", String.valueOf(isCloudSync()));
props.setProperty("autoUpdate", String.valueOf(isAutoUpdate()));
+ props.setProperty("useBeta", String.valueOf(isUseBeta()));
if (getCloudService() == null) {
props.setProperty("cloudService", "");
} else {
@@ -1624,7 +1652,13 @@ public class MainWindowController {
LOGGER.error("cloud not load autoUpdate", e);
setAutoUpdate(false);
}
-
+
+ try {
+ setUseBeta(Boolean.parseBoolean(props.getProperty("useBeta")));
+ } catch (Exception e) {
+ LOGGER.error("cloud not load autoUpdate", e);
+ setUseBeta(false);
+ }
try {
setCloudService(props.getProperty("cloudService"));
@@ -1844,6 +1878,14 @@ public class MainWindowController {
this.autoUpdate = autoUpdate;
}
+ public boolean isUseBeta() {
+ return useBeta;
+ }
+
+ public void setUseBeta(boolean useBeta) {
+ this.useBeta = useBeta;
+ }
+
public String getGameExecutePath() {
return gameExecutePath;
}
diff --git a/src/application/SmmdbApiQuery.java b/src/application/SmmdbApiQuery.java
index 55cd2fb..100bafb 100644
--- a/src/application/SmmdbApiQuery.java
+++ b/src/application/SmmdbApiQuery.java
@@ -38,7 +38,7 @@ import datatypes.SmmdbApiDataType;
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());
public SmmdbApiQuery() {
diff --git a/src/application/UpdateController.java b/src/application/UpdateController.java
index 29bd8ca..2dc312b 100644
--- a/src/application/UpdateController.java
+++ b/src/application/UpdateController.java
@@ -48,16 +48,20 @@ public class UpdateController implements Runnable{
private String apiOutput;
private String updateBuildNumber; //tag_name from Github
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());
/**
* updater for cemu_UI based on Project HomeFlix
* checks for Updates and download it in case there is one
*/
- public UpdateController(MainWindowController mwc, String buildNumber){
- mainWindowController=mwc;
- this.buildNumber=buildNumber;
+ public UpdateController(MainWindowController mwc, String buildNumber, boolean useBeta){
+ mainWindowController = mwc;
+ this.buildNumber = buildNumber;
+ this.useBeta = useBeta;
}
public void run(){
@@ -67,7 +71,14 @@ public class UpdateController implements Runnable{
});
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()));
apiOutput = ina.readLine();
ina.close();
@@ -77,16 +88,32 @@ public class UpdateController implements Runnable{
});
}
- 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", "");
-
- }
+ if (useBeta) {
+ JsonArray objectArray = Json.parse("{\"items\": " + apiOutput + "}").asObject().get("items").asArray();
+ JsonValue object = objectArray.get(0);
+ JsonArray objectAssets = object.asObject().get("assets").asArray();
+
+ updateBuildNumber = object.asObject().getString("tag_name", "");
+// updateName = object.asObject().getString("name", "");
+// 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);
//Compares the program BuildNumber with the current BuildNumber if program BuildNumber < current BuildNumber then perform a update