From d5077537ba2d373ff758a83550c1f640c02efaa1 Mon Sep 17 00:00:00 2001 From: MiniDay <372403923@qq.com> Date: Mon, 18 Mar 2024 15:48:52 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=8C=E6=88=90=20gitlab=20=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E6=A3=80=E6=B5=8B=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/common/util/UpdateCheckUtils.java | 87 ++++++++++++++++--- 1 file changed, 77 insertions(+), 10 deletions(-) diff --git a/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/UpdateCheckUtils.java b/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/UpdateCheckUtils.java index 774faed..d793821 100644 --- a/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/UpdateCheckUtils.java +++ b/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/util/UpdateCheckUtils.java @@ -2,6 +2,7 @@ package cn.hamster3.mc.plugin.core.common.util; import cn.hamster3.mc.plugin.core.common.config.ConfigSection; import com.google.gson.JsonArray; +import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import org.jetbrains.annotations.NotNull; @@ -26,29 +27,52 @@ public final class UpdateCheckUtils { return; } String checkType = config.getString("CHECK_TYPE", ""); - String baseUrl = config.getString("GIT_BASE_URL"); - String gitRepo = config.getString("GIT_REPO"); - String downloadUrl = config.getString("DOWNLOAD_URL"); - if (baseUrl == null || gitRepo == null || downloadUrl == null) { - return; - } try { switch (checkType) { case "GITEA_RELEASES": { + String baseUrl = config.getString("GIT_BASE_URL"); + String gitRepo = config.getString("GIT_REPO"); + String downloadUrl = config.getString("DOWNLOAD_URL"); + if (baseUrl == null || gitRepo == null || downloadUrl == null) { + return; + } String gitToken = config.getString("GIT_TOKEN"); String lastRelease = getGiteaLastRelease(baseUrl, gitRepo, gitToken); if (lastRelease == null) { break; } + if (lastRelease.compareToIgnoreCase(version) <= 0) { + break; + } sender.sendMessage(String.format("§a插件 §l%s§a 发布了新版本 %s", pluginName, lastRelease)); sender.sendMessage(String.format("§b下载链接: §n%s", downloadUrl)); break; } - case "": { + case "GITLAB_RELEASES": { + String baseUrl = config.getString("GIT_BASE_URL"); + String gitRepo = config.getString("GIT_REPO"); + String downloadUrl = config.getString("DOWNLOAD_URL"); + if (baseUrl == null || gitRepo == null || downloadUrl == null) { + return; + } + String gitToken = config.getString("GIT_TOKEN"); + int projectID = getGitlabProjectID(baseUrl, gitRepo, gitToken); + if (projectID < 0) { + break; + } + String lastRelease = getGitlabLastRelease(baseUrl, projectID, gitToken); + if (lastRelease == null) { + break; + } + if (lastRelease.compareToIgnoreCase(version) <= 0) { + break; + } + sender.sendMessage(String.format("§a插件 §l%s§a 发布了新版本 %s", pluginName, lastRelease)); + sender.sendMessage(String.format("§b下载链接: §n%s", downloadUrl)); break; } } - } catch (IOException ignored) { + } catch (Exception ignored) { } } @@ -65,8 +89,12 @@ public final class UpdateCheckUtils { try (InputStream stream = connection.getInputStream()) { try (InputStreamReader reader = new InputStreamReader(stream, StandardCharsets.UTF_8)) { JsonArray array = JSON_PARSER.parse(reader).getAsJsonArray(); - if (array.size() >= 1) { - JsonObject object = array.get(0).getAsJsonObject(); + for (JsonElement element : array) { + JsonObject object = element.getAsJsonObject(); + //noinspection SpellCheckingInspection + if (object.get("prerelease").getAsBoolean()) { + continue; + } return object.get("name").getAsString(); } } @@ -74,6 +102,45 @@ public final class UpdateCheckUtils { return null; } + public static int getGitlabProjectID(@NotNull String baseUrl, @NotNull String repo, @Nullable String token) throws IOException { + URL url = new URL("https://" + baseUrl + "/api/v4/projects?search=" + repo); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setDoInput(true); + connection.setRequestMethod("GET"); + if (token != null) { + connection.setRequestProperty("PRIVATE-TOKEN", "token " + token); + } + connection.connect(); + try (InputStream stream = connection.getInputStream()) { + try (InputStreamReader reader = new InputStreamReader(stream, StandardCharsets.UTF_8)) { + JsonArray array = JSON_PARSER.parse(reader).getAsJsonArray(); + for (JsonElement element : array) { + JsonObject object = element.getAsJsonObject(); + return object.get("id").getAsInt(); + } + } + } + return -1; + } + + @Nullable + public static String getGitlabLastRelease(@NotNull String baseUrl, int repo, @Nullable String token) throws IOException { + URL url = new URL(baseUrl + "/api/v4/projects/" + repo + "/releases/permalink/latest"); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setDoInput(true); + connection.setRequestMethod("GET"); + if (token != null) { + connection.setRequestProperty("Authorization", "token " + token); + } + connection.connect(); + try (InputStream stream = connection.getInputStream()) { + try (InputStreamReader reader = new InputStreamReader(stream, StandardCharsets.UTF_8)) { + JsonObject object = JSON_PARSER.parse(reader).getAsJsonObject(); + return object.get("name").getAsString(); + } + } + } + public interface UpdateReceiver { void sendMessage(@NotNull String message); }