From a45d264f15c7e8240577d316c84ab9337cbf3108 Mon Sep 17 00:00:00 2001 From: Lennart ten Wolde <0p1q9o2w@hotmail.nl> Date: Wed, 24 Feb 2016 16:50:05 +0100 Subject: [PATCH] updater --- latest_version.json | 6 + pom.xml | 123 +++++++--- .../marriage2/commands/CommandUpdate.java | 4 +- .../marriage2/internal/MarriageCore.java | 9 +- .../marriage2/internal/MarriagePlugin.java | 1 - .../marriage2/listeners/UpdateListener.java | 4 +- .../marriage2/misc/update/ReleaseType.java | 7 - .../bukkit/marriage2/misc/update/Updater.java | 213 ------------------ .../bukkit/marriage2/misc/update/Version.java | 31 --- src/main/resources/updater.txt | 1 + 10 files changed, 103 insertions(+), 296 deletions(-) create mode 100644 latest_version.json delete mode 100644 src/main/java/com/lenis0012/bukkit/marriage2/misc/update/ReleaseType.java delete mode 100644 src/main/java/com/lenis0012/bukkit/marriage2/misc/update/Updater.java delete mode 100644 src/main/java/com/lenis0012/bukkit/marriage2/misc/update/Version.java create mode 100644 src/main/resources/updater.txt diff --git a/latest_version.json b/latest_version.json new file mode 100644 index 0000000..ba7df41 --- /dev/null +++ b/latest_version.json @@ -0,0 +1,6 @@ +{ + "name": "2.0", + "type": "release", + "gameVersion": "1.8.8", + "downloadURL": "TODO" +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index e9826f2..e8499e2 100644 --- a/pom.xml +++ b/pom.xml @@ -40,19 +40,12 @@ 1.8.8-R0.1-SNAPSHOT provided - - - - - - - - - - - - - + + com.lenis0012.updater + updater-api + 1 + compile + junit junit @@ -61,6 +54,87 @@ + + + bukkit + + false + + + + com.lenis0012.updater + updater-bukkit + 1 + compile + + + + + + maven-shade-plugin + 2.4 + + + package + + shade + + + Marriage-Bukkit + + + com.lenis0012.updater:updater-api + com.lenis0012.updater:updater-bukkit + + + + + + + + + + + spigot + + false + + + + com.lenis0012.updater + updater-spigot + 1 + compile + + + + + + maven-shade-plugin + 2.4 + + + package + + shade + + + Marriage-Spigot + + + com.lenis0012.updater:updater-api + com.lenis0012.updater:updater-spigot + + + + + + + + + + + @@ -73,7 +147,7 @@ - clean install + ${project.name} @@ -98,27 +172,6 @@ public - - - - - - - - - - - - - - - - - - - - - diff --git a/src/main/java/com/lenis0012/bukkit/marriage2/commands/CommandUpdate.java b/src/main/java/com/lenis0012/bukkit/marriage2/commands/CommandUpdate.java index 44694b9..2e2b3ed 100644 --- a/src/main/java/com/lenis0012/bukkit/marriage2/commands/CommandUpdate.java +++ b/src/main/java/com/lenis0012/bukkit/marriage2/commands/CommandUpdate.java @@ -3,8 +3,8 @@ package com.lenis0012.bukkit.marriage2.commands; import com.lenis0012.bukkit.marriage2.Marriage; import com.lenis0012.bukkit.marriage2.config.Settings; import com.lenis0012.bukkit.marriage2.internal.MarriageCore; -import com.lenis0012.bukkit.marriage2.misc.update.Updater; -import com.lenis0012.bukkit.marriage2.misc.update.Version; +import com.lenis0012.updater.api.Updater; +import com.lenis0012.updater.api.Version; import org.bukkit.Bukkit; import org.bukkit.inventory.ItemStack; diff --git a/src/main/java/com/lenis0012/bukkit/marriage2/internal/MarriageCore.java b/src/main/java/com/lenis0012/bukkit/marriage2/internal/MarriageCore.java index 077e103..bfaa76c 100644 --- a/src/main/java/com/lenis0012/bukkit/marriage2/internal/MarriageCore.java +++ b/src/main/java/com/lenis0012/bukkit/marriage2/internal/MarriageCore.java @@ -4,14 +4,12 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.UUID; -import java.util.concurrent.locks.Lock; -import java.util.concurrent.locks.ReentrantLock; import com.lenis0012.bukkit.marriage2.MData; -import com.lenis0012.bukkit.marriage2.commands.CommandPriest; import com.lenis0012.bukkit.marriage2.internal.Register.Type; import com.lenis0012.bukkit.marriage2.internal.data.DataConverter; -import com.lenis0012.bukkit.marriage2.misc.update.Updater; +import com.lenis0012.updater.api.Updater; +import com.lenis0012.updater.api.UpdaterFactory; import org.bukkit.event.Listener; import com.lenis0012.bukkit.marriage2.MPlayer; @@ -66,7 +64,8 @@ public class MarriageCore extends MarriageBase { @Register(name = "updater", type = Type.ENABLE, priority = 9) public void loadUpdater() { - this.updater = new Updater(this, MarriagePlugin.MARRIAGE_MOD_ID, plugin.getPluginFile()); + UpdaterFactory factory = new UpdaterFactory(plugin); + this.updater = factory.newUpdater(plugin.getPluginFile(), Settings.ENABLE_UPDATE_CHACKER.value()); } @Register(name = "converter", type = Register.Type.ENABLE, priority = 10) diff --git a/src/main/java/com/lenis0012/bukkit/marriage2/internal/MarriagePlugin.java b/src/main/java/com/lenis0012/bukkit/marriage2/internal/MarriagePlugin.java index 7f12373..e96bb5c 100644 --- a/src/main/java/com/lenis0012/bukkit/marriage2/internal/MarriagePlugin.java +++ b/src/main/java/com/lenis0012/bukkit/marriage2/internal/MarriagePlugin.java @@ -11,7 +11,6 @@ import org.bukkit.plugin.java.JavaPlugin; import com.lenis0012.bukkit.marriage2.Marriage; public class MarriagePlugin extends JavaPlugin { - public static final int MARRIAGE_MOD_ID = 44364; private static MarriageCore core; public static Marriage getInstance() { diff --git a/src/main/java/com/lenis0012/bukkit/marriage2/listeners/UpdateListener.java b/src/main/java/com/lenis0012/bukkit/marriage2/listeners/UpdateListener.java index e77048e..a095d42 100644 --- a/src/main/java/com/lenis0012/bukkit/marriage2/listeners/UpdateListener.java +++ b/src/main/java/com/lenis0012/bukkit/marriage2/listeners/UpdateListener.java @@ -2,8 +2,8 @@ package com.lenis0012.bukkit.marriage2.listeners; import com.lenis0012.bukkit.marriage2.config.Message; import com.lenis0012.bukkit.marriage2.internal.MarriageCore; -import com.lenis0012.bukkit.marriage2.misc.update.Updater; -import com.lenis0012.bukkit.marriage2.misc.update.Version; +import com.lenis0012.updater.api.Updater; +import com.lenis0012.updater.api.Version; import net.md_5.bungee.api.ChatColor; import org.bukkit.Bukkit; import org.bukkit.entity.Player; diff --git a/src/main/java/com/lenis0012/bukkit/marriage2/misc/update/ReleaseType.java b/src/main/java/com/lenis0012/bukkit/marriage2/misc/update/ReleaseType.java deleted file mode 100644 index 623172a..0000000 --- a/src/main/java/com/lenis0012/bukkit/marriage2/misc/update/ReleaseType.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.lenis0012.bukkit.marriage2.misc.update; - -public enum ReleaseType { - ALPHA, - BETA, - RELEASE -} diff --git a/src/main/java/com/lenis0012/bukkit/marriage2/misc/update/Updater.java b/src/main/java/com/lenis0012/bukkit/marriage2/misc/update/Updater.java deleted file mode 100644 index ed82677..0000000 --- a/src/main/java/com/lenis0012/bukkit/marriage2/misc/update/Updater.java +++ /dev/null @@ -1,213 +0,0 @@ -package com.lenis0012.bukkit.marriage2.misc.update; - -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import com.lenis0012.bukkit.marriage2.config.Settings; -import com.lenis0012.bukkit.marriage2.internal.MarriageCore; -import com.lenis0012.bukkit.marriage2.internal.MarriagePlugin; -import com.lenis0012.bukkit.marriage2.misc.BConfig; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.BookMeta; - -import java.io.*; -import java.net.URL; -import java.net.URLConnection; -import java.util.concurrent.TimeUnit; -import java.util.jar.JarFile; -import java.util.logging.Level; - -public class Updater { - private static final long UPDATE_CACHE = TimeUnit.HOURS.toMillis(3); // Cache for 3 hours - private static final String BASE_URL = "https://api.curseforge.com"; - private static final String API_FILES = "/servermods/files?projectIds="; - - private final int projectId; - private final JsonParser jsonParser; - private String currentVersion; - private final File pluginFile; - private boolean enabled; - private String apiKey; - - private Version newVersion = null; - private boolean isOutdated = false; - private long lastUpdateCheck = 0L; - private ItemStack changelog; - - public Updater(MarriageCore core, int projectId, File pluginFile) { - MarriagePlugin plugin = core.getPlugin(); - this.projectId = projectId; - this.jsonParser = new JsonParser(); - this.currentVersion = plugin.getDescription().getVersion(); - this.enabled = Settings.ENABLE_UPDATE_CHACKER.value(); - this.pluginFile = pluginFile; - - // Support for gravity updater - File updateFile = new File(new File(plugin.getDataFolder().getParentFile(), "Updater"), "config.yml"); - if(updateFile.exists()) { - BConfig config = new BConfig(core, updateFile); - this.apiKey = config.get("api-key", String.class); -// this.enabled = !config.getOrDefault("disable", false); - } - } - - public boolean hasUpdate() { - if(!enabled) return false; - if(lastUpdateCheck < System.currentTimeMillis()) { - this.lastUpdateCheck = System.currentTimeMillis() + UPDATE_CACHE; - read(); - } - - return !isOutdated; - } - - public ItemStack getChangelog() { - return changelog; - } - - public Version getNewVersion() { - return newVersion; - } - - public String downloadVersion() { - if(newVersion == null) return "No new version available!"; - InputStream input = null; - FileOutputStream output = null; - MarriagePlugin.getInstance().getLogger().log(Level.INFO, "Downloading update " + newVersion.getName()); - try { - Bukkit.getUpdateFolderFile().mkdir(); - URL url = new URL(newVersion.getDownloadURL()); - input = url.openStream(); - File dest = new File(Bukkit.getUpdateFolderFile(), pluginFile.getName()); - output = new FileOutputStream(dest); - byte[] buffer = new byte[1024]; - int length; - while((length = input.read(buffer, 0, buffer.length)) != -1) { - output.write(buffer, 0, length); - } - - // Don't warn players again hehehe :) - this.currentVersion = newVersion.getName(); - this.isOutdated = false; - readChangelog(dest); // Try to read changelog - - MarriagePlugin.getInstance().getLogger().log(Level.INFO, "Download complete"); - return null; - } catch(IOException e) { - MarriagePlugin.getInstance().getLogger().log(Level.WARNING, "Failed to download new file", e); - return e.getMessage(); - } finally { - if(input != null) { - try { - input.close(); - } catch(IOException e) { - } - } if(output != null) { - try { - output.close(); - } catch(IOException e) { - } - } - } - } - - private void read() { - try { - URLConnection connection = new URL(BASE_URL + API_FILES + projectId).openConnection(); - connection.addRequestProperty("User-Agent", "BukkitUpdater/v1 (by lenis0012)"); - if(apiKey != null) { - connection.addRequestProperty("X-API-Key", apiKey); - } - - BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); - StringBuilder builder = new StringBuilder(); - String line; - while((line = reader.readLine()) != null) { - builder.append(line); - } - - reader.close(); - JsonArray files = jsonParser.parse(builder.toString()).getAsJsonArray(); - JsonObject latest = files.get(files.size() - 1).getAsJsonObject(); - String name = latest.get("name").getAsString(); - ReleaseType type = ReleaseType.valueOf(latest.get("releaseType").getAsString().toUpperCase()); - String serverVersion = latest.get("gameVersion").getAsString(); - String downloadURL = latest.get("downloadUrl").getAsString(); - this.newVersion = new Version(name, type, serverVersion, downloadURL); - this.isOutdated = !compateVersions(currentVersion, name); - } catch(IOException e) { - MarriagePlugin.getInstance().getLogger().log(Level.WARNING, "Failed to check for updates", e); - } - } - - /** - * Read changelog from file inside of jar called changelog.json. - * - * @param file Jar File to read from - */ - private void readChangelog(File file) { - ItemStack book = new ItemStack(Material.WRITTEN_BOOK, 1); - BookMeta meta = (BookMeta) book.getItemMeta(); - meta.setAuthor("lenis0012"); - meta.setTitle(currentVersion + " Changelog"); - JsonObject json; - - JarFile jarFile = null; - try { - jarFile = new JarFile(file); - InputStream input = jarFile.getInputStream(jarFile.getEntry("changelog.json")); - BufferedReader reader = new BufferedReader(new InputStreamReader(input)); - StringBuilder builder = new StringBuilder(); - String line; - while((line = reader.readLine()) != null) { - builder.append(line); - } - json = jsonParser.parse(builder.toString()).getAsJsonObject(); - } catch(Exception e) { - MarriagePlugin.getInstance().getLogger().log(Level.WARNING, "Failed to read jar file", e); - return; - } finally { - if(jarFile != null) { - try { - jarFile.close(); - } catch(IOException e) { - } - } - } - - if(!json.get("version").getAsString().equalsIgnoreCase(newVersion.getName())) { - // Changelog outdated, don't show - return; - } - - JsonArray pages = json.get("data").getAsJsonArray(); - for(int i = 0; i < pages.size(); i++) { - JsonArray lines = pages.get(i).getAsJsonArray(); - StringBuilder page = new StringBuilder(); - for(int j = 0; j < lines.size(); j++) { - page.append(lines.get(j).getAsString()).append('\n'); - } - page.setLength(page.length() - 1); - meta.addPage(page.toString()); - } - book.setItemMeta(meta); - this.changelog = book; - } - - private boolean compateVersions(String oldVersion, String newVersion) { - int oldId = matchLength(oldVersion, newVersion); - int newId = matchLength(newVersion, oldVersion); - return newId > oldId; - } - - private int matchLength(String a, String b) { - a = a.replaceAll("[^0-9]", ""); - b = b.replaceAll("[^0-9]", ""); - while(a.length() < b.length()) { - a += "0"; - } - return Integer.parseInt(a); - } -} diff --git a/src/main/java/com/lenis0012/bukkit/marriage2/misc/update/Version.java b/src/main/java/com/lenis0012/bukkit/marriage2/misc/update/Version.java deleted file mode 100644 index e5f37a8..0000000 --- a/src/main/java/com/lenis0012/bukkit/marriage2/misc/update/Version.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.lenis0012.bukkit.marriage2.misc.update; - -public class Version { - private final String name; - private final ReleaseType type; - private final String serverVersion; - private final String downloadURL; - - public Version(String name, ReleaseType type, String serverVersion, String downloadURL) { - this.name = name; - this.type = type; - this.serverVersion = serverVersion; - this.downloadURL = downloadURL; - } - - public String getName() { - return name; - } - - public ReleaseType getType() { - return type; - } - - public String getServerVersion() { - return serverVersion; - } - - protected String getDownloadURL() { - return downloadURL; - } -} diff --git a/src/main/resources/updater.txt b/src/main/resources/updater.txt new file mode 100644 index 0000000..10373b8 --- /dev/null +++ b/src/main/resources/updater.txt @@ -0,0 +1 @@ +${project.updaterInfo} \ No newline at end of file