diff --git a/src/main/java/org/maxgamer/quickshop/localization/game/game/MojangGameLanguageImpl.java b/src/main/java/org/maxgamer/quickshop/localization/game/game/MojangGameLanguageImpl.java index bfebcf465..07dff80c7 100644 --- a/src/main/java/org/maxgamer/quickshop/localization/game/game/MojangGameLanguageImpl.java +++ b/src/main/java/org/maxgamer/quickshop/localization/game/game/MojangGameLanguageImpl.java @@ -247,6 +247,7 @@ public class MojangGameLanguageImpl extends BukkitGameLanguageImpl implements Ga if (cachedFile.exists()) { //File exists try (FileInputStream cacheFileInputSteam = new FileInputStream(cachedFile)) { if (DigestUtils.sha1Hex(cacheFileInputSteam).equals(cacheSha1)) { //Check if file broken + Util.debugLog("MojangAPI in-game translation digest check passed."); if (cacheVersion.equals(ReflectFactory.getServerVersion())) { isLatest = true; try (FileReader reader = new FileReader(cachedFile)) { diff --git a/src/main/java/org/maxgamer/quickshop/util/HttpUtil.java b/src/main/java/org/maxgamer/quickshop/util/HttpUtil.java index 475ae1ad4..c77028bc3 100644 --- a/src/main/java/org/maxgamer/quickshop/util/HttpUtil.java +++ b/src/main/java/org/maxgamer/quickshop/util/HttpUtil.java @@ -19,15 +19,21 @@ package org.maxgamer.quickshop.util; +import com.google.common.cache.CacheBuilder; +import lombok.val; import okhttp3.*; import org.jetbrains.annotations.NotNull; import java.io.File; import java.io.IOException; +import java.util.concurrent.TimeUnit; public class HttpUtil { private final OkHttpClient client = new OkHttpClient.Builder() .cache(new Cache(getCacheFolder(), 50L * 1024L * 1024L)).build(); + protected static final com.google.common.cache.Cache requestCachePool = CacheBuilder.newBuilder() + .expireAfterWrite(7, TimeUnit.DAYS) + .build(); public static HttpUtil create() { return new HttpUtil(); @@ -37,6 +43,27 @@ public class HttpUtil { return HttpUtil.create().getClient().newCall(new Request.Builder().get().url(url).build()).execute(); } + public static String createGet(@NotNull String url) { + String cache = requestCachePool.getIfPresent(url); + if (cache != null) { + return cache; + } + try (Response response = HttpUtil.create().getClient().newCall(new Request.Builder().get().url(url).build()).execute()) { + val body = response.body(); + if (body == null) { + return null; + } + cache = body.string(); + if (response.code() != 200) { + return null; + } + requestCachePool.put(url, cache); + return cache; + } catch (IOException e) { + return null; + } + } + public static Response makePost(@NotNull String url, @NotNull RequestBody body) throws IOException { return HttpUtil.create().getClient().newCall(new Request.Builder().post(body).url(url).build()).execute(); } diff --git a/src/main/java/org/maxgamer/quickshop/util/mojangapi/MojangAPI.java b/src/main/java/org/maxgamer/quickshop/util/mojangapi/MojangAPI.java index 72b960e3d..182abf5d6 100644 --- a/src/main/java/org/maxgamer/quickshop/util/mojangapi/MojangAPI.java +++ b/src/main/java/org/maxgamer/quickshop/util/mojangapi/MojangAPI.java @@ -19,8 +19,8 @@ package org.maxgamer.quickshop.util.mojangapi; +import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; -import com.google.common.cache.LoadingCache; import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonParser; @@ -29,14 +29,12 @@ import lombok.Data; import lombok.SneakyThrows; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.maxgamer.quickshop.util.HttpCacheLoader; +import org.maxgamer.quickshop.util.HttpUtil; import org.maxgamer.quickshop.util.JsonUtil; +import org.maxgamer.quickshop.util.Util; -import java.net.MalformedURLException; -import java.net.URL; import java.util.Objects; import java.util.Optional; -import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; public class MojangAPI { @@ -77,9 +75,12 @@ public class MojangAPI { @Data public static class ResourcesAPI { - private final LoadingCache> request = CacheBuilder.newBuilder() - .expireAfterAccess(10, TimeUnit.MINUTES) - .build(new HttpCacheLoader()); + protected final Cache requestCachePool = CacheBuilder.newBuilder() + .expireAfterWrite(7, TimeUnit.DAYS) + .build(); + // private final LoadingCache> request = CacheBuilder.newBuilder() +// .expireAfterAccess(10, TimeUnit.MINUTES) +// .build(new HttpCacheLoader()); private final MojangApiMirror apiMirror; public ResourcesAPI(MojangApiMirror mirror) { @@ -87,19 +88,27 @@ public class MojangAPI { } public Optional get(@NotNull String hash) { - try { - return request.get(new URL(apiMirror.getResourcesDownloadRoot() + "/" + hash.substring(0, 2) + "/" + hash)); - } catch (ExecutionException | MalformedURLException e) { - return Optional.empty(); - } + String url = apiMirror.getResourcesDownloadRoot() + "/" + hash.substring(0, 2) + "/" + hash; + return Optional.ofNullable(HttpUtil.createGet(url)); + // return data; + + +// try { +// return request.get(new URL(apiMirror.getResourcesDownloadRoot() + "/" + hash.substring(0, 2) + "/" + hash)); +// } catch (ExecutionException | MalformedURLException e) { +// return Optional.empty(); +// } } } public static class AssetsAPI { - private final LoadingCache> request = CacheBuilder.newBuilder() - .expireAfterAccess(10, TimeUnit.MINUTES) - .build(new HttpCacheLoader()); + protected final Cache requestCachePool = CacheBuilder.newBuilder() + .expireAfterWrite(7, TimeUnit.DAYS) + .build(); + // private final LoadingCache> request = CacheBuilder.newBuilder() +// .expireAfterAccess(10, TimeUnit.MINUTES) +// .build(new HttpCacheLoader()); private final MetaAPI metaAPI; AssetsAPI(@NotNull MojangApiMirror apiMirror, @NotNull String version) { @@ -124,13 +133,15 @@ public class MojangAPI { if (assetIndexBean == null || assetIndexBean.getUrl() == null || assetIndexBean.getId() == null) { return Optional.empty(); } + String data = HttpUtil.createGet(assetIndexBean.getUrl()); + return Optional.of(new AssetsFileData(data, assetIndexBean.getSha1(), assetIndexBean.getId())); - try { - Optional fileContent = request.get(new URL(assetIndexBean.getUrl())); - return fileContent.map(s -> new AssetsFileData(s, assetIndexBean.getSha1(), assetIndexBean.getId())); - } catch (ExecutionException | MalformedURLException e) { - return Optional.empty(); - } +// try { +// Optional fileContent = request.get(new URL(assetIndexBean.getUrl())); +// return fileContent.map(s -> new AssetsFileData(s, assetIndexBean.getSha1(), assetIndexBean.getId())); +// } catch (ExecutionException | MalformedURLException e) { +// return Optional.empty(); +// } } @@ -154,6 +165,9 @@ public class MojangAPI { public static class GameInfoAPI { private final String json; private final Gson gson = JsonUtil.getGson(); + protected final Cache requestCachePool = CacheBuilder.newBuilder() + .expireAfterWrite(7, TimeUnit.DAYS) + .build(); public GameInfoAPI(@NotNull String json) { this.json = json; @@ -195,16 +209,18 @@ public class MojangAPI { public static class MetaAPI { //Cache with URL and Content(String) - private final LoadingCache> request = CacheBuilder.newBuilder() - .expireAfterAccess(10, TimeUnit.MINUTES) - .build(new HttpCacheLoader()); - private final URL metaEndpoint; +// private final LoadingCache> request = CacheBuilder.newBuilder() +// .expireAfterAccess(10, TimeUnit.MINUTES) +// .build(new HttpCacheLoader()); + protected final Cache requestCachePool = CacheBuilder.newBuilder() + .expireAfterWrite(7, TimeUnit.DAYS) + .build(); + private final String metaEndpoint; private final String version; - @SneakyThrows public MetaAPI(@NotNull MojangApiMirror mirror, @NotNull String version) { this.version = version; - this.metaEndpoint = new URL(mirror.getLauncherMetaRoot() + "/mc/game/version_manifest.json"); + this.metaEndpoint = mirror.getLauncherMetaRoot() + "/mc/game/version_manifest.json"; } /** @@ -214,12 +230,18 @@ public class MojangAPI { */ @SneakyThrows public Optional get() { - Optional result = request.get(this.metaEndpoint); - if (!result.isPresent()) { + + String result = HttpUtil.createGet(this.metaEndpoint); +// Optional result = request.get(this.metaEndpoint); +// if (!result.isPresent()) { +// return Optional.empty(); +// } + if (result == null) { + Util.debugLog("Request Meta Endpoint failed."); return Optional.empty(); } try { - JsonElement index = new JsonParser().parse(result.get()); + JsonElement index = new JsonParser().parse(result); if (!index.isJsonObject()) { return Optional.empty(); } @@ -232,7 +254,7 @@ public class MojangAPI { JsonElement gameId = gameVersionData.getAsJsonObject().get("id"); JsonElement gameIndexUrl = gameVersionData.getAsJsonObject().get("url"); if (Objects.equals(gameId.getAsString(), version)) { - return request.get(new URL(gameIndexUrl.getAsString())); + return Optional.ofNullable(HttpUtil.createGet(gameIndexUrl.getAsString())); } } }