package Launcher.net; import Launcher.Main; import Launcher.Tabs; import com.tofvesson.async.Async; import com.tofvesson.reflection.SafeReflection; import javafx.animation.Timeline; import javafx.scene.control.Label; import javafx.scene.layout.Pane; import javax.net.ssl.HttpsURLConnection; import java.io.*; import java.net.MalformedURLException; import java.net.URL; import java.util.regex.Matcher; import java.util.regex.Pattern; import static Launcher.Main.semVerMajor; import static Launcher.Main.semVerMinor; import static Launcher.Main.semVerPatch; /** * Simple thing for updating launcher */ public class Updater { private static volatile Updater instance; private static Async setup; public static final Pattern version = Pattern.compile("(?s).*?(\\d)\\.(\\d)\\.(\\d).*?"); // Pattern to match when finding refs private HttpsURLConnection conn; public static final URL updateURL; static { URL u = null; try { u = new URL("https://github.com/GabrielTofvesson/TeamAvionLauncher/releases"); } catch (MalformedURLException e) { e.printStackTrace(); } updateURL = u; } private Updater(Timeline t){ try { conn = (HttpsURLConnection) updateURL.openConnection(); conn.setDoOutput(true); conn.setDoInput(true); conn.setRequestMethod("GET"); conn.setRequestProperty("User-Agent", "Mozilla/5.0"); if(conn.getResponseCode()!=200){ t.play(); return; // Can't get update site } conn.connect(); BufferedReader in = new BufferedReader(new InputStreamReader( conn.getInputStream())); String inputLine; StringBuilder response = new StringBuilder(); while ((inputLine = in.readLine()) != null) response.append(inputLine); in.close(); Matcher m = version.matcher(response.toString()); String downloadLink = ""; int semMajor = semVerMajor, semMinor = semVerMinor, semPatch = semVerPatch; while(m.find()){ int semMaj = Integer.parseInt(m.group(1)), semMin = Integer.parseInt(m.group(2)), semPat = Integer.parseInt(m.group(3)); if(semMaj < semMajor || (semMaj==semMajor && semMin(SafeReflection.getFirstConstructor(Updater.class), t); } public static Updater getInstance(Timeline t) { if(setup==null) checkUpdate(t); return instance==null?instance=setup.await():instance; // Await async creation } }