/** * Provide simple natural order comparison for version numbers (ie. 2.9 is less than 2.10) * * @param version the new found version * @return true if the provided version is newer, false otherwise */ private boolean isNewerVersion(String newVersion) { String oldVersion = plugin.getDescription().getVersion(); if (oldVersion.equals(newVersion)) { return false; } oldVersion = oldVersion.split("-pre")[0]; String[] oldSplit = oldVersion.split("\\."); String[] newSplit = newVersion.split("\\."); int newInt; int oldInt; for (int i = 0; i < oldSplit.length || i < newSplit.length; i++) { if (i >= newSplit.length) { newInt = 0; } else { newInt = Integer.parseInt(newSplit[i]); } if (i >= oldSplit.length) { oldInt = 0; } else { oldInt = Integer.parseInt(oldSplit[i]); } if (newInt == oldInt) { continue; } else { return (newInt > oldInt); } } return false; }
@Override public void run() { plugin.log(Localization.getString(Strings.UPDATECHECKER_STARTED)); try { URL url = new URL(updateAddress); URLConnection connection = url.openConnection(); connection.setConnectTimeout(5000); connection.setReadTimeout(10000); BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); String version = reader.readLine(); String changes = reader.readLine(); plugin.log( String.format(Localization.getString(Strings.UPDATECHECKER_VERSION_FOUND), version)); plugin.log( String.format(Localization.getString(Strings.UPDATECHECKER_CHANGES_FOUND), changes)); if (version != null && isNewerVersion(version)) { plugin.latestKnownVersion = version; plugin.changes = changes; plugin.updateAvailable = true; plugin.getLogger().info(Localization.getString(Strings.UPDATE_AVAILIBLE)); plugin .getLogger() .info( String.format( Localization.getString(Strings.UPDATE_VERSION_INFO), plugin.getDescription().getVersion(), version)); plugin .getLogger() .info(String.format(Localization.getString(Strings.UPDATE_CHANGES), changes)); } else { plugin.log(Localization.getString(Strings.PLUGIN_UP_TO_DATE)); } } catch (Exception e) { plugin.getLogger().info(Localization.getString(Strings.UPDATE_CHECK_FAILURE)); } }