@ -44,16 +44,16 @@ import javafx.application.Platform;
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
// private String updateName;
// private String updateChanges;
private String browserDownloadUrl ; // update download link
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 ;
@SuppressWarnings ( "unused" )
private String updateName ;
@SuppressWarnings ( "unused" )
private String updateChanges ;
private String browserDownloadUrl ; // update download link
private String giteaApiRelease = "https://git.mosad.xyz/api/v1/repos/Seil0/cemu_UI/releases" ;
private URL giteaApiUrl ;
private boolean useBeta ;
private static final Logger LOGGER = LogManager . getLogger ( UpdateController . class . getName ( ) ) ;
@ -62,7 +62,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 ;
}
@ -74,15 +74,9 @@ 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 ) {
@ -90,41 +84,32 @@ public class UpdateController implements Runnable {
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 ) {
// TODO note this will download still the pre-release if there's a more recent stable version
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" ) ) ;
} ) ;
@ -134,6 +119,7 @@ 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
@ -148,7 +134,7 @@ public class UpdateController implements Runnable {
org . apache . commons . io . FileUtils . copyFile ( new File ( "cemu_UI_update.jar" ) , new File ( "cemu_UI.jar" ) ) ;
org . apache . commons . io . FileUtils . deleteQuietly ( new File ( "cemu_UI_update.jar" ) ) ; // delete update
new ProcessBuilder ( "java" , "-jar" , "cemu_UI.jar" ) . start ( ) ; // start the new application
System . exit ( 0 ) ; // finishes itself
System . exit ( 0 ) ; // close the current application
} catch ( IOException e ) {
Platform . runLater ( ( ) - > {
LOGGER . info ( "could not download update files" , e ) ;