package sk.tomsik68.mclauncher.impl.versions.mcdownload; import net.minidev.json.JSONObject; import net.minidev.json.JSONValue; import sk.tomsik68.mclauncher.api.common.MCLauncherAPI; import sk.tomsik68.mclauncher.api.common.mc.MinecraftInstance; import sk.tomsik68.mclauncher.api.versions.IVersion; import sk.tomsik68.mclauncher.api.versions.IVersionList; import sk.tomsik68.mclauncher.api.versions.LatestVersionInformation; import sk.tomsik68.mclauncher.impl.common.Observable; import java.io.File; import java.io.FileFilter; import java.io.FileReader; final class MCDownloadLocalVersionList extends Observable<String> implements IVersionList { private final File versionsFolder; public MCDownloadLocalVersionList(MinecraftInstance mc){ versionsFolder = new File(mc.getLocation(), "versions"); } private File getVersionFolder(String id){ return new File(versionsFolder, id); } @Override public void startDownload() throws Exception { if(!versionsFolder.exists() || versionsFolder.isFile()){ MCLauncherAPI.log.fine("'versions' folder at '".concat(versionsFolder.getAbsolutePath()).concat("' doesn't exist or is invalid.")); return; } File[] versionFolders = versionsFolder.listFiles(new FileFilter() { @Override public boolean accept(File file) { return file.isDirectory(); } }); for(File versionFolder : versionFolders){ // do a quick check whether or not the needed JSON file exists File jsonFile = new File(versionFolder, versionFolder.getName().concat(".json")); if(jsonFile.exists()){ notifyObservers(versionFolder.getName()); } } } @Override public IVersion retrieveVersionInfo(String id) throws Exception { File versionFolder = getVersionFolder(id); if(!versionFolder.exists()){ MCLauncherAPI.log.fine("version folder at '".concat(versionFolder.getAbsolutePath()).concat("' doesn't exist or is invalid.")); return null; } File jsonFile = new File(versionFolder, versionFolder.getName().concat(".json")); FileReader fileReader = new FileReader(jsonFile); MCDownloadVersion result = new MCDownloadVersion((JSONObject) JSONValue.parse(fileReader)); fileReader.close(); return result; } @Override public LatestVersionInformation getLatestVersionInformation() throws Exception { /* for now, we'll return null. proper solution would be to list * all versions, compare their release time etc * but we won't be needing latest version from this source... */ return null; } }