|  |  |  | @ -45,18 +45,17 @@ import kellerkinder.HomeFlix.application.MainWindowController; | 
		
	
		
			
				|  |  |  |  | public class UpdateController implements Runnable { | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	private MainWindowController mainWindowController; | 
		
	
		
			
				|  |  |  |  | 	private String buildNumber; | 
		
	
		
			
				|  |  |  |  | 	private int buildNumber; | 
		
	
		
			
				|  |  |  |  | 	private int updateBuildNumber; // tag_name from gitea | 
		
	
		
			
				|  |  |  |  | 	private String apiOutput; | 
		
	
		
			
				|  |  |  |  | 	private String updateBuildNumber; // tag_name from Github | 
		
	
		
			
				|  |  |  |  | 	@SuppressWarnings("unused") | 
		
	
		
			
				|  |  |  |  | 	private String updateName; | 
		
	
		
			
				|  |  |  |  | 	@SuppressWarnings("unused") | 
		
	
		
			
				|  |  |  |  | 	private String updateChanges; | 
		
	
		
			
				|  |  |  |  | 	private String browserDownloadUrl; // update download link | 
		
	
		
			
				|  |  |  |  | 	private String githubApiRelease = "https://api.github.com/repos/Seil0/Project-HomeFlix/releases/latest"; | 
		
	
		
			
				|  |  |  |  | 	private String githubApiBeta = "https://api.github.com/repos/Seil0/Project-HomeFlix/releases"; | 
		
	
		
			
				|  |  |  |  | 	private String browserDownloadUrl; // update download link	 | 
		
	
		
			
				|  |  |  |  | 	private String giteaApiRelease = "https://git.mosad.xyz/api/v1/repos/Seil0/Project-HomeFlix/releases"; | 
		
	
		
			
				|  |  |  |  | 	private URL giteaApiUrl; | 
		
	
		
			
				|  |  |  |  | 	 | 
		
	
		
			
				|  |  |  |  | 	private URL githubApiUrl; | 
		
	
		
			
				|  |  |  |  | 	private boolean useBeta; | 
		
	
		
			
				|  |  |  |  | 	private static final Logger LOGGER = LogManager.getLogger(UpdateController.class.getName()); | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @ -68,7 +67,7 @@ public class UpdateController implements Runnable { | 
		
	
		
			
				|  |  |  |  | 	 */ | 
		
	
		
			
				|  |  |  |  | 	public UpdateController(MainWindowController mwc, String buildNumber, boolean useBeta) { | 
		
	
		
			
				|  |  |  |  | 		mainWindowController = mwc; | 
		
	
		
			
				|  |  |  |  | 		this.buildNumber = buildNumber; | 
		
	
		
			
				|  |  |  |  | 		this.buildNumber = Integer.parseInt(buildNumber); | 
		
	
		
			
				|  |  |  |  | 		this.useBeta = useBeta; | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  | 	 | 
		
	
	
		
			
				
					
					|  |  |  | @ -80,57 +79,41 @@ public class UpdateController implements Runnable { | 
		
	
		
			
				|  |  |  |  | 		}); | 
		
	
		
			
				|  |  |  |  | 		 | 
		
	
		
			
				|  |  |  |  | 		try { | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 			if (useBeta) { | 
		
	
		
			
				|  |  |  |  | 				githubApiUrl = new URL(githubApiBeta); | 
		
	
		
			
				|  |  |  |  | 			} else { | 
		
	
		
			
				|  |  |  |  | 				githubApiUrl = new URL(githubApiRelease); | 
		
	
		
			
				|  |  |  |  | 			} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 			// URL githubApiUrl = new URL(githubApiRelease); | 
		
	
		
			
				|  |  |  |  | 			BufferedReader ina = new BufferedReader(new InputStreamReader(githubApiUrl.openStream())); | 
		
	
		
			
				|  |  |  |  | 			giteaApiUrl = new URL(giteaApiRelease); | 
		
	
		
			
				|  |  |  |  | 			 | 
		
	
		
			
				|  |  |  |  | 			BufferedReader ina = new BufferedReader(new InputStreamReader(giteaApiUrl.openStream())); | 
		
	
		
			
				|  |  |  |  | 			apiOutput = ina.readLine(); | 
		
	
		
			
				|  |  |  |  | 			ina.close(); | 
		
	
		
			
				|  |  |  |  | 		} catch (IOException e) { | 
		
	
		
			
				|  |  |  |  | 		} catch (Exception e) { | 
		
	
		
			
				|  |  |  |  | 			Platform.runLater(() -> { | 
		
	
		
			
				|  |  |  |  | 				LOGGER.error("could not check update version", e); | 
		
	
		
			
				|  |  |  |  | 			}); | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
		
			
				|  |  |  |  | 		 | 
		
	
		
			
				|  |  |  |  | 		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", ""); | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 		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) == useBeta) { | 
		
	
		
			
				|  |  |  |  | 				// 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: " + buildNumber + ", Update: " + updateBuildNumber); | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 		// Compares the program BuildNumber with the current BuildNumber if program | 
		
	
		
			
				|  |  |  |  | 		// BuildNumber < current BuildNumber then perform a update | 
		
	
		
			
				|  |  |  |  | 		int iversion = Integer.parseInt(buildNumber); | 
		
	
		
			
				|  |  |  |  | 		int iaktVersion = Integer.parseInt(updateBuildNumber.replace(".", "")); | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 		if (iversion >= iaktVersion) { | 
		
	
		
			
				|  |  |  |  | 		 | 
		
	
		
			
				|  |  |  |  | 		/** | 
		
	
		
			
				|  |  |  |  | 		 * Compare the program BuildNumber with the current BuildNumber | 
		
	
		
			
				|  |  |  |  | 		 * if buildNumber < updateBuildNumber then perform a update | 
		
	
		
			
				|  |  |  |  | 		 */ | 
		
	
		
			
				|  |  |  |  | 		if (buildNumber >= updateBuildNumber) { | 
		
	
		
			
				|  |  |  |  | 			Platform.runLater(() -> { | 
		
	
		
			
				|  |  |  |  | 				mainWindowController.getUpdateBtn().setText(mainWindowController.getBundle().getString("updateBtnNoUpdateAvailable")); | 
		
	
		
			
				|  |  |  |  | 			}); | 
		
	
	
		
			
				
					
					|  |  |  | @ -140,9 +123,11 @@ public class UpdateController implements Runnable { | 
		
	
		
			
				|  |  |  |  | 				mainWindowController.getUpdateBtn().setText(mainWindowController.getBundle().getString("updateBtnUpdateAvailable")); | 
		
	
		
			
				|  |  |  |  | 			}); | 
		
	
		
			
				|  |  |  |  | 			LOGGER.info("update available"); | 
		
	
		
			
				|  |  |  |  | 			browserDownloadUrl = objectAsset.getString("browser_download_url", ""); | 
		
	
		
			
				|  |  |  |  | 			LOGGER.info("download link: " + browserDownloadUrl); | 
		
	
		
			
				|  |  |  |  | 			try { | 
		
	
		
			
				|  |  |  |  | 				// open new Http connection, ProgressMonitorInputStream for downloading the data | 
		
	
		
			
				|  |  |  |  | 				// open new HTTP connection, ProgressMonitorInputStream for downloading the data | 
		
	
		
			
				|  |  |  |  | 				// FIXME the download progress dialog is not showing! | 
		
	
		
			
				|  |  |  |  | 				HttpURLConnection connection = (HttpURLConnection) new URL(browserDownloadUrl).openConnection(); | 
		
	
		
			
				|  |  |  |  | 				ProgressMonitorInputStream pmis = new ProgressMonitorInputStream(null, "Downloading...", connection.getInputStream()); | 
		
	
		
			
				|  |  |  |  | 				ProgressMonitor pm = pmis.getProgressMonitor(); | 
		
	
	
		
			
				
					
					|  |  |  | @ -151,6 +136,7 @@ public class UpdateController implements Runnable { | 
		
	
		
			
				|  |  |  |  | 				pm.setMinimum(0);// set beginning of the progress bar to 0 | 
		
	
		
			
				|  |  |  |  | 				pm.setMaximum(connection.getContentLength());// set the end to the file length | 
		
	
		
			
				|  |  |  |  | 				FileUtils.copyInputStreamToFile(pmis, new File("ProjectHomeFlix_update.jar")); // download update | 
		
	
		
			
				|  |  |  |  | 				LOGGER.info("update download successful, restarting ..."); | 
		
	
		
			
				|  |  |  |  | 				org.apache.commons.io.FileUtils.copyFile(new File("ProjectHomeFlix_update.jar"), new File("ProjectHomeFlix.jar")); | 
		
	
		
			
				|  |  |  |  | 				org.apache.commons.io.FileUtils.deleteQuietly(new File("ProjectHomeFlix_update.jar")); // delete update | 
		
	
		
			
				|  |  |  |  | 				new ProcessBuilder("java", "-jar", "ProjectHomeFlix.jar").start(); // start the new application | 
		
	
	
		
			
				
					
					|  |  |  | @ -161,7 +147,6 @@ public class UpdateController implements Runnable { | 
		
	
		
			
				|  |  |  |  | 				}); | 
		
	
		
			
				|  |  |  |  | 			} | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | } | 
		
	
	
		
			
				
					
					| 
							
							
							
						 |  |  | 
 |