diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/Main.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/Main.java index fbe1709cd..0e3e52dc2 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/Main.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/Main.java @@ -161,7 +161,10 @@ public final class Main implements Runnable { } 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())) { HMCLog.log("Initializing customized proxy"); diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/LauncherSettingsPanel.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/LauncherSettingsPanel.java index 554ca9b66..11c8c034c 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/LauncherSettingsPanel.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/LauncherSettingsPanel.java @@ -389,8 +389,9 @@ public class LauncherSettingsPanel extends AnimatedPanel { }//GEN-LAST:event_txtBackgroundPathFocusLost private void btnCheckUpdateActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCheckUpdateActionPerformed - Settings.UPDATE_CHECKER.process(true); - Settings.UPDATE_CHECKER.checkOutdate(); + Settings.UPDATE_CHECKER.process(true) + .regDone(() -> { Settings.UPDATE_CHECKER.checkOutdate(); }) + .execute(); }//GEN-LAST:event_btnCheckUpdateActionPerformed private void cboThemeItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_cboThemeItemStateChanged diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/util/upgrade/AppDataUpgrader.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/util/upgrade/AppDataUpgrader.java index 784f64a34..a7abc9c81 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/util/upgrade/AppDataUpgrader.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/util/upgrade/AppDataUpgrader.java @@ -39,6 +39,7 @@ import java.util.zip.GZIPInputStream; import org.jackhuang.hellominecraft.util.C; import org.jackhuang.hellominecraft.util.logging.HMCLog; 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.TaskWindow; 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.Utils; 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.IOUtils; import org.jackhuang.hellominecraft.util.system.OS; +import org.jackhuang.hellominecraft.util.tasks.TaskList; /** * @@ -100,40 +103,54 @@ public class AppDataUpgrader extends IUpgrader { @Override public boolean call(Object sender, final VersionNumber number) { - ((UpdateChecker) sender).requestDownloadLink().reg(map -> { - if (MessageBox.Show(C.i18n("update.newest_version") + number.firstVer + "." + number.secondVer + "." + number.thirdVer + "\n" - + C.i18n("update.should_open_link"), - MessageBox.YES_NO_OPTION) == MessageBox.YES_OPTION) - if (map != null && map.containsKey("pack")) - try { - String hash = null; - if (map.containsKey("packsha1")) - hash = map.get("packsha1"); - if (TaskWindow.factory().append(new AppDataUpgraderTask(map.get("pack"), number.version, hash)).create()) { - new ProcessBuilder(new String[] { IOUtils.getJavaDir(), "-jar", AppDataUpgraderTask.getSelf(number.version).getAbsolutePath() }).directory(new File(".")).start(); - System.exit(0); - } - } catch (IOException ex) { - HMCLog.err("Failed to create upgrader", ex); - } - else { - String url = C.URL_PUBLISH; - if (map != null) - if (map.containsKey(OS.os().checked_name)) - 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(); + ((UpdateChecker) sender).requestDownloadLink().reg(new Consumer>() { + @Override + public void accept(Map map) { + boolean isForceUpdate = Settings.UPDATE_CHECKER.isForceUpdate(); + if (isForceUpdate || MessageBox.Show(C.i18n("update.newest_version") + + number.firstVer + "." + + number.secondVer + "." + + number.thirdVer + "\n" + + C.i18n("update.should_open_link"), MessageBox.YES_NO_OPTION) == MessageBox.YES_OPTION) + if (map != null && map.containsKey("pack")) + try { + String hash = null; + if (map.containsKey("packsha1")) { + hash = map.get("packsha1"); + } + AppDataUpgraderTask upgraderTask = new AppDataUpgraderTask(map.get("pack"), number.version, hash); + if (isForceUpdate) { + TaskList tasks = new TaskList(); + tasks.addTask(upgraderTask); + tasks.start(); + } else { + if (TaskWindow.factory().append(upgraderTask).create()) { + new ProcessBuilder(new String[] { IOUtils.getJavaDir(), "-jar", AppDataUpgraderTask.getSelf(number.version).getAbsolutePath() }).directory(new File(".")).start(); + System.exit(0); + } + } + } catch (IOException ex) { + HMCLog.err("Failed to create upgrader", ex); + } + else { + String url = C.URL_PUBLISH; + if (map != null) + if (map.containsKey(OS.os().checked_name)) + 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; } diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/IUpdateChecker.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/IUpdateChecker.java index 9a589ca0d..47c212197 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/IUpdateChecker.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/IUpdateChecker.java @@ -29,6 +29,8 @@ public interface IUpdateChecker { * */ void checkOutdate(); + + boolean isForceUpdate(); /** * Get the cached newest version number, use "process" method to diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/UpdateChecker.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/UpdateChecker.java index e440e0995..94b8a0b2c 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/UpdateChecker.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/UpdateChecker.java @@ -27,8 +27,12 @@ import java.util.Map; public final class UpdateChecker implements IUpdateChecker { public boolean OUT_DATED = false; + + public String versionString; public VersionNumber base; - public String versionString; + private VersionNumber value; + private boolean isforceUpdate = false; + public String type; private Map download_link = null; @@ -37,16 +41,18 @@ public final class UpdateChecker implements IUpdateChecker { this.type = type; } - VersionNumber value; - @Override public OverridableSwingWorker process(final boolean showMessage) { return new OverridableSwingWorker() { @Override protected void work() throws Exception { if (value == null) { - versionString = NetUtils.get("http://huangyuhui.duapp.com/info.php?type=" + type); - value = VersionNumber.check(versionString); + versionString = NetUtils.get("http://localhost:8080/version.php?type=" + type); + Map 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) { @@ -66,6 +72,11 @@ public final class UpdateChecker implements IUpdateChecker { return value; } + @Override + public boolean isForceUpdate() { + return isforceUpdate; + } + @Override public synchronized OverridableSwingWorker> requestDownloadLink() { return new OverridableSwingWorker() {