Add update checking and make Vault hook optional.

This commit is contained in:
AppleDash 2016-07-11 18:53:17 -04:00
parent aa5d95d72f
commit 139dec6bd2
8 changed files with 124 additions and 14 deletions

1
.gitignore vendored
View File

@ -13,3 +13,4 @@ RemoteSystemsTempFiles/.project
*.eml
out/
target/
dependency-reduced-pom.xml

View File

@ -6,10 +6,10 @@
<parent>
<groupId>org.appledash</groupId>
<artifactId>SaneEconomy</artifactId>
<version>0.5.2-SNAPSHOT</version>
<version>0.5.3-SNAPSHOT</version>
</parent>
<artifactId>SaneEconomyCore</artifactId>
<version>0.5.2-SNAPSHOT</version>
<version>0.5.3-SNAPSHOT</version>
<dependencies>
<dependency>
@ -20,7 +20,7 @@
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<finalName>${project.artifactId}-${project.version}</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
@ -49,12 +49,7 @@
<configuration>
<artifactSet>
<includes>
<include>com.zaxxer:HikariCP</include>
<include>com.google.code.gson:gson</include>
<include>org.reflections:reflections</include>
<include>org.javassist:javassist</include>
<include>org.slf4j:slf4j-api</include>
<include>org.slf4j:slf4j-nop</include>
<include>org.mcstats.bukkit:metrics</include>
</includes>
</artifactSet>
</configuration>

View File

@ -11,6 +11,7 @@ import org.appledash.saneeconomy.economy.backend.EconomyStorageBackend;
import org.appledash.saneeconomy.economy.backend.type.EconomyStorageBackendFlatfile;
import org.appledash.saneeconomy.economy.backend.type.EconomyStorageBackendMySQL;
import org.appledash.saneeconomy.listeners.JoinQuitListener;
import org.appledash.saneeconomy.updates.GithubVersionChecker;
import org.appledash.saneeconomy.vault.VaultHook;
import org.bukkit.plugin.java.JavaPlugin;
@ -50,13 +51,23 @@ public class SaneEconomy extends JavaPlugin {
loadCommands();
loadListeners();
vaultHook = new VaultHook(this);
vaultHook.hook();
if (getServer().getPluginManager().isPluginEnabled("Vault")) {
vaultHook = new VaultHook(this);
vaultHook.hook();
getLogger().info("Hooked into Vault.");
} else {
getLogger().info("Not hooking into Vault because it isn't loaded.");
}
getServer().getScheduler().scheduleAsyncDelayedTask(this, GithubVersionChecker::checkUpdateAvailable);
}
@Override
public void onDisable() {
vaultHook.unhook();
if (vaultHook != null) {
vaultHook.unhook();
}
}
private void loadConfig() {

View File

@ -1,6 +1,7 @@
package org.appledash.saneeconomy.listeners;
import org.appledash.saneeconomy.SaneEconomy;
import org.appledash.saneeconomy.updates.GithubVersionChecker;
import org.appledash.saneeconomy.utils.MessageUtils;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
@ -28,5 +29,10 @@ public class JoinQuitListener implements Listener {
plugin.getEconomyManager().setBalance(player, startBalance);
MessageUtils.sendMessage(player, "You've been issued a starting balance of %s!", plugin.getEconomyManager().getCurrency().formatAmount(startBalance));
}
/* Update notification */
if (player.hasPermission("saneeconomy.update-notify") && GithubVersionChecker.isUpdateAvailable()) {
MessageUtils.sendMessage(player, "An update is available! The current version is %s, but the newest available is %s. Please go to %s to update!", plugin.getDescription().getVersion(), GithubVersionChecker.getNewestVersion(), GithubVersionChecker.DOWNLOAD_URL);
}
}
}

View File

@ -0,0 +1,59 @@
package org.appledash.saneeconomy.updates;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import org.appledash.saneeconomy.SaneEconomy;
import org.appledash.saneeconomy.utils.WebUtils;
/**
* Created by appledash on 7/11/16.
* Blackjack is still best pony.
*/
public class GithubVersionChecker {
public static final String DOWNLOAD_URL = "https://github.com/AppleDash/SaneEconomy/releases";
private static final String RELEASES_URL = "https://api.github.com/repos/AppleDash/SaneEconomy/releases";
private static boolean updateChecked = false;
private static boolean updateAvailable = false;
private static String newestVersion;
public static void checkUpdateAvailable() {
String jsonContent = WebUtils.getContents(RELEASES_URL);
JsonArray array = (JsonArray)new JsonParser().parse(jsonContent);
int currentVersion = releaseToInt(SaneEconomy.getInstance().getDescription().getVersion());
int newestVersion = -1;
// JsonObject newestObj = null;
for (JsonElement elem : array) {
if (elem instanceof JsonObject) {
JsonObject releaseObj = (JsonObject)elem;
String versionStr = releaseObj.get("tag_name").getAsString();
int version = releaseToInt(versionStr);
if (version > newestVersion) {
newestVersion = version;
GithubVersionChecker.newestVersion = versionStr;
// newestObj = releaseObj;
}
}
}
updateChecked = true;
updateAvailable = newestVersion > currentVersion;
}
private static int releaseToInt(String release) {
return Integer.valueOf(release.trim().replace(".", ""));
}
public static boolean isUpdateAvailable() {
return updateChecked && updateAvailable;
}
public static String getNewestVersion() {
return newestVersion;
}
}

View File

@ -0,0 +1,33 @@
package org.appledash.saneeconomy.utils;
import org.appledash.saneeconomy.SaneEconomy;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
/**
* Created by appledash on 7/11/16.
* Blackjack is still best pony.
*/
public class WebUtils {
public static String getContents(String url) {
try {
String out = "";
URL uri = new URL(url);
BufferedReader br = new BufferedReader(new InputStreamReader(uri.openConnection().getInputStream()));
String line;
while ((line = br.readLine()) != null) {
out += line + "\n";
}
return out;
} catch (IOException e) {
SaneEconomy.logger().warning("Failed to get contents of URL " + url);
e.printStackTrace();
throw new RuntimeException("Failed to get URL contents!");
}
}
}

View File

@ -1,7 +1,7 @@
name: SaneEconomy
author: AppleDash
main: org.appledash.saneeconomy.SaneEconomy
version: 0.5.2
version: 0.5.3
softdepends: [Vault]
commands:
balance:

View File

@ -6,7 +6,7 @@
<groupId>org.appledash</groupId>
<artifactId>SaneEconomy</artifactId>
<version>0.5.2-SNAPSHOT</version>
<version>0.5.3-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
@ -24,6 +24,11 @@
<name>Vault</name>
<url>http://nexus.theyeticave.net/content/repositories/pub_releases</url>
</repository>
<repository>
<id>mcstats</id>
<name>MCStats</name>
<url>http://repo.mcstats.org/content/repositories/public</url>
</repository>
</repositories>
<dependencies>