From 423871746081878e3ce462cb4a7fb2d41fd76f73 Mon Sep 17 00:00:00 2001 From: carbotaniuman <41451839+carbotaniuman@users.noreply.github.com> Date: Sat, 6 Jun 2020 22:34:43 -0500 Subject: [PATCH] Cache updates --- build.gradle | 2 +- src/main/java/mdnet/base/MangadexClient.java | 30 +++++++++++++++----- src/main/java/mdnet/base/ServerSettings.java | 12 ++++++-- src/main/kotlin/mdnet/base/Application.kt | 5 +--- 4 files changed, 35 insertions(+), 14 deletions(-) diff --git a/build.gradle b/build.gradle index e9a7010..7c31762 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ plugins { } group = 'com.mangadex' -version = '1.0.0-rc1' +version = '1.0.0-rc2' mainClassName = 'mdnet.base.MangadexClient' repositories { diff --git a/src/main/java/mdnet/base/MangadexClient.java b/src/main/java/mdnet/base/MangadexClient.java index 677d85a..1a6035f 100644 --- a/src/main/java/mdnet/base/MangadexClient.java +++ b/src/main/java/mdnet/base/MangadexClient.java @@ -48,6 +48,12 @@ public class MangadexClient { public void runLoop() { statistics.set(new Statistics()); loginAndStartServer(); + if (serverSettings.getLatestBuild() > Constants.CLIENT_BUILD) { + if (LOGGER.isWarnEnabled()) { + LOGGER.warn("Outdated build detected! Latest: {}, Current: {}", serverSettings.getLatestBuild(), + Constants.CLIENT_BUILD); + } + } if (LOGGER.isInfoEnabled()) { LOGGER.info("MDNet initialization completed successfully. Starting normal operation."); @@ -94,19 +100,29 @@ public class MangadexClient { } ServerSettings n = serverHandler.pingControl(serverSettings); + if (LOGGER.isInfoEnabled()) { LOGGER.info("Server settings received: {}", n); } - if (n != null && (n.getTls() != null || !n.getImageServer().equals(serverSettings.getImageServer()))) { - // certificates or upstream url must have changed, restart webserver - if (LOGGER.isInfoEnabled()) { - LOGGER.info("Doing internal restart of HTTP server to refresh certs/upstream URL"); + if (n != null) { + if (n.getLatestBuild() > Constants.CLIENT_BUILD) { + if (LOGGER.isWarnEnabled()) { + LOGGER.warn("Outdated build detected! Latest: {}, Current: {}", n.getLatestBuild(), + Constants.CLIENT_BUILD); + } } - synchronized (shutdownLock) { - logoutAndStopServer(); - loginAndStartServer(); + if (n.getTls() != null || !n.getImageServer().equals(serverSettings.getImageServer())) { + // certificates or upstream url must have changed, restart webserver + if (LOGGER.isInfoEnabled()) { + LOGGER.info("Doing internal restart of HTTP server to refresh certs/upstream URL"); + } + + synchronized (shutdownLock) { + logoutAndStopServer(); + loginAndStartServer(); + } } } }, 45, 45, TimeUnit.SECONDS); diff --git a/src/main/java/mdnet/base/ServerSettings.java b/src/main/java/mdnet/base/ServerSettings.java index 4938957..805315d 100644 --- a/src/main/java/mdnet/base/ServerSettings.java +++ b/src/main/java/mdnet/base/ServerSettings.java @@ -8,10 +8,13 @@ public final class ServerSettings { @SerializedName("image_server") private final String imageServer; private final TlsCert tls; + @SerializedName("latest_build") + private final int latestBuild; - public ServerSettings(String imageServer, TlsCert tls) { + public ServerSettings(String imageServer, TlsCert tls, int latestBuild) { this.imageServer = Objects.requireNonNull(imageServer); this.tls = tls; + this.latestBuild = latestBuild; } public String getImageServer() { @@ -22,9 +25,14 @@ public final class ServerSettings { return tls; } + public int getLatestBuild() { + return latestBuild; + } + @Override public String toString() { - return "ServerSettings{" + "imageServer='" + imageServer + '\'' + ", tls=" + "" + '}'; + return "ServerSettings{" + "imageServer='" + imageServer + '\'' + ", tls=" + tls + ", latestBuild=" + + latestBuild + '}'; } @Override diff --git a/src/main/kotlin/mdnet/base/Application.kt b/src/main/kotlin/mdnet/base/Application.kt index fe7c339..3de5fc1 100644 --- a/src/main/kotlin/mdnet/base/Application.kt +++ b/src/main/kotlin/mdnet/base/Application.kt @@ -149,13 +149,10 @@ private val HTTP_TIME_FORMATTER = DateTimeFormatter.ofPattern("EEE, dd MMM yyyy private fun addCommonHeaders(): Filter { return Filter { next: HttpHandler -> { request: Request -> - val now = ZonedDateTime.now(ZoneOffset.UTC) val response = next(request) - response.header("Date", HTTP_TIME_FORMATTER.format(now)) + response.header("Date", HTTP_TIME_FORMATTER.format(ZonedDateTime.now(ZoneOffset.UTC))) .header("Server", "Mangadex@Home Node") .header("Cache-Control", listOf("public", MaxAgeTtl(Constants.MAX_AGE_CACHE).toHeaderValue()).joinToString(", ")) - .header("Expires", HTTP_TIME_FORMATTER.format(now.plusSeconds(Constants.MAX_AGE_CACHE.seconds))) - .header("Cache-Control", "public, max-age=604800") // 1 week browser cache .header("Timing-Allow-Origin", "https://mangadex.org") } }