blob: f5eb29076636f905c2f81df3eb65ae2d5fa6a2b1 [file] [log] [blame] [raw]
package us.myles.ViaVersion.update;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import net.md_5.bungee.api.ChatColor;
import us.myles.ViaVersion.api.Via;
import us.myles.ViaVersion.util.GsonUtil;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Locale;
import java.util.UUID;
public class UpdateUtil {
public final static String PREFIX = ChatColor.GREEN + "" + ChatColor.BOLD + "[ViaVersion] " + ChatColor.GREEN;
private final static String URL = "https://api.spiget.org/v2/resources/";
private final static int PLUGIN = 19254;
private final static String LATEST_VERSION = "/versions/latest";
public static void sendUpdateMessage(final UUID uuid) {
Via.getPlatform().runAsync(new Runnable() {
@Override
public void run() {
final String message = getUpdateMessage(false);
if (message != null) {
Via.getPlatform().runSync(
new Runnable() {
@Override
public void run() {
Via.getPlatform().sendMessage(uuid, PREFIX + message);
}
}
);
}
}
});
}
public static void sendUpdateMessage() {
Via.getPlatform().runAsync(new Runnable() {
@Override
public void run() {
final String message = getUpdateMessage(true);
if (message != null) {
Via.getPlatform().runSync(
new Runnable() {
@Override
public void run() {
Via.getPlatform().getLogger().warning(message);
}
}
);
}
}
});
}
private static String getUpdateMessage(boolean console) {
if (Via.getPlatform().getPluginVersion().equals("${project.version}")) {
return "You are using a debug/custom version, consider updating.";
}
String newestString = getNewestVersion();
if (newestString == null) {
if (console) {
return "Could not check for updates, check your connection.";
} else {
return null;
}
}
Version current;
try {
current = new Version(Via.getPlatform().getPluginVersion());
} catch (IllegalArgumentException e) {
return "You are using a custom version, consider updating.";
}
Version newest = new Version(newestString);
if (current.compareTo(newest) < 0)
return "There is a newer version available: " + newest.toString() + ", you're on: " + current.toString();
else if (console && current.compareTo(newest) != 0) {
if (current.getTag().toLowerCase(Locale.ROOT).startsWith("dev") || current.getTag().toLowerCase(Locale.ROOT).startsWith("snapshot")) {
return "You are running a development version, please report any bugs to GitHub.";
} else {
return "You are running a newer version than is released!";
}
}
return null;
}
private static String getNewestVersion() {
try {
URL url = new URL(URL + PLUGIN + LATEST_VERSION + "?" + System.currentTimeMillis());
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setUseCaches(true);
connection.addRequestProperty("User-Agent", "ViaVersion " + Via.getPlatform().getPluginVersion() + " " + Via.getPlatform().getPlatformName());
connection.setDoOutput(true);
BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String input;
String content = "";
while ((input = br.readLine()) != null) {
content = content + input;
}
br.close();
JsonObject statistics;
try {
statistics = GsonUtil.getGson().fromJson(content, JsonObject.class);
} catch (JsonParseException e) {
e.printStackTrace();
return null;
}
return statistics.get("name").getAsString();
} catch (MalformedURLException e) {
return null;
} catch (IOException e) {
return null;
}
}
}