From 81d25720bd6b38024af207882f88e7a9cda6dbdd Mon Sep 17 00:00:00 2001 From: Stanislav Usenkov Date: Tue, 10 May 2016 13:03:17 +0600 Subject: [PATCH] Updater moved into shared library. --- pom.xml | 8 +- .../rscPermissions/BridgeForBukkitAPI.java | 2 - .../rscPermissions/BukkitPluginMain.java | 2 +- .../rscPermissions/Updater/BukkitUpdater.java | 247 ------------------ .../rscPermissions/Updater/Latest.java | 10 - 5 files changed, 5 insertions(+), 264 deletions(-) delete mode 100644 src/main/java/ru/simsonic/rscPermissions/Updater/BukkitUpdater.java delete mode 100644 src/main/java/ru/simsonic/rscPermissions/Updater/Latest.java diff --git a/pom.xml b/pom.xml index 278d7db..55ed7bd 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ ru.simsonic rscPermissions - 0.10.1b-SNAPSHOT + 0.10.2b-SNAPSHOT jar rscPermissions @@ -62,8 +62,8 @@ - org.spigotmc - spigot-api + org.bukkit + bukkit 1.8.8-R0.1-SNAPSHOT provided @@ -84,7 +84,7 @@ ru.simsonic rscMinecraftLibrary - 2.2.0 + 2.2.1 compile diff --git a/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java b/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java index b9ef5bf..6ed29c4 100644 --- a/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java +++ b/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java @@ -2,11 +2,9 @@ package ru.simsonic.rscPermissions; import com.sk89q.wepif.PermissionsResolverManager; import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.ServicePriority; import ru.simsonic.rscMinecraftLibrary.Bukkit.GenericChatCodes; -import ru.simsonic.rscMinecraftLibrary.Bukkit.Tools; import ru.simsonic.rscPermissions.API.Settings; import ru.simsonic.rscPermissions.Bukkit.VaultChat; import ru.simsonic.rscPermissions.Bukkit.VaultPermission; diff --git a/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java b/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java index f6bddcd..06daac5 100644 --- a/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java +++ b/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java @@ -10,6 +10,7 @@ import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scheduler.BukkitScheduler; import org.mcstats.MetricsLite; +import ru.simsonic.rscMinecraftLibrary.AutoUpdater.BukkitUpdater; import ru.simsonic.rscMinecraftLibrary.Bukkit.CommandAnswerException; import ru.simsonic.rscMinecraftLibrary.Bukkit.GenericChatCodes; import ru.simsonic.rscMinecraftLibrary.Bukkit.Tools; @@ -25,7 +26,6 @@ import ru.simsonic.rscPermissions.Engine.Backends.BackendJson; import ru.simsonic.rscPermissions.Engine.Backends.DatabaseContents; import ru.simsonic.rscPermissions.Engine.InternalCache; import ru.simsonic.rscPermissions.Engine.Phrases; -import ru.simsonic.rscPermissions.Updater.BukkitUpdater; public final class BukkitPluginMain extends JavaPlugin { diff --git a/src/main/java/ru/simsonic/rscPermissions/Updater/BukkitUpdater.java b/src/main/java/ru/simsonic/rscPermissions/Updater/BukkitUpdater.java deleted file mode 100644 index 30d185e..0000000 --- a/src/main/java/ru/simsonic/rscPermissions/Updater/BukkitUpdater.java +++ /dev/null @@ -1,247 +0,0 @@ -package ru.simsonic.rscPermissions.Updater; - -import com.google.gson.Gson; -import com.google.gson.JsonParseException; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.net.HttpURLConnection; -import java.net.MalformedURLException; -import java.net.URISyntaxException; -import java.net.URL; -import java.nio.channels.Channels; -import java.nio.channels.ReadableByteChannel; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerKickEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.plugin.java.JavaPlugin; -import ru.simsonic.rscCommonsLibrary.RestartableThread; -import ru.simsonic.rscMinecraftLibrary.Bukkit.GenericChatCodes; - -public final class BukkitUpdater implements Listener -{ - private final JavaPlugin plugin; - private final String latestURL; - private final HashSet staff = new HashSet<>(); - private final String chatPrefix; - public BukkitUpdater(JavaPlugin plugin, String latestURL, String chatPrefix) - { - this.plugin = plugin; - this.latestURL = latestURL; - this.chatPrefix = chatPrefix; - } - public void onEnable() - { - plugin.getServer().getPluginManager().registerEvents(BukkitUpdater.this, plugin); - checkUpdate(null); - } - public void checkUpdate(Player sender) - { - if(sender != null) - staff.add(sender); - threadCheck.start(); - } - public void doUpdate(Player sender) - { - if(sender != null) - staff.add(sender); - threadUpdate.start(); - } - private final RestartableThread threadCheck = new RestartableThread() - { - @Override - public void run() - { - checkForUpdate(); - final ArrayList lines = latestToLines(); - if(lines != null) - runLines(lines.toArray(new String[lines.size()])); - else - runLine("You are using the latest version."); - } - }; - private final RestartableThread threadUpdate = new RestartableThread() - { - @Override - public void run() - { - runLine("Downloading update..."); - if(downloadUpdate()) - { - // SUCCESS - runLine("Installing update..."); - installUpdate(); - runLines(new String[] - { - "{_LG}Installation complete!", - "Please restart your server to avoid errors.", - }); - } else { - // FAILED - runLines(new String[] { - "{_LR}Downloading error!", - "Cannot download update file. Please try later.", - }); - } - } - }; - private Latest latest = new Latest(); - private void checkForUpdate() - { - try - { - this.latest = new Gson().fromJson(downloadJson(latestURL), Latest.class); - } catch(IOException ex) { - this.latest = new Latest(); - } - if(latest.note == null) - latest.note = "New version: " + latest.version; - if(latest.notes == null) - latest.notes = new String[] { latest.note }; - if(latest.version == null) - latest.version = plugin.getDescription().getVersion(); - } - private void runLine(final String line) - { - runLines(new String[] { line }); - } - private void runLines(final String[] lines) - { - final Runnable syncTask = new Runnable() - { - @Override - public synchronized void run() - { - // CONSOLE - final ConsoleCommandSender console = plugin.getServer().getConsoleSender(); - for(String line : lines) - if(line != null) - console.sendMessage(GenericChatCodes.processStringStatic(chatPrefix + line)); - // PLAYERS - for(Player online : staff) - for(String line : lines) - if(line != null) - online.sendMessage(GenericChatCodes.processStringStatic(chatPrefix + line)); - notify(); - } - }; - try - { - synchronized(syncTask) - { - plugin.getServer().getScheduler().runTask(plugin, syncTask); - syncTask.wait(); - } - } catch(InterruptedException ex) { - } - } - private ArrayList latestToLines() - { - // THERE IS NO UPDATE - if(plugin.getDescription().getVersion().equals(latest.version)) - return null; - // THERE IS AN UPDATE - final ArrayList result = new ArrayList<>(); - result.add("New " - + (latest.snapshot ? "{_DS}snapshot {_LS}" : "{_WH}release {_LS}") - + "version {_LG}" + latest.version + "{_LS} is available!"); - result.addAll(Arrays.asList(latest.notes)); - result.add("Apply this update with command {GOLD}/rscfjd update do"); - return result; - } - public void onAdminJoin(Player player, boolean fromEvent) - { - staff.add(player); - if(fromEvent) - { - final ArrayList lines = latestToLines(); - if(lines != null) - for(String line : lines) - if(line != null) - player.sendMessage(GenericChatCodes.processStringStatic(chatPrefix + line)); - } - } - @EventHandler - protected void onPlayerQuit(PlayerQuitEvent event) - { - staff.add(event.getPlayer()); - } - @EventHandler - protected void onPlayerKick(PlayerKickEvent event) - { - staff.add(event.getPlayer()); - } - private static String downloadJson(String url) throws IOException - { - try - { - final HttpURLConnection connection = (HttpURLConnection)new URL(url).openConnection(); - connection.setDoOutput(true); - connection.setDoInput(true); - connection.setConnectTimeout(5000); - connection.setReadTimeout(5000); - connection.setUseCaches(false); - final int responseCode = connection.getResponseCode(); - if(responseCode == HttpURLConnection.HTTP_OK) - return readUnicodeStream(connection.getInputStream()); - throw new IOException(new StringBuilder() - .append(Integer.toString(responseCode)) - .append("Erroneous result of executing web-method: ") - .append(connection.getResponseMessage()) - .append("\r\n") - .append(readUnicodeStream(connection.getErrorStream())) - .toString()); - } catch(JsonParseException | MalformedURLException ex) { - throw new IOException(ex); - } catch(IOException ex) { - throw ex; - } - } - private static String readUnicodeStream(InputStream is) throws IOException - { - try(ByteArrayOutputStream baos = new ByteArrayOutputStream()) - { - final byte[] buffer = new byte[1024]; - for(int length = 0; length != -1; length = is.read(buffer)) - baos.write(buffer, 0, length); - return new String(baos.toByteArray(), "UTF-8"); - } - } - private boolean downloadUpdate() - { - final File folder = plugin.getDataFolder().getParentFile(); - final File target = new File(folder, plugin.getName() + "_v" + latest.version + ".jar"); - try(FileOutputStream fos = new FileOutputStream(target)) - { - final ReadableByteChannel rbc = Channels.newChannel(new URL(latest.url).openStream()); - fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); - fos.flush(); - return true; - } catch(MalformedURLException ex) { - System.err.println(ex); - } catch(IOException ex) { - System.err.println(ex); - } - return false; - } - private void installUpdate() - { - // RENAME OLD VERSION - try - { - final String outdatedJarPath = plugin.getClass().getProtectionDomain().getCodeSource().getLocation().toURI().getPath(); - final File outdatedJarSrc = new File(outdatedJarPath); - final File outdatedJarDst = new File(outdatedJarPath + "-outdated"); - outdatedJarSrc.renameTo(outdatedJarDst); - } catch(URISyntaxException ex) { - } - } -} diff --git a/src/main/java/ru/simsonic/rscPermissions/Updater/Latest.java b/src/main/java/ru/simsonic/rscPermissions/Updater/Latest.java deleted file mode 100644 index ae3c725..0000000 --- a/src/main/java/ru/simsonic/rscPermissions/Updater/Latest.java +++ /dev/null @@ -1,10 +0,0 @@ -package ru.simsonic.rscPermissions.Updater; - -public class Latest -{ - public String version; - public String note; - public String[] notes; - public String url; - public boolean snapshot; -}