Skip to content

Commit

Permalink
auto update Launcher
Browse files Browse the repository at this point in the history
  • Loading branch information
BetaSteward committed Nov 6, 2014
1 parent 8e8e645 commit b9f880a
Show file tree
Hide file tree
Showing 6 changed files with 144 additions and 27 deletions.
6 changes: 5 additions & 1 deletion config/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@
"XMage" : {
"version": "1.3.0.dev2014-09-13",
"location": "http://xmage.info/download/mage-bundle-1.3.0.dev2014-09-13.zip",
"images": ""
"images": "",
"Launcher" : {
"version": "0.2.0",
"location": "http://xmage.info/xmage/XMageLauncher-0.2.0.jar"
}
}
}
4 changes: 2 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

<groupId>com.xmage</groupId>
<artifactId>Launcher</artifactId>
<version>0.1.3-beta</version>
<version>0.2.0</version>
<packaging>jar</packaging>

<name>XMage Launcher</name>
Expand Down Expand Up @@ -74,7 +74,7 @@
<Built-By>XMage</Built-By>
</manifestEntries>
</archive>
<finalName>XMageLauncher</finalName>
<finalName>XMageLauncher-${project.version}</finalName>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
<executions>
Expand Down
23 changes: 22 additions & 1 deletion src/main/java/com/xmage/launcher/Utilities.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
public class Utilities {
private static final String OS_name = System.getProperty("os.name").toLowerCase();
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(Utilities.class);

public enum OS {
WIN,
NIX,
Expand Down Expand Up @@ -148,4 +148,25 @@ private static Process launchProcess(String main, String args, String path, JTex
return null;
}

public static void restart(File launcherJar) {
File installPath = Utilities.getInstallPath();
String javaBin = System.getProperty("java.home") + "/bin/java";

ArrayList<String> command = new ArrayList<String>();
command.add(javaBin);
command.add("-jar");
command.add(launcherJar.getPath());

ProcessBuilder pb = new ProcessBuilder(command);
pb.environment().putAll(System.getenv());
pb.directory(installPath);
try {
pb.start();
System.exit(0);
} catch (IOException ex) {
logger.error("Error restarting launcher", ex);
}
}


}
123 changes: 100 additions & 23 deletions src/main/java/com/xmage/launcher/XMageLauncher.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
import java.util.Locale;
import java.util.Random;
import java.util.ResourceBundle;
import java.util.concurrent.CountDownLatch;
import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JButton;
Expand Down Expand Up @@ -347,11 +346,10 @@ public void windowClosing(WindowEvent e) {
}
path = Utilities.getInstallPath();
textArea.append(messages.getString("folder") + path.getAbsolutePath() + "\n");
CountDownLatch latch = new CountDownLatch(1);
DownloadJavaTask java = new DownloadJavaTask(latch, progressBar);
DownloadXMageTask xmage = new DownloadXMageTask(latch, progressBar);
java.execute();
xmage.execute();
DownloadXMageTask xmage = new DownloadXMageTask(progressBar);
DownloadJavaTask java = new DownloadJavaTask(xmage, progressBar);
DownloadLauncherTask launcher = new DownloadLauncherTask(java, progressBar);
launcher.execute();
} catch (Exception ex) {
logger.error("Error: ", ex);
textArea.append(messages.getString("error") + ex.getMessage());
Expand Down Expand Up @@ -380,13 +378,101 @@ private void enableButtons() {
}
}

