Files
Stats/com/nidefawl/Stats/util/Updater.java
Your Name c4e6c65467 v0.972
2011-04-04 01:26:11 +02:00

226 lines
6.4 KiB
Java
Executable File

/**
* This file is taken from LWC (https://github.com/Hidendra/LWC)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.nidefawl.Stats.util;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.HashMap;
import com.nidefawl.Achievements.Achievements;
import com.nidefawl.Stats.Stats;
public class Updater {
/**
* URL to the base update site
*/
private final static String UPDATE_SITE = "http://dev.craftland.org/stats/";
/**
* File used to obtain the latest version
*/
private final static String VERSION_FILE = "VERSIONS";
/**
* Internal config
*/
private HashMap<String, String> config = new HashMap<String, String>();
private Stats plugin = null;
public Updater(Stats plugin) {
this.plugin = plugin;
config.put("sqlite", "1.00");
config.put("mysql", "1.00");
parseInternalConfig();
}
/**
* @return the current sqlite version
*/
public double getCurrentSQLiteVersion() {
return Double.parseDouble(config.get("sqlite"));
}
/**
* @return the current sqlite version
*/
public double getCurrentMySQLVersion() {
return Double.parseDouble(config.get("mysql"));
}
public String combineSplit(int startIndex, String[] string, String seperator) {
if (string.length == 0)
return "";
StringBuilder builder = new StringBuilder();
for (int i = startIndex; i < string.length; i++) {
builder.append(string[i]);
builder.append(seperator);
}
if (builder.length() > seperator.length())
builder.deleteCharAt(builder.length() - seperator.length()); // remove
return builder.toString();
}
/**
* @return the latest sqlite version
*/
public double getLatestSQLiteVersion() {
try {
URL url = new URL(UPDATE_SITE + VERSION_FILE);
InputStream inputStream = url.openStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
bufferedReader.readLine();
double version = Double.parseDouble(bufferedReader.readLine());
bufferedReader.close();
return version;
} catch (Exception e) {
e.printStackTrace();
}
return 0.00;
}
/**
* @return the internal config file
*/
private File getInternalFile() {
return new File(plugin.getDataFolder() + File.separator + "internal.ini");
}
/**
* Parse the internal config file
*/
private void parseInternalConfig() {
try {
File file = getInternalFile();
if (!file.exists()) {
saveInternal();
return;
}
BufferedReader reader = new BufferedReader(new FileReader(file));
String line;
while ((line = reader.readLine()) != null) {
if (line.trim().startsWith("#")) {
continue;
}
if (!line.contains(":")) {
continue;
}
/*
* Split the array
*/
String[] arr = line.split(":");
if (arr.length < 2) {
continue;
}
/*
* Get the key/value
*/
String key = arr[0];
String value = combineSplit(1, arr, ":");
// value = value.substring(0, value.length() - 1);
/*
* Set the config value
*/
config.put(key, value);
}
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Create the internal updater config file
*/
public void saveInternal() {
try {
File file = getInternalFile();
if (file.exists()) {
file.delete();
}
file.createNewFile();
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
writer.write("# Stats Internal Config\n");
writer.write("#################################\n");
writer.write("### DO NOT MODIFY THIS FILE ###\n");
writer.write("### THIS DOES NOT CHANGE ###\n");
writer.write("### STATS'S VISIBLE BEHAVIOUR ###\n");
writer.write("#################################\n\n");
writer.write("#################################\n");
writer.write("### THANK YOU! ###\n");
writer.write("#################################\n\n");
for (String key : config.keySet()) {
String value = config.get(key);
writer.write(key + ":" + value + "\n");
}
writer.flush();
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public boolean updateDist(boolean autoUpdate) throws Exception {
URL url = new URL(UPDATE_SITE + VERSION_FILE);
InputStream inputStream = url.openStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
double SQLiteVersion = Double.parseDouble(bufferedReader.readLine());
double MySQLVersion = Double.parseDouble(bufferedReader.readLine());
double StatsVersion = Double.parseDouble(bufferedReader.readLine());
double AchievementsVersion = Double.parseDouble(bufferedReader.readLine());
bufferedReader.close();
inputStream.close();
String plugPath = plugin.getDataFolder().getPath()+File.separator;
boolean updated = false;
updated |= (new UpdaterFile(UPDATE_SITE + "lib/mysql.jar",plugPath+"lib/mysql.jar",getCurrentMySQLVersion(),MySQLVersion)).update(true);
config.put("mysql", String.valueOf(MySQLVersion));
updated |= (new UpdaterFile(UPDATE_SITE + "lib/sqlite.jar",plugPath+"lib/sqlite.jar",getCurrentSQLiteVersion(),SQLiteVersion)).update(true);
config.put("sqlite", String.valueOf(SQLiteVersion));
if (new File("plugins/Achievements.jar").exists()) {
updated |= (new UpdaterFile(UPDATE_SITE + "Achievements.jar","plugins/Achievements.jar",Achievements.getVersion(),AchievementsVersion)).update(autoUpdate);
}
updated |= (new UpdaterFile(UPDATE_SITE + "Stats.jar","plugins/Stats.jar",Stats.version,StatsVersion)).update(autoUpdate);
saveInternal();
return updated;
}
}