From 64826131fc11ff0fc92eb0f214912a5e1b4eb0d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Lamy?= Date: Wed, 15 Jan 2025 21:29:59 -0500 Subject: [PATCH] refactor: optimize version fetching with fastFetchLatestReleaseVersion method --- .../app/owlcms/fly/flydata/VersionInfo.java | 38 +++++++++++++++++-- src/main/java/app/owlcms/fly/ui/AppsView.java | 2 +- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/main/java/app/owlcms/fly/flydata/VersionInfo.java b/src/main/java/app/owlcms/fly/flydata/VersionInfo.java index 8def390..f5ac9b2 100644 --- a/src/main/java/app/owlcms/fly/flydata/VersionInfo.java +++ b/src/main/java/app/owlcms/fly/flydata/VersionInfo.java @@ -31,7 +31,7 @@ public VersionInfo(String currentVersionString) { public void updateReferenceVersionString(boolean preRelease) { String apiUrl = "https://api.github.com/repos/owlcms/owlcms4/releases"; - this.referenceVersionString = fetchLatestReleaseVersion(apiUrl); + this.referenceVersionString = fastFetchLatestReleaseVersion(apiUrl); if (!"latest".equals(currentVersionString)) { ComparableVersion currentVersion = new ComparableVersion(this.currentVersionString); @@ -62,7 +62,7 @@ public String getCurrentVersionString() { return currentVersionString; } - public static String fetchLatestReleaseVersion(String apiUrl) { + public static String fullFetchLatestReleaseVersion(String apiUrl) { long now = System.currentTimeMillis(); try { URL url = new URL(apiUrl); @@ -92,7 +92,7 @@ public static String fetchLatestReleaseVersion(String apiUrl) { } Collections.sort(versions, Comparator.reverseOrder()); - logger.info("fetchLatestReleaseVersion took {} ms", System.currentTimeMillis() - now); + logger.info("fullFetchLatestReleaseVersion took {} ms", System.currentTimeMillis() - now); return versions.get(0).getValue(); } catch (IOException e) { @@ -100,4 +100,36 @@ public static String fetchLatestReleaseVersion(String apiUrl) { return "unknown"; } } + + public static String fastFetchLatestReleaseVersion(String apiUrl) { + long now = System.currentTimeMillis(); + try { + URL url = new URL(apiUrl + "/latest"); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("GET"); + conn.setRequestProperty("Accept", "application/vnd.github.v3+json"); + + if (conn.getResponseCode() != 200) { + throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode()); + } + + Scanner scanner = new Scanner(url.openStream()); + String inline = ""; + while (scanner.hasNext()) { + inline += scanner.nextLine(); + } + scanner.close(); + + JsonParser parser = new JsonParser(); + JsonObject release = parser.parse(inline).getAsJsonObject(); + String latestVersion = release.get("tag_name").getAsString(); + + logger.info("fastFetchLatestReleaseVersion took {} ms", System.currentTimeMillis() - now); + return latestVersion; + + } catch (IOException e) { + e.printStackTrace(); + return "unknown"; + } + } } diff --git a/src/main/java/app/owlcms/fly/ui/AppsView.java b/src/main/java/app/owlcms/fly/ui/AppsView.java index 119d834..f6acea3 100644 --- a/src/main/java/app/owlcms/fly/ui/AppsView.java +++ b/src/main/java/app/owlcms/fly/ui/AppsView.java @@ -576,6 +576,6 @@ public String generateRandomString(int length) { } private String getLatestReleaseVersion() { - return VersionInfo.fetchLatestReleaseVersion("https://api.github.com/repos/owlcms/owlcms4/releases"); + return VersionInfo.fastFetchLatestReleaseVersion("https://api.github.com/repos/owlcms/owlcms4/releases"); } }