private class DownloadJavaTask extends DownloadTask {
private class DownloadLauncherTask extends DownloadTask {

private final DownloadJavaTask java;

public DownloadLauncherTask(DownloadJavaTask java, JProgressBar progressBar) {
super(progressBar);
this.java = java;
}

@Override
protected Void doInBackground() {
try {
File launcherFolder = new File(path.getAbsolutePath());
String launcherAvailableVersion = (String)config.getJSONObject("XMage").getJSONObject("Launcher").get(("version"));
String launcherInstalledVersion = Config.getVersion();
textArea.append(messages.getString("xmage.launcher.installed") + launcherInstalledVersion + "\n");
textArea.append(messages.getString("xmage.launcher.available") + launcherAvailableVersion + "\n");
removeOldLauncherFiles(launcherFolder, launcherInstalledVersion);
if (!launcherAvailableVersion.equals(launcherInstalledVersion)) {
String launcherMessage = "";
String launcherTitle = "";
textArea.append(messages.getString("xmage.launcher.new") + "\n");
launcherMessage = messages.getString("xmage.launcher.new.message");
launcherTitle = messages.getString("xmage.launcher.new");
int response = JOptionPane.showConfirmDialog(frame, "<html>" + launcherMessage + messages.getString("installNow") + "</html>", launcherTitle, JOptionPane.YES_NO_OPTION);
if (response == JOptionPane.YES_OPTION) {
String launcherRemoteLocation = (String)config.getJSONObject("XMage").getJSONObject("Launcher").get(("location"));
URL launcher = new URL(launcherRemoteLocation);
textArea.append(messages.getString("xmage.launcher.downloading") + launcher.toString() + "\n");

download(launcher, path.getAbsolutePath(), "");

File from = new File(path.getAbsolutePath() + File.separator + "xmage.dl");
textArea.append(messages.getString("xmage.launcher.installing"));
File to = new File(launcherFolder, "XMageLauncher-" + launcherAvailableVersion + ".jar");
from.renameTo(to);
textArea.append(messages.getString("done") + "\n");
progressBar.setValue(0);
JOptionPane.showMessageDialog(frame, "<html>" + messages.getString("restartMessage") + "</html>", messages.getString("restartTitle"), JOptionPane.WARNING_MESSAGE);
Utilities.restart(to);
}
}
}
catch (IOException ex) {
progressBar.setValue(0);
this.cancel(true);
logger.error("Error: ", ex);
}
catch (JSONException ex) {
progressBar.setValue(0);
this.cancel(true);
logger.error("Error: ", ex);
}
return null;
}

private final CountDownLatch latch;
private void removeOldLauncherFiles(File xmageFolder, final String launcherVersion) {
File[] files = xmageFolder.listFiles(new FilenameFilter() {
@Override
public boolean accept(final File dir, final String name) {
textArea.append(dir.getAbsolutePath() + name + "\n");
if (name.matches("XMageLauncher.*\\.jar")) {
if (name.equals("XMageLauncher-" + launcherVersion + ".jar")) {
return false;
}
textArea.append("matched\n");
return true;
}
return false;
}
} );
if (files.length > 0) {
textArea.append(messages.getString("removing") + "\n");
for (final File file : files) {
if (!file.isDirectory() && !file.delete()) {
logger.error("Can't remove " + file.getAbsolutePath());
}
}
}
}

@Override
public void done() {
java.execute();
}

}

public DownloadJavaTask(CountDownLatch latch, JProgressBar progressBar) {
private class DownloadJavaTask extends DownloadTask {

private final DownloadXMageTask xmage;

public DownloadJavaTask(DownloadXMageTask xmage, JProgressBar progressBar) {
super(progressBar);
this.latch = latch;
this.xmage = xmage;
}

@Override
Expand Down Expand Up @@ -447,7 +533,7 @@ protected Void doInBackground() {
progressBar.setValue(0);
this.cancel(true);
logger.error("Error: ", ex);
}
}
return null;
}

Expand All @@ -465,23 +551,19 @@ private void removeJavaFiles(File javaFolder) {

@Override
public void done() {
latch.countDown();
xmage.execute();
}
}

private class DownloadXMageTask extends DownloadTask {

private final CountDownLatch latch;

public DownloadXMageTask(CountDownLatch latch, JProgressBar progressBar) {
public DownloadXMageTask(JProgressBar progressBar) {
super(progressBar);
this.latch = latch;
}

@Override
protected Void doInBackground() {
try {
latch.await();
File xmageFolder = new File(path.getAbsolutePath() + File.separator + "xmage");
String xmageAvailableVersion = (String)config.getJSONObject("XMage").get(("version"));
String xmageInstalledVersion = Config.getInstalledXMageVersion();
Expand Down Expand Up @@ -537,12 +619,7 @@ protected Void doInBackground() {
progressBar.setValue(0);
this.cancel(true);
logger.error("Error: ", ex);
}
catch (InterruptedException ex) {
progressBar.setValue(0);
this.cancel(true);
logger.error("Error: ", ex);
}
}
return null;
}

Expand Down
9 changes: 9 additions & 0 deletions src/main/resources/MessagesBundle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -40,5 +40,14 @@ xmage.new = New version of XMage available
xmage.new.message = A newer version of XMage is available.<br>
xmage.downloading = Downloading XMage from
xmage.installing = Installing XMage ...
xmage.launcher.installed = XMage Launcher version installed:
xmage.launcher.available = XMage Launcher version available:
xmage.launcher.new = New version of XMage Launcher available
xmage.launcher.new.message = A newer version of XMage Launcher is available.<br>
xmage.launcher.downloading = Downloading XMage Launcher from
xmage.launcher.installing = Installing XMage Launcher ...
xmage.launcher.removing = Removing previous XMage Launcher versions ...
restartMessage = XMage Launcher has been updated and needs to be restarted.
restartTitle = Restart XMage Launcher
yes = Yes
no = No
6 changes: 6 additions & 0 deletions src/main/resources/MessagesBundle_it_IT.properties
Original file line number Diff line number Diff line change
Expand Up @@ -39,5 +39,11 @@ xmage.new = Nuova versione di XMage disponibile
xmage.new.message = Una nuova versione di XMage \u00e8 disponibile.<br>
xmage.downloading = Scaricamento XMage da
xmage.installing = Installazione XMage in corso...
xmage.launcher.installed = Versione XMage Launcher installata:
xmage.launcher.available = Versione XMage Launcher disponibile:
xmage.new = Nuova versione di XMage Launcher disponibile
xmage.new.message = Una nuova versione di XMage Launcher \u00e8 disponibile.<br>
xmage.downloading = Scaricamento XMage Launcher da
xmage.installing = Installazione XMage Launcher in corso...
yes = S\u00ec
no = No

0 comments on commit b9f880a

Please sign in to comment.