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