2016-12-01 18:24:58 +01:00
/ * *
* updater for Project HomeFlix
* checks for Updates and downloads it in case there is one
* /
package application ;
import java.io.BufferedReader ;
2017-04-25 23:35:20 +02:00
import java.io.File ;
2016-12-01 18:24:58 +01:00
import java.io.IOException ;
import java.io.InputStreamReader ;
2017-04-25 23:35:20 +02:00
import java.net.HttpURLConnection ;
2016-12-01 18:24:58 +01:00
import java.net.URL ;
2017-04-25 23:35:20 +02:00
import javax.swing.ProgressMonitor ;
import javax.swing.ProgressMonitorInputStream ;
import org.apache.commons.io.FileUtils ;
2016-12-01 18:24:58 +01:00
2017-03-25 16:20:48 +01:00
import javafx.application.Platform ;
2017-03-05 18:29:24 +01:00
public class updater extends Thread {
2016-12-01 18:24:58 +01:00
2017-03-05 18:29:24 +01:00
private MainWindowController mainWindowController ;
private String buildURL ;
private String downloadLink ;
2017-03-25 16:20:48 +01:00
private String updateBuildNumber ;
2017-03-05 18:29:24 +01:00
private String buildNumber ;
2017-03-25 16:20:48 +01:00
public updater ( MainWindowController m , String buildURL , String downloadLink , String buildNumber ) {
2016-12-01 18:24:58 +01:00
mainWindowController = m ;
2017-03-05 18:29:24 +01:00
this . buildURL = buildURL ;
this . downloadLink = downloadLink ;
this . buildNumber = buildNumber ;
2016-12-01 18:24:58 +01:00
}
2017-03-05 18:29:24 +01:00
public void run ( ) {
2016-12-01 18:24:58 +01:00
System . out . println ( " check for updates ... " ) ;
2017-03-25 16:20:48 +01:00
Platform . runLater ( ( ) - > {
mainWindowController . updateBtn . setText ( mainWindowController . bundle . getString ( " checkingUpdates " ) ) ;
} ) ;
2016-12-01 18:24:58 +01:00
try {
2017-03-25 16:20:48 +01:00
URL url = new URL ( buildURL ) ; //URL of the text file with the current build number
2016-12-01 18:24:58 +01:00
BufferedReader in = new BufferedReader ( new InputStreamReader ( url . openStream ( ) ) ) ;
2017-03-25 16:20:48 +01:00
updateBuildNumber = in . readLine ( ) ; //write InputStream in String
2016-12-01 18:24:58 +01:00
in . close ( ) ;
} catch ( IOException e1 ) {
mainWindowController . showErrorMsg ( mainWindowController . errorUpdateV , e1 ) ;
}
2017-03-25 16:20:48 +01:00
System . out . println ( " Build: " + buildNumber + " , Update: " + updateBuildNumber ) ;
2016-12-01 18:24:58 +01:00
2017-03-25 16:20:48 +01:00
//Compares the program BuildNumber with the current BuildNumber if program BuildNumber < current BuildNumber then perform a update
2016-12-01 18:24:58 +01:00
int iversion = Integer . parseInt ( buildNumber ) ;
2017-03-25 16:20:48 +01:00
int iaktVersion = Integer . parseInt ( updateBuildNumber . replace ( " . " , " " ) ) ;
2016-12-01 18:24:58 +01:00
if ( iversion > = iaktVersion ) {
2017-03-25 16:20:48 +01:00
Platform . runLater ( ( ) - > {
mainWindowController . updateBtn . setText ( mainWindowController . bundle . getString ( " updateBtnNotavail " ) ) ;
} ) ;
2016-12-01 18:24:58 +01:00
System . out . println ( " no update available " ) ;
} else {
2017-03-25 16:20:48 +01:00
Platform . runLater ( ( ) - > {
mainWindowController . updateBtn . setText ( mainWindowController . bundle . getString ( " updateBtnavail " ) ) ;
} ) ;
2016-12-01 18:24:58 +01:00
System . out . println ( " update available " ) ;
2017-03-05 18:29:24 +01:00
try {
2017-04-25 23:35:20 +02:00
//get the download-Data URL
2017-03-05 18:29:24 +01:00
URL downloadURL = new URL ( downloadLink ) ;
BufferedReader in = new BufferedReader ( new InputStreamReader ( downloadURL . openStream ( ) ) ) ;
String updateDataURL = in . readLine ( ) ;
2017-04-25 23:35:20 +02:00
//open new Http connection, ProgressMonitorInputStream for downloading the data
HttpURLConnection conn = ( HttpURLConnection ) new URL ( updateDataURL ) . openConnection ( ) ;
ProgressMonitorInputStream pmis = new ProgressMonitorInputStream ( null , " Downloading... " , conn . getInputStream ( ) ) ;
ProgressMonitor pm = pmis . getProgressMonitor ( ) ;
pm . setMillisToDecideToPopup ( 0 ) ;
pm . setMillisToPopup ( 0 ) ;
pm . setMinimum ( 0 ) ; // tell the progress bar that we start at the beginning of the stream
pm . setMaximum ( conn . getContentLength ( ) ) ; // tell the progress bar the total number of bytes we are going to read.
2017-04-30 23:17:55 +02:00
FileUtils . copyInputStreamToFile ( pmis , new File ( " ProjectHomeFlix.jar " ) ) ;
2017-04-25 23:35:20 +02:00
2017-03-05 18:29:24 +01:00
Runtime . getRuntime ( ) . exec ( " java -jar ProjectHomeFlix.jar " ) ; //start again
System . exit ( 0 ) ; //finishes itself
} catch ( IOException e ) {
//in case there is an error
mainWindowController . showErrorMsg ( mainWindowController . errorUpdateD , e ) ;
}
2016-12-01 18:24:58 +01:00
}
}
}