From 4737240c913fea388509fc18980ba882745ce0a9 Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Thu, 10 Oct 2019 16:46:32 +0800 Subject: [PATCH] Add: forgesvc for Curse Mod Detection fallback --- .../hmcl/mod/curse/CurseCompletionTask.java | 15 +++++++++++---- .../jackhuang/hmcl/mod/curse/CurseMetaMod.java | 13 +++++++++---- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseCompletionTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseCompletionTask.java index 69dacda6c..1f7ca4c10 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseCompletionTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseCompletionTask.java @@ -23,7 +23,8 @@ import org.jackhuang.hmcl.game.DefaultGameRepository; import org.jackhuang.hmcl.mod.ModManager; import org.jackhuang.hmcl.task.FileDownloadTask; import org.jackhuang.hmcl.task.Task; -import org.jackhuang.hmcl.util.*; +import org.jackhuang.hmcl.util.Logging; +import org.jackhuang.hmcl.util.StringUtils; import org.jackhuang.hmcl.util.gson.JsonUtils; import org.jackhuang.hmcl.util.io.FileUtils; import org.jackhuang.hmcl.util.io.NetworkUtils; @@ -124,9 +125,15 @@ public final class CurseCompletionTask extends Task { CurseMetaMod mod = JsonUtils.fromNonNullJson(result, CurseMetaMod.class); return file.withFileName(mod.getFileNameOnDisk()).withURL(mod.getDownloadURL()); } catch (IOException | JsonParseException e2) { - Logging.LOG.log(Level.WARNING, "Could not query cursemeta for deleted mods: " + file.getUrl(), e2); - notFound.set(true); - return file; + try { + String result = NetworkUtils.doGet(NetworkUtils.toURL(String.format("https://addons-ecs.forgesvc.net/api/v2/addon/%d/file/%d", file.getProjectID(), file.getFileID()))); + CurseMetaMod mod = JsonUtils.fromNonNullJson(result, CurseMetaMod.class); + return file.withFileName(mod.getFileName()).withURL(mod.getDownloadURL()); + } catch (IOException | JsonParseException e3) { + Logging.LOG.log(Level.WARNING, "Could not query cursemeta for deleted mods: " + file.getUrl(), e2); + notFound.set(true); + return file; + } } } catch (IOException ioe) { diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseMetaMod.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseMetaMod.java index 9bc2be56f..bb7880dfe 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseMetaMod.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseMetaMod.java @@ -20,18 +20,23 @@ package org.jackhuang.hmcl.mod.curse; import com.google.gson.annotations.SerializedName; import org.jackhuang.hmcl.util.Immutable; +/** + * CurseMetaMod is JSON structure for + * https://cursemeta.dries007.net/<projectID>/<fileID>.json + * https://addons-ecs.forgesvc.net/api/v2/addon/<projectID>/file/