Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
1package com.legacyminecraft.poseidon.utility;
2
3import org.bukkit.craftbukkit.CraftServer;
4import org.json.simple.JSONObject;
5import org.json.simple.parser.JSONParser;
6
7import java.io.BufferedReader;
8import java.io.InputStreamReader;
9import java.net.HttpURLConnection;
10import java.net.URL;
11import java.util.concurrent.atomic.AtomicBoolean;
12import java.util.logging.Level;
13
14public class PoseidonVersionChecker {
15
16 private static final String GITHUB_API_URL = "https://api.github.com/repos/retromcorg/Project-Poseidon/releases/latest";
17 private static final String releaseUrl = "https://github.com/retromcorg/Project-Poseidon/releases";
18 private final String currentVersion;
19 private volatile String latestVersion;
20 private CraftServer server;
21
22 public PoseidonVersionChecker(CraftServer server, String currentVersion) {
23 this.currentVersion = currentVersion;
24 this.latestVersion = currentVersion; // Assume the latest version is the current version until checked
25 this.server = server;
26 }
27
28 /**
29 * Checks if a new version is available.
30 *
31 * @return true if a newer version is available, false otherwise.
32 */
33 public synchronized boolean isUpdateAvailable() {
34 return latestVersion != null && !currentVersion.equalsIgnoreCase(latestVersion);
35 }
36
37 /**
38 * Fetches the latest release version from GitHub API.
39 *
40 * @return the latest version as a String or null if fetching fails.
41 */
42 public void fetchLatestVersion() {
43 HttpURLConnection connection = null;
44 try {
45 URL url = new URL(GITHUB_API_URL);
46 connection = (HttpURLConnection) url.openConnection();
47 connection.setRequestMethod("GET");
48 connection.setRequestProperty("Accept", "application/json");
49 connection.setConnectTimeout(5000);
50 connection.setReadTimeout(5000);
51
52 int responseCode = connection.getResponseCode();
53 if (responseCode != HttpURLConnection.HTTP_OK) {
54 server.getLogger().log(Level.WARNING, "[Poseidon] Failed to check GitHub for latest version. HTTP Response Code: " + responseCode);
55 }
56
57 BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
58 StringBuilder response = new StringBuilder();
59 String line;
60
61 while ((line = reader.readLine()) != null) {
62 response.append(line);
63 }
64 reader.close();
65
66 JSONParser parser = new JSONParser();
67 JSONObject json = (JSONObject) parser.parse(response.toString());
68
69 this.latestVersion = (String) json.get("tag_name");
70
71 if (isUpdateAvailable()) {
72 server.getLogger().log(Level.INFO, "[Poseidon] A new version is available: " + latestVersion);
73 server.getLogger().log(Level.INFO, "[Poseidon] You are currently running version: " + currentVersion);
74 server.getLogger().log(Level.INFO, "[Poseidon] Download the latest version here: " + releaseUrl);
75 } else {
76 server.getLogger().log(Level.INFO, "[Poseidon] You are running the latest version (" + currentVersion + ") of Project Poseidon.");
77 }
78 } catch (Exception e) {
79 server.getLogger().log(Level.WARNING, "[Poseidon] Failed to check GitHub for latest version.", e);
80 } finally {
81 if (connection != null) {
82 connection.disconnect();
83 }
84 }
85 }
86
87 public String getCurrentVersion() {
88 return currentVersion;
89 }
90
91 public String getLatestVersion() {
92 return latestVersion;
93 }
94}