From ea9f547adaf76df2507b31a1f56e06076d3a46b2 Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Sat, 18 Sep 2021 23:26:37 +0800 Subject: [PATCH] fix: FileDownloadTask does not fail if 404. --- .../org/jackhuang/hmcl/setting/DownloadProviders.java | 3 +++ .../src/main/java/org/jackhuang/hmcl/task/FetchTask.java | 9 ++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/DownloadProviders.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/DownloadProviders.java index 8c368df9a..591af18dd 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/DownloadProviders.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/DownloadProviders.java @@ -26,6 +26,7 @@ import org.jackhuang.hmcl.util.StringUtils; import org.jackhuang.hmcl.util.i18n.I18n; import org.jackhuang.hmcl.util.io.ResponseCodeException; +import java.io.FileNotFoundException; import java.net.SocketTimeoutException; import java.net.URL; import java.util.Arrays; @@ -147,6 +148,8 @@ public final class DownloadProviders { } else { return i18n("install.failed.downloading.detail", url) + "\n" + StringUtils.getStackTrace(exception.getCause()); } + } else if (exception.getCause() instanceof FileNotFoundException) { + return i18n("download.code.404", url); } else { return i18n("install.failed.downloading.detail", url) + "\n" + StringUtils.getStackTrace(exception.getCause()); } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FetchTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FetchTask.java index eec7c982d..5e7c58622 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FetchTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FetchTask.java @@ -27,6 +27,7 @@ import org.jackhuang.hmcl.util.io.NetworkUtils; import org.jackhuang.hmcl.util.io.ResponseCodeException; import java.io.Closeable; +import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; @@ -117,7 +118,7 @@ public abstract class FetchTask extends Task { continue; } } else if (responseCode / 100 == 4) { - break; // we will not try this URL again + throw new FileNotFoundException(); } else if (responseCode / 100 != 2) { throw new ResponseCodeException(url, responseCode); } @@ -157,6 +158,12 @@ public abstract class FetchTask extends Task { } return; + } catch (FileNotFoundException ex) { + failedURL = url; + exception = ex; + Logging.LOG.log(Level.WARNING, "Failed to download " + url + ", not found", ex); + + break; // we will not try this URL again } catch (IOException ex) { failedURL = url; exception = ex;