reworked the UpdateController
This commit is contained in:
parent
d8062513e9
commit
75a80535a7
|
@ -52,8 +52,8 @@ import javafx.collections.FXCollections;
|
|||
import javafx.collections.ObservableList;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.control.ScrollPane;
|
||||
import javafx.scene.effect.BoxBlur;
|
||||
import javafx.scene.control.ScrollPane.ScrollBarPolicy;
|
||||
import javafx.scene.effect.BoxBlur;
|
||||
import javafx.scene.input.MouseEvent;
|
||||
import javafx.scene.layout.AnchorPane;
|
||||
import javafx.scene.layout.FlowPane;
|
||||
|
@ -95,7 +95,6 @@ public class MainWindowController {
|
|||
|
||||
private static MainWindowController instance = null;
|
||||
private DBController dbController;
|
||||
private UpdateController updateController;
|
||||
private XMLController xmlController;
|
||||
private Stage primaryStage;
|
||||
private static final Logger LOGGER = LogManager.getLogger(MainWindowController.class.getName());
|
||||
|
@ -337,18 +336,10 @@ public class MainWindowController {
|
|||
|
||||
// if AutoUpdate, then check for updates
|
||||
private void checkAutoUpdate() {
|
||||
|
||||
if (XMLController.isAutoUpdate()) {
|
||||
try {
|
||||
LOGGER.info("AutoUpdate: looking for updates on startup ...");
|
||||
updateController = new UpdateController(settingsViewController); // TODO this is will crash
|
||||
Thread updateThread = new Thread(updateController);
|
||||
updateThread.setName("Updater");
|
||||
updateThread.start();
|
||||
updateThread.join();
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
if (XMLController.isAutoUpdate() && UpdateController.isUpdateAvailable()) {
|
||||
UpdateController.update();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -47,9 +47,9 @@ import javafx.fxml.FXML;
|
|||
import javafx.scene.control.ChoiceBox;
|
||||
import javafx.scene.control.Label;
|
||||
import javafx.scene.control.ScrollPane;
|
||||
import javafx.scene.control.ScrollPane.ScrollBarPolicy;
|
||||
import javafx.scene.control.TableColumn;
|
||||
import javafx.scene.control.TableView;
|
||||
import javafx.scene.control.ScrollPane.ScrollBarPolicy;
|
||||
import javafx.scene.layout.AnchorPane;
|
||||
import javafx.scene.paint.Color;
|
||||
import javafx.stage.DirectoryChooser;
|
||||
|
@ -206,9 +206,16 @@ public class SettingsView {
|
|||
|
||||
@FXML
|
||||
private void updateBtnAction(ActionEvent event) {
|
||||
Thread updateThread = new Thread(new UpdateController(this));
|
||||
updateThread.setName("Updater");
|
||||
updateThread.start();
|
||||
|
||||
|
||||
new UpdateController();
|
||||
if (UpdateController.isUpdateAvailable()) {
|
||||
updateBtn.setText(XMLController.getLocalBundle().getString("updateBtnUpdateAvailable"));
|
||||
UpdateController.update();
|
||||
} else {
|
||||
updateBtn.setText(XMLController.getLocalBundle().getString("updateBtnNoUpdateAvailable"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/** TODO can this be done async?
|
||||
|
|
|
@ -40,89 +40,32 @@ import com.eclipsesource.json.JsonArray;
|
|||
import com.eclipsesource.json.JsonObject;
|
||||
import com.eclipsesource.json.JsonValue;
|
||||
|
||||
import javafx.application.Platform;
|
||||
import kellerkinder.HomeFlix.application.Main;
|
||||
import kellerkinder.HomeFlix.application.SettingsView;
|
||||
|
||||
public class UpdateController implements Runnable {
|
||||
public class UpdateController {
|
||||
|
||||
private SettingsView settingsViewController;
|
||||
private int updateBuildNumber; // tag_name from gitea
|
||||
private String apiOutput;
|
||||
private static int updateBuildNumber; // tag_name from gitea
|
||||
@SuppressWarnings("unused")
|
||||
private String updateName;
|
||||
private static String updateName;
|
||||
@SuppressWarnings("unused")
|
||||
private String updateChanges;
|
||||
private String browserDownloadUrl; // update download link
|
||||
private String giteaApiRelease = "https://git.mosad.xyz/api/v1/repos/Seil0/Project-HomeFlix/releases";
|
||||
private URL giteaApiUrl;
|
||||
private static String updateChanges;
|
||||
private static String browserDownloadUrl; // update download link
|
||||
private static final String giteaApiRelease = "https://git.mosad.xyz/api/v1/repos/Seil0/Project-HomeFlix/releases";
|
||||
|
||||
private static final Logger LOGGER = LogManager.getLogger(UpdateController.class.getName());
|
||||
|
||||
/**
|
||||
* updater for Project HomeFlix based on cemu_UIs, checks for Updates and download it
|
||||
* @param mwc the MainWindowController object
|
||||
* @param buildNumber the buildNumber of the used HomeFlix version
|
||||
* @param useBeta if the updater should query the beta channel
|
||||
*/
|
||||
public UpdateController(SettingsView svc) {
|
||||
settingsViewController = svc;
|
||||
public UpdateController() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
LOGGER.info("beta:" + XMLController.isUseBeta() + "; checking for updates ...");
|
||||
Platform.runLater(() -> {
|
||||
settingsViewController.getUpdateBtn().setText(XMLController.getLocalBundle().getString("updateBtnChecking"));
|
||||
});
|
||||
|
||||
try {
|
||||
giteaApiUrl = new URL(giteaApiRelease);
|
||||
|
||||
BufferedReader ina = new BufferedReader(new InputStreamReader(giteaApiUrl.openStream()));
|
||||
apiOutput = ina.readLine();
|
||||
ina.close();
|
||||
} catch (Exception e) {
|
||||
Platform.runLater(() -> {
|
||||
LOGGER.error("could not check update version", e);
|
||||
});
|
||||
}
|
||||
|
||||
JsonArray objectArray = Json.parse("{\"items\": " + apiOutput + "}").asObject().get("items").asArray();
|
||||
JsonValue object = objectArray.get(0).asObject(); // set to the latest release as default
|
||||
JsonObject objectAsset = object.asObject().get("assets").asArray().get(0).asObject();
|
||||
|
||||
for(JsonValue objectIt : objectArray) {
|
||||
if(objectIt.asObject().getBoolean("prerelease", false) == XMLController.isUseBeta()) {
|
||||
// we found the needed release either beta or not
|
||||
object = objectIt;
|
||||
objectAsset = objectIt.asObject().get("assets").asArray().get(0).asObject();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
updateBuildNumber = Integer.parseInt(object.asObject().getString("tag_name", ""));
|
||||
updateName = object.asObject().getString("name", "");
|
||||
updateChanges = object.asObject().getString("body", "");
|
||||
|
||||
LOGGER.info("Build: " + Main.buildNumber + ", Update: " + updateBuildNumber);
|
||||
|
||||
/**
|
||||
* Compare the program BuildNumber with the current BuildNumber
|
||||
* if buildNumber < updateBuildNumber then perform a update
|
||||
*/
|
||||
if (Integer.parseInt(Main.buildNumber) >= updateBuildNumber) {
|
||||
Platform.runLater(() -> {
|
||||
settingsViewController.getUpdateBtn().setText(XMLController.getLocalBundle().getString("updateBtnNoUpdateAvailable"));
|
||||
});
|
||||
LOGGER.info("no update available");
|
||||
} else {
|
||||
Platform.runLater(() -> {
|
||||
settingsViewController.getUpdateBtn().setText(XMLController.getLocalBundle().getString("updateBtnUpdateAvailable"));
|
||||
});
|
||||
LOGGER.info("update available");
|
||||
browserDownloadUrl = objectAsset.getString("browser_download_url", "");
|
||||
public static void update() {
|
||||
if (browserDownloadUrl != null) {
|
||||
LOGGER.info("download link: " + browserDownloadUrl);
|
||||
|
||||
Runnable run = () -> {
|
||||
try {
|
||||
// open new HTTP connection, ProgressMonitorInputStream for downloading the data
|
||||
// FIXME the download progress dialog is not showing!
|
||||
|
@ -140,10 +83,53 @@ public class UpdateController implements Runnable {
|
|||
new ProcessBuilder("java", "-jar", "ProjectHomeFlix.jar").start(); // start the new application
|
||||
System.exit(0); // close the current application
|
||||
} catch (IOException e) {
|
||||
Platform.runLater(() -> {
|
||||
LOGGER.info("could not download update files", e);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
Thread t = new Thread(run);
|
||||
t.start();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static boolean isUpdateAvailable() {
|
||||
LOGGER.info("beta:" + XMLController.isUseBeta() + "; checking for updates ...");
|
||||
String apiOutput = "";
|
||||
|
||||
try {
|
||||
URL giteaApiUrl = new URL(giteaApiRelease);
|
||||
|
||||
BufferedReader ina = new BufferedReader(new InputStreamReader(giteaApiUrl.openStream()));
|
||||
apiOutput = ina.readLine();
|
||||
ina.close();
|
||||
} catch (Exception e) {
|
||||
LOGGER.error("could not check update version", e);
|
||||
}
|
||||
|
||||
JsonArray objectArray = Json.parse("{\"items\": " + apiOutput + "}").asObject().get("items").asArray();
|
||||
JsonValue object = objectArray.get(0).asObject(); // set to the latest release as default
|
||||
JsonObject objectAsset = object.asObject().get("assets").asArray().get(0).asObject();
|
||||
|
||||
// TODO rework stream()
|
||||
for(JsonValue objectIt : objectArray) {
|
||||
if(objectIt.asObject().getBoolean("prerelease", false) == XMLController.isUseBeta()) {
|
||||
// we found the needed release either beta or not
|
||||
object = objectIt;
|
||||
objectAsset = objectIt.asObject().get("assets").asArray().get(0).asObject();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
updateBuildNumber = Integer.parseInt(object.asObject().getString("tag_name", ""));
|
||||
updateName = object.asObject().getString("name", "");
|
||||
updateChanges = object.asObject().getString("body", "");
|
||||
browserDownloadUrl = objectAsset.getString("browser_download_url", "");
|
||||
|
||||
LOGGER.info("Build: " + Main.buildNumber + ", Update: " + updateBuildNumber);
|
||||
|
||||
return Integer.parseInt(Main.buildNumber) < updateBuildNumber;
|
||||
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue