From e4def202f5d3e88d42711f8db99ee7ae501f40c6 Mon Sep 17 00:00:00 2001 From: gomeow Date: Sat, 8 Jun 2013 16:09:07 -0400 Subject: [PATCH] Do a lot of work on the updater, make it compatible with dev builds --- .../drtshock/playervaults/PlayerVaults.java | 19 ++-- .../drtshock/playervaults/util/Updater.java | 89 ++++++++----------- 2 files changed, 46 insertions(+), 62 deletions(-) diff --git a/src/main/java/com/drtshock/playervaults/PlayerVaults.java b/src/main/java/com/drtshock/playervaults/PlayerVaults.java index 15f9b6c..f47a3e4 100644 --- a/src/main/java/com/drtshock/playervaults/PlayerVaults.java +++ b/src/main/java/com/drtshock/playervaults/PlayerVaults.java @@ -101,16 +101,19 @@ public class PlayerVaults extends JavaPlugin { new BukkitRunnable() { public void run() { - Updater u = new Updater(); if (getConfig().getBoolean("check-update")) { - try { - if (u.getUpdate(getDescription().getVersion())) { - UPDATE = true; + if (getConfig().getBoolean("check-update")) { + try { + Updater u = new Updater(getDescription().getVersion()); + if (UPDATE = u.getUpdate()) { + LINK = u.getLink(); + NEWVERSION = u.getNewVersion(); + } + } catch(Exception e) { + getLogger().log(Level.WARNING, "Failed to check for updates."); + getLogger().log(Level.WARNING, "Report this stack trace to gomeow."); + e.printStackTrace(); } - } catch(IOException e) { - log.log(Level.WARNING, "PlayerVaults: Failed to check for updates."); - log.log(Level.WARNING, "PlayerVaults: Report this stack trace to drtshock and gomeow."); - e.printStackTrace(); } } } diff --git a/src/main/java/com/drtshock/playervaults/util/Updater.java b/src/main/java/com/drtshock/playervaults/util/Updater.java index 95dd019..0d32548 100644 --- a/src/main/java/com/drtshock/playervaults/util/Updater.java +++ b/src/main/java/com/drtshock/playervaults/util/Updater.java @@ -3,67 +3,48 @@ package com.drtshock.playervaults.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; +import java.net.HttpURLConnection; import java.net.URL; -import java.net.UnknownHostException; -import java.util.SortedMap; -import java.util.TreeMap; -import org.json.JSONException; -import org.json.JSONObject; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; -import com.drtshock.playervaults.PlayerVaults; +import org.w3c.dom.Document; +import org.xml.sax.SAXException; -/** - * A class for updating the lang.yml and checking for updates at DBO. - */ -public class Updater extends PlayerVaults { +public class Updater { - SortedMap lang = new TreeMap(); - - /** - * Check whether or not there is a new update. - * @param currentVersion The current running version. - * @return Whether or not an update is available. - * @throws IOException Oh no! - */ - public boolean getUpdate(String currentVersion) throws IOException { - JSONObject json; - try { - json = getInfo(); - String version = json.getString("dbo_version"); - String link = json.getString("link"); - PlayerVaults.NEWVERSION = version; - String goodLink = new BufferedReader(new InputStreamReader(new URL("http://is.gd/create.php?format=simple&url=" + link).openStream())).readLine(); - PlayerVaults.LINK = goodLink; - if (!version.equalsIgnoreCase(currentVersion)) { - return true; - } - } catch(JSONException e) { - throw new IOException(); + public Updater(String v) throws SAXException, IOException, ParserConfigurationException { + oldVersion = v.substring(0, 5); + HttpURLConnection connection = (HttpURLConnection) new URL("http://dev.bukkit.org/projects/playervaults/files.rss").openConnection(); + connection.setConnectTimeout(10000); + connection.setReadTimeout(10000); + connection.setUseCaches(false); + Document feed = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(connection.getInputStream()); + newVersion = feed.getElementsByTagName("title").item(1).getTextContent().substring(1); + String link = feed.getElementsByTagName("link").item(1).getTextContent(); + this.link = new BufferedReader(new InputStreamReader(new URL("http://is.gd/create.php?format=simple&url=" + link).openStream())).readLine(); + if(v.contains("SNAPSHOT") && !newVersion.equals(oldVersion)) { + update = false; + return; } - return false; + update = !newVersion.equals(oldVersion); } - /** - * Get the information about versions from DBO. - * @return The information in JSON. - * @throws IOException Oh no! - */ - public JSONObject getInfo() throws IOException { - URL url = new URL("http://api.bukget.org/3/plugins/bukkit/playervaults/latest"); - BufferedReader in = null; - try { - in = new BufferedReader(new InputStreamReader(url.openStream())); - } catch(UnknownHostException e) { - throw new IOException(); - } - JSONObject json; - try { - json = new JSONObject(in.readLine()).getJSONArray("versions").getJSONObject(0); - in.close(); - return json; - } catch(JSONException e) { - throw new IOException("Oh no!"); - } + private String oldVersion; + private String newVersion; + private String link; + private boolean update; + + public boolean getUpdate() { + return update; + } + + public String getNewVersion() { + return newVersion; + } + + public String getLink() { + return link; } } \ No newline at end of file