加入强制升级和升级提示

This commit is contained in:
evilwk
2016-07-03 18:33:53 +08:00
parent 27e58edb1f
commit 37ddecf629
5 changed files with 76 additions and 42 deletions

View File

@@ -161,7 +161,10 @@ public final class Main implements Runnable {
} }
Settings.UPDATE_CHECKER.outdated.register(IUpgrader.NOW_UPGRADER); Settings.UPDATE_CHECKER.outdated.register(IUpgrader.NOW_UPGRADER);
Settings.UPDATE_CHECKER.process(false).reg(t -> Main.invokeUpdate()).execute(); Settings.UPDATE_CHECKER.process(false)
.reg(t -> Main.invokeUpdate())
.regDone(() -> { Settings.UPDATE_CHECKER.checkOutdate(); })
.execute();
if (StrUtils.isNotBlank(Settings.getInstance().getProxyHost()) && StrUtils.isNotBlank(Settings.getInstance().getProxyPort()) && MathUtils.canParseInt(Settings.getInstance().getProxyPort())) { if (StrUtils.isNotBlank(Settings.getInstance().getProxyHost()) && StrUtils.isNotBlank(Settings.getInstance().getProxyPort()) && MathUtils.canParseInt(Settings.getInstance().getProxyPort())) {
HMCLog.log("Initializing customized proxy"); HMCLog.log("Initializing customized proxy");

View File

@@ -389,8 +389,9 @@ public class LauncherSettingsPanel extends AnimatedPanel {
}//GEN-LAST:event_txtBackgroundPathFocusLost }//GEN-LAST:event_txtBackgroundPathFocusLost
private void btnCheckUpdateActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCheckUpdateActionPerformed private void btnCheckUpdateActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCheckUpdateActionPerformed
Settings.UPDATE_CHECKER.process(true); Settings.UPDATE_CHECKER.process(true)
Settings.UPDATE_CHECKER.checkOutdate(); .regDone(() -> { Settings.UPDATE_CHECKER.checkOutdate(); })
.execute();
}//GEN-LAST:event_btnCheckUpdateActionPerformed }//GEN-LAST:event_btnCheckUpdateActionPerformed
private void cboThemeItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_cboThemeItemStateChanged private void cboThemeItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_cboThemeItemStateChanged

View File

@@ -39,6 +39,7 @@ import java.util.zip.GZIPInputStream;
import org.jackhuang.hellominecraft.util.C; import org.jackhuang.hellominecraft.util.C;
import org.jackhuang.hellominecraft.util.logging.HMCLog; import org.jackhuang.hellominecraft.util.logging.HMCLog;
import org.jackhuang.hellominecraft.launcher.core.MCUtils; import org.jackhuang.hellominecraft.launcher.core.MCUtils;
import org.jackhuang.hellominecraft.launcher.setting.Settings;
import org.jackhuang.hellominecraft.util.tasks.Task; import org.jackhuang.hellominecraft.util.tasks.Task;
import org.jackhuang.hellominecraft.util.tasks.TaskWindow; import org.jackhuang.hellominecraft.util.tasks.TaskWindow;
import org.jackhuang.hellominecraft.util.tasks.download.FileDownloadTask; import org.jackhuang.hellominecraft.util.tasks.download.FileDownloadTask;
@@ -47,9 +48,11 @@ import org.jackhuang.hellominecraft.util.MessageBox;
import org.jackhuang.hellominecraft.util.UpdateChecker; import org.jackhuang.hellominecraft.util.UpdateChecker;
import org.jackhuang.hellominecraft.util.Utils; import org.jackhuang.hellominecraft.util.Utils;
import org.jackhuang.hellominecraft.util.VersionNumber; import org.jackhuang.hellominecraft.util.VersionNumber;
import org.jackhuang.hellominecraft.util.func.Consumer;
import org.jackhuang.hellominecraft.util.system.FileUtils; import org.jackhuang.hellominecraft.util.system.FileUtils;
import org.jackhuang.hellominecraft.util.system.IOUtils; import org.jackhuang.hellominecraft.util.system.IOUtils;
import org.jackhuang.hellominecraft.util.system.OS; import org.jackhuang.hellominecraft.util.system.OS;
import org.jackhuang.hellominecraft.util.tasks.TaskList;
/** /**
* *
@@ -100,40 +103,54 @@ public class AppDataUpgrader extends IUpgrader {
@Override @Override
public boolean call(Object sender, final VersionNumber number) { public boolean call(Object sender, final VersionNumber number) {
((UpdateChecker) sender).requestDownloadLink().reg(map -> { ((UpdateChecker) sender).requestDownloadLink().reg(new Consumer<Map<String, String>>() {
if (MessageBox.Show(C.i18n("update.newest_version") + number.firstVer + "." + number.secondVer + "." + number.thirdVer + "\n" @Override
+ C.i18n("update.should_open_link"), public void accept(Map<String, String> map) {
MessageBox.YES_NO_OPTION) == MessageBox.YES_OPTION) boolean isForceUpdate = Settings.UPDATE_CHECKER.isForceUpdate();
if (map != null && map.containsKey("pack")) if (isForceUpdate || MessageBox.Show(C.i18n("update.newest_version") +
try { number.firstVer + "." +
String hash = null; number.secondVer + "." +
if (map.containsKey("packsha1")) number.thirdVer + "\n" +
hash = map.get("packsha1"); C.i18n("update.should_open_link"), MessageBox.YES_NO_OPTION) == MessageBox.YES_OPTION)
if (TaskWindow.factory().append(new AppDataUpgraderTask(map.get("pack"), number.version, hash)).create()) { if (map != null && map.containsKey("pack"))
new ProcessBuilder(new String[] { IOUtils.getJavaDir(), "-jar", AppDataUpgraderTask.getSelf(number.version).getAbsolutePath() }).directory(new File(".")).start(); try {
System.exit(0); String hash = null;
} if (map.containsKey("packsha1")) {
} catch (IOException ex) { hash = map.get("packsha1");
HMCLog.err("Failed to create upgrader", ex); }
} AppDataUpgraderTask upgraderTask = new AppDataUpgraderTask(map.get("pack"), number.version, hash);
else { if (isForceUpdate) {
String url = C.URL_PUBLISH; TaskList tasks = new TaskList();
if (map != null) tasks.addTask(upgraderTask);
if (map.containsKey(OS.os().checked_name)) tasks.start();
url = map.get(OS.os().checked_name); } else {
else if (map.containsKey(OS.UNKOWN.checked_name)) if (TaskWindow.factory().append(upgraderTask).create()) {
url = map.get(OS.UNKOWN.checked_name); new ProcessBuilder(new String[] { IOUtils.getJavaDir(), "-jar", AppDataUpgraderTask.getSelf(number.version).getAbsolutePath() }).directory(new File(".")).start();
if (url == null) System.exit(0);
url = C.URL_PUBLISH; }
try { }
java.awt.Desktop.getDesktop().browse(new URI(url)); } catch (IOException ex) {
} catch (URISyntaxException | IOException e) { HMCLog.err("Failed to create upgrader", ex);
HMCLog.warn("Failed to browse uri: " + url, e); }
Utils.setClipborad(url); else {
MessageBox.Show(C.i18n("update.no_browser")); String url = C.URL_PUBLISH;
} if (map != null)
} if (map.containsKey(OS.os().checked_name))
}).execute(); url = map.get(OS.os().checked_name);
else if (map.containsKey(OS.UNKOWN.checked_name))
url = map.get(OS.UNKOWN.checked_name);
if (url == null)
url = C.URL_PUBLISH;
try {
java.awt.Desktop.getDesktop().browse(new URI(url));
} catch (URISyntaxException | IOException e) {
HMCLog.warn("Failed to browse uri: " + url, e);
Utils.setClipborad(url);
MessageBox.Show(C.i18n("update.no_browser"));
}
}
}
}).execute();
return true; return true;
} }

View File

@@ -29,6 +29,8 @@ public interface IUpdateChecker {
* *
*/ */
void checkOutdate(); void checkOutdate();
boolean isForceUpdate();
/** /**
* Get the <b>cached</b> newest version number, use "process" method to * Get the <b>cached</b> newest version number, use "process" method to

View File

@@ -27,8 +27,12 @@ import java.util.Map;
public final class UpdateChecker implements IUpdateChecker { public final class UpdateChecker implements IUpdateChecker {
public boolean OUT_DATED = false; public boolean OUT_DATED = false;
public String versionString;
public VersionNumber base; public VersionNumber base;
public String versionString; private VersionNumber value;
private boolean isforceUpdate = false;
public String type; public String type;
private Map<String, String> download_link = null; private Map<String, String> download_link = null;
@@ -37,16 +41,18 @@ public final class UpdateChecker implements IUpdateChecker {
this.type = type; this.type = type;
} }
VersionNumber value;
@Override @Override
public OverridableSwingWorker<VersionNumber> process(final boolean showMessage) { public OverridableSwingWorker<VersionNumber> process(final boolean showMessage) {
return new OverridableSwingWorker() { return new OverridableSwingWorker() {
@Override @Override
protected void work() throws Exception { protected void work() throws Exception {
if (value == null) { if (value == null) {
versionString = NetUtils.get("http://huangyuhui.duapp.com/info.php?type=" + type); versionString = NetUtils.get("http://localhost:8080/version.php?type=" + type);
value = VersionNumber.check(versionString); Map<String, Object> versionInfo = C.GSON.fromJson(versionString, Map.class);
if (versionInfo.containsKey("version"))
value = VersionNumber.check((String)versionInfo.get("version"));
if (versionInfo.containsKey("force"))
isforceUpdate = (boolean)versionInfo.get("force");
} }
if (value == null) { if (value == null) {
@@ -66,6 +72,11 @@ public final class UpdateChecker implements IUpdateChecker {
return value; return value;
} }
@Override
public boolean isForceUpdate() {
return isforceUpdate;
}
@Override @Override
public synchronized OverridableSwingWorker<Map<String, String>> requestDownloadLink() { public synchronized OverridableSwingWorker<Map<String, String>> requestDownloadLink() {
return new OverridableSwingWorker() { return new OverridableSwingWorker() {