package com.kokakiwi.mclauncher.core.updater; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.List; import java.util.Map; import com.kokakiwi.mclauncher.api.LauncherAPI; import com.kokakiwi.mclauncher.utils.Version; public class VersionChecker { public static void checkVersion(LauncherAPI api) throws Exception { boolean update = false; final List<Map<String, Object>> versions = api.getConfig().getMapList( "updater.versions"); for (final Map<String, Object> version : versions) { if (!update) { final File file = new File(api.getMinecraftDirectory(), (String) version.get("file")); final String lastVersion = getLastVersion(api, (String) version.get("source")); if (lastVersion != null) { if (!file.exists()) { update = true; api.getUpdater().setAskUpdate(false); api.getUpdater().setDoUpdate(true); } else { final String current = readVersionFile(api, file); final Version v1 = Version.parseString(current); final Version v2 = Version.parseString(lastVersion); if (v2.compareTo(v1) > 0) { update = true; boolean force = (Boolean) version.get("force"); if (!force) { force = api.getConfig().getBoolean( "updater.askUpdateIfAvailable", true); } if (!force) { api.getUpdater().setAskUpdate(true); } api.getUpdater().setDoUpdate(true); } } } if (update) { updateVersionFile(file, lastVersion); } } } } public static String readVersionFile(LauncherAPI api, File file) throws Exception { if (!file.exists()) { file.createNewFile(); updateVersionFile(file, "-1"); } String version = null; final DataInputStream in = new DataInputStream( new FileInputStream(file)); version = in.readUTF(); in.close(); return version; } public static void updateVersionFile(LauncherAPI api, File file, Map<String, Object> version) throws Exception { updateVersionFile(file, getLastVersion(api, (String) version.get("source"))); } public static void updateVersionFile(File file, String lastVersion) throws Exception { if (!file.exists()) { file.createNewFile(); } final DataOutputStream out = new DataOutputStream(new FileOutputStream( file)); out.writeUTF(lastVersion); out.close(); } public static String getLastVersion(LauncherAPI api, String source) { String version = null; if (source == null) { if (api.getLoginer().getLastLogin() != null) { version = String.valueOf(api.getLoginer().getLastLogin() .getTimestamp()); } } else { version = api.getUrl(source); } return version; } }