From b933938f1bee072fb87892d6a90f7e8c559e2ef6 Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Fri, 24 Apr 2020 14:13:46 +0800 Subject: [PATCH] alt: show better prompt in game launching. --- .../jackhuang/hmcl/game/LauncherHelper.java | 21 +++++++++++++++---- .../UpdateInstallerWizardProvider.java | 9 ++++---- .../jackhuang/hmcl/ui/versions/GameList.java | 14 ++++++------- 3 files changed, 28 insertions(+), 16 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java index 69a144600..fa78440e8 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java @@ -37,10 +37,7 @@ import org.jackhuang.hmcl.mod.server.ServerModpackCompletionTask; import org.jackhuang.hmcl.setting.LauncherVisibility; import org.jackhuang.hmcl.setting.Profile; import org.jackhuang.hmcl.setting.VersionSetting; -import org.jackhuang.hmcl.task.Schedulers; -import org.jackhuang.hmcl.task.Task; -import org.jackhuang.hmcl.task.TaskExecutor; -import org.jackhuang.hmcl.task.TaskListener; +import org.jackhuang.hmcl.task.*; import org.jackhuang.hmcl.ui.Controllers; import org.jackhuang.hmcl.ui.DialogController; import org.jackhuang.hmcl.ui.LogWindow; @@ -49,6 +46,7 @@ import org.jackhuang.hmcl.ui.construct.MessageDialogPane.MessageType; import org.jackhuang.hmcl.ui.construct.TaskExecutorDialogPane; import org.jackhuang.hmcl.util.*; import org.jackhuang.hmcl.util.gson.UUIDTypeAdapter; +import org.jackhuang.hmcl.util.i18n.I18n; import org.jackhuang.hmcl.util.io.ResponseCodeException; import org.jackhuang.hmcl.util.platform.CommandBuilder; import org.jackhuang.hmcl.util.platform.JavaVersion; @@ -59,6 +57,7 @@ import org.jackhuang.hmcl.util.versioning.VersionNumber; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; +import java.net.SocketTimeoutException; import java.net.URL; import java.util.*; import java.util.concurrent.ConcurrentLinkedQueue; @@ -241,6 +240,20 @@ public final class LauncherHelper { } else { message += StringUtils.getStackTrace(ex.getCause()); } + } else if (ex instanceof DownloadException) { + URL url = ((DownloadException) ex).getUrl(); + if (ex.getCause() instanceof SocketTimeoutException) { + message = i18n("install.failed.downloading.timeout", url); + } else if (ex.getCause() instanceof ResponseCodeException) { + ResponseCodeException responseCodeException = (ResponseCodeException) ex.getCause(); + if (I18n.hasKey("download.code." + responseCodeException.getResponseCode())) { + message = i18n("download.code." + responseCodeException.getResponseCode(), url); + } else { + message = i18n("install.failed.downloading.detail", url) + "\n" + StringUtils.getStackTrace(ex.getCause()); + } + } else { + message = i18n("install.failed.downloading.detail", url) + "\n" + StringUtils.getStackTrace(ex.getCause()); + } } else if (ex instanceof GameAssetIndexDownloadTask.GameAssetIndexMalformedException) { message = i18n("assets.index.malformed"); } else if (ex instanceof AuthlibInjectorDownloadException) { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/UpdateInstallerWizardProvider.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/UpdateInstallerWizardProvider.java index c019777a8..8ec6b5da8 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/UpdateInstallerWizardProvider.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/UpdateInstallerWizardProvider.java @@ -147,17 +147,18 @@ public final class UpdateInstallerWizardProvider implements WizardProvider { } Controllers.dialog(message, i18n("install.failed.downloading"), MessageDialogPane.MessageType.ERROR, next); } else if (exception instanceof DownloadException) { + URL url = ((DownloadException) exception).getUrl(); if (exception.getCause() instanceof SocketTimeoutException) { - Controllers.dialog(i18n("install.failed.downloading.timeout", ((DownloadException) exception).getUrl()), i18n("install.failed.downloading"), MessageDialogPane.MessageType.ERROR, next); + Controllers.dialog(i18n("install.failed.downloading.timeout", url), i18n("install.failed.downloading"), MessageDialogPane.MessageType.ERROR, next); } else if (exception.getCause() instanceof ResponseCodeException) { ResponseCodeException responseCodeException = (ResponseCodeException) exception.getCause(); if (I18n.hasKey("download.code." + responseCodeException.getResponseCode())) { - Controllers.dialog(i18n("download.code." + responseCodeException.getResponseCode(), ((DownloadException) exception).getUrl()), i18n("install.failed.downloading"), MessageDialogPane.MessageType.ERROR, next); + Controllers.dialog(i18n("download.code." + responseCodeException.getResponseCode(), url), i18n("install.failed.downloading"), MessageDialogPane.MessageType.ERROR, next); } else { - Controllers.dialog(i18n("install.failed.downloading.detail", ((DownloadException) exception).getUrl()) + "\n" + StringUtils.getStackTrace(exception.getCause()), i18n("install.failed.downloading"), MessageDialogPane.MessageType.ERROR, next); + Controllers.dialog(i18n("install.failed.downloading.detail", url) + "\n" + StringUtils.getStackTrace(exception.getCause()), i18n("install.failed.downloading"), MessageDialogPane.MessageType.ERROR, next); } } else { - Controllers.dialog(i18n("install.failed.downloading.detail", ((DownloadException) exception).getUrl()) + "\n" + StringUtils.getStackTrace(exception.getCause()), i18n("install.failed.downloading"), MessageDialogPane.MessageType.ERROR, next); + Controllers.dialog(i18n("install.failed.downloading.detail", url) + "\n" + StringUtils.getStackTrace(exception.getCause()), i18n("install.failed.downloading"), MessageDialogPane.MessageType.ERROR, next); } } else if (exception instanceof OptiFineInstallTask.UnsupportedOptiFineInstallationException || exception instanceof FabricInstallTask.UnsupportedFabricInstallationException) { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/GameList.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/GameList.java index 226d51367..4064b85cf 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/GameList.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/GameList.java @@ -17,7 +17,6 @@ */ package org.jackhuang.hmcl.ui.versions; -import javafx.application.Platform; import javafx.beans.property.ReadOnlyObjectProperty; import javafx.beans.property.ReadOnlyObjectWrapper; import javafx.scene.Node; @@ -30,7 +29,6 @@ import org.jackhuang.hmcl.game.Version; import org.jackhuang.hmcl.setting.Profile; import org.jackhuang.hmcl.setting.Profiles; import org.jackhuang.hmcl.ui.*; -import org.jackhuang.hmcl.ui.construct.Navigator; import org.jackhuang.hmcl.ui.decorator.DecoratorPage; import org.jackhuang.hmcl.ui.download.ModpackInstallWizardProvider; import org.jackhuang.hmcl.ui.download.VanillaInstallWizardProvider; @@ -98,21 +96,21 @@ public class GameList extends ListPageBase implements DecoratorPag return new GameListSkin(); } - void addNewGame() { + public static void addNewGame() { Profile profile = Profiles.getSelectedProfile(); if (profile.getRepository().isLoaded()) { Controllers.getDecorator().startWizard(new VanillaInstallWizardProvider(profile), i18n("install.new_game")); } } - void importModpack() { + public static void importModpack() { Profile profile = Profiles.getSelectedProfile(); if (profile.getRepository().isLoaded()) { Controllers.getDecorator().startWizard(new ModpackInstallWizardProvider(profile), i18n("install.modpack")); } } - public void refresh() { + public static void refreshList() { Profiles.getSelectedProfile().getRepository().refreshVersionsAsync().start(); } @@ -131,9 +129,9 @@ public class GameList extends ListPageBase implements DecoratorPag super(GameList.this); HBox hbox = new HBox( - createToolbarButton(i18n("install.new_game"), SVG::plus, GameList.this::addNewGame), - createToolbarButton(i18n("install.modpack"), SVG::importIcon, GameList.this::importModpack), - createToolbarButton(i18n("button.refresh"), SVG::refresh, GameList.this::refresh), + createToolbarButton(i18n("install.new_game"), SVG::plus, GameList::addNewGame), + createToolbarButton(i18n("install.modpack"), SVG::importIcon, GameList::importModpack), + createToolbarButton(i18n("button.refresh"), SVG::refresh, GameList::refreshList), createToolbarButton(i18n("settings.type.global.manage"), SVG::gear, GameList.this::modifyGlobalGameSettings) ); hbox.setPickOnBounds(false);