feat: 完成 gitlab 更新检测功能
This commit is contained in:
@@ -2,6 +2,7 @@ package cn.hamster3.mc.plugin.core.common.util;
|
|||||||
|
|
||||||
import cn.hamster3.mc.plugin.core.common.config.ConfigSection;
|
import cn.hamster3.mc.plugin.core.common.config.ConfigSection;
|
||||||
import com.google.gson.JsonArray;
|
import com.google.gson.JsonArray;
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.google.gson.JsonParser;
|
import com.google.gson.JsonParser;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
@@ -26,29 +27,52 @@ public final class UpdateCheckUtils {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String checkType = config.getString("CHECK_TYPE", "");
|
String checkType = config.getString("CHECK_TYPE", "");
|
||||||
|
try {
|
||||||
|
switch (checkType) {
|
||||||
|
case "GITEA_RELEASES": {
|
||||||
String baseUrl = config.getString("GIT_BASE_URL");
|
String baseUrl = config.getString("GIT_BASE_URL");
|
||||||
String gitRepo = config.getString("GIT_REPO");
|
String gitRepo = config.getString("GIT_REPO");
|
||||||
String downloadUrl = config.getString("DOWNLOAD_URL");
|
String downloadUrl = config.getString("DOWNLOAD_URL");
|
||||||
if (baseUrl == null || gitRepo == null || downloadUrl == null) {
|
if (baseUrl == null || gitRepo == null || downloadUrl == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
|
||||||
switch (checkType) {
|
|
||||||
case "GITEA_RELEASES": {
|
|
||||||
String gitToken = config.getString("GIT_TOKEN");
|
String gitToken = config.getString("GIT_TOKEN");
|
||||||
String lastRelease = getGiteaLastRelease(baseUrl, gitRepo, gitToken);
|
String lastRelease = getGiteaLastRelease(baseUrl, gitRepo, gitToken);
|
||||||
if (lastRelease == null) {
|
if (lastRelease == null) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (lastRelease.compareToIgnoreCase(version) <= 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
sender.sendMessage(String.format("§a插件 §l%s§a 发布了新版本 %s", pluginName, lastRelease));
|
sender.sendMessage(String.format("§a插件 §l%s§a 发布了新版本 %s", pluginName, lastRelease));
|
||||||
sender.sendMessage(String.format("§b下载链接: §n%s", downloadUrl));
|
sender.sendMessage(String.format("§b下载链接: §n%s", downloadUrl));
|
||||||
break;
|
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;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (IOException ignored) {
|
} catch (Exception ignored) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -65,8 +89,12 @@ public final class UpdateCheckUtils {
|
|||||||
try (InputStream stream = connection.getInputStream()) {
|
try (InputStream stream = connection.getInputStream()) {
|
||||||
try (InputStreamReader reader = new InputStreamReader(stream, StandardCharsets.UTF_8)) {
|
try (InputStreamReader reader = new InputStreamReader(stream, StandardCharsets.UTF_8)) {
|
||||||
JsonArray array = JSON_PARSER.parse(reader).getAsJsonArray();
|
JsonArray array = JSON_PARSER.parse(reader).getAsJsonArray();
|
||||||
if (array.size() >= 1) {
|
for (JsonElement element : array) {
|
||||||
JsonObject object = array.get(0).getAsJsonObject();
|
JsonObject object = element.getAsJsonObject();
|
||||||
|
//noinspection SpellCheckingInspection
|
||||||
|
if (object.get("prerelease").getAsBoolean()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
return object.get("name").getAsString();
|
return object.get("name").getAsString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -74,6 +102,45 @@ public final class UpdateCheckUtils {
|
|||||||
return null;
|
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 {
|
public interface UpdateReceiver {
|
||||||
void sendMessage(@NotNull String message);
|
void sendMessage(@NotNull String message);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user