/* * This file is part of Applied Energistics 2. * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. * * Applied Energistics 2 is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Applied Energistics 2 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Applied Energistics 2. If not, see . */ package appeng.services; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.util.Date; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import net.minecraft.nbt.NBTTagCompound; import cpw.mods.fml.common.event.FMLInterModComms; import appeng.core.AEConfig; import appeng.core.AELog; import appeng.core.AppEng; public class VersionChecker implements Runnable { private static final int FOUR_HOURS = 1000 * 3600 * 4; private final long delay; public VersionChecker() { final long now = new Date().getTime(); final long timeDiff = now - AEConfig.instance.latestTimeStamp; this.delay = Math.max( 1, FOUR_HOURS - timeDiff); } @Override public void run() { try { this.sleep( this.delay ); } catch (InterruptedException e) { // :( } while (true) { Thread.yield(); try { String MCVersion = cpw.mods.fml.common.Loader.instance().getMCVersionString().replace( "Minecraft ", "" ); URL url = new URL( "http://feeds.ae-mod.info/latest.json?VersionMC=" + MCVersion + "&Channel=" + AEConfig.CHANNEL + "&CurrentVersion=" + AEConfig.VERSION ); URLConnection yc = url.openConnection(); yc.setRequestProperty( "User-Agent", "AE2/" + AEConfig.VERSION + " (Channel:" + AEConfig.CHANNEL + ',' + MCVersion.replace( " ", ":" ) + ')' ); BufferedReader in = new BufferedReader( new InputStreamReader( yc.getInputStream() ) ); StringBuilder Version = new StringBuilder(); String inputLine; while ((inputLine = in.readLine()) != null) Version.append( inputLine ); in.close(); if ( Version.length() > 2 ) { JsonElement element = (new JsonParser()).parse( Version.toString() ); int version = element.getAsJsonObject().get( "FormatVersion" ).getAsInt(); if ( version == 1 ) { JsonObject Meta = element.getAsJsonObject().get( "Meta" ).getAsJsonObject(); JsonArray Versions = element.getAsJsonObject().get( "Versions" ).getAsJsonArray(); if ( Versions.size() > 0 ) { JsonObject Latest = Versions.get( 0 ).getAsJsonObject(); AEConfig.instance.latestVersion = Latest.get( "Version" ).getAsString(); AEConfig.instance.latestTimeStamp = (new Date()).getTime(); AEConfig.instance.save(); if ( !AEConfig.VERSION.equals( AEConfig.instance.latestVersion ) ) { NBTTagCompound versionInf = new NBTTagCompound(); versionInf.setString( "modDisplayName", "Applied Energistics 2" ); versionInf.setString( "oldVersion", AEConfig.VERSION ); versionInf.setString( "newVersion", AEConfig.instance.latestVersion ); versionInf.setString( "updateUrl", Latest.get( "UserBuild" ).getAsString() ); versionInf.setBoolean( "isDirectLink", true ); JsonElement changeLog = Latest.get( "ChangeLog" ); if ( changeLog == null ) versionInf.setString( "changeLog", "For full change log please see: " + Meta.get( "DownloadLink" ).getAsString() ); else versionInf.setString( "changeLog", changeLog.getAsString() ); versionInf.setString( "newFileName", "appliedenergistics2-" + AEConfig.instance.latestVersion + ".jar" ); FMLInterModComms.sendRuntimeMessage( AppEng.instance, "VersionChecker", "addUpdate", versionInf ); AELog.info( "Stopping VersionChecker" ); return; } } } } this.sleep( FOUR_HOURS ); } catch (Exception e) { try { this.sleep( FOUR_HOURS ); } catch (InterruptedException e1) { AELog.error( e ); } } } } private void sleep(long i) throws InterruptedException { Thread.sleep( i ); } }