Skip to content

Commit 992fe38

Browse files
committed
Use OkHttp refactor MojangGameLanguageImpl
1 parent ff1cf8c commit 992fe38

File tree

3 files changed

+82
-32
lines changed

3 files changed

+82
-32
lines changed

src/main/java/org/maxgamer/quickshop/localization/game/game/MojangGameLanguageImpl.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,7 @@ public void execute() {
247247
if (cachedFile.exists()) { //File exists
248248
try (FileInputStream cacheFileInputSteam = new FileInputStream(cachedFile)) {
249249
if (DigestUtils.sha1Hex(cacheFileInputSteam).equals(cacheSha1)) { //Check if file broken
250+
Util.debugLog("MojangAPI in-game translation digest check passed.");
250251
if (cacheVersion.equals(ReflectFactory.getServerVersion())) {
251252
isLatest = true;
252253
try (FileReader reader = new FileReader(cachedFile)) {

src/main/java/org/maxgamer/quickshop/util/HttpUtil.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,21 @@
1919

2020
package org.maxgamer.quickshop.util;
2121

22+
import com.google.common.cache.CacheBuilder;
23+
import lombok.val;
2224
import okhttp3.*;
2325
import org.jetbrains.annotations.NotNull;
2426

2527
import java.io.File;
2628
import java.io.IOException;
29+
import java.util.concurrent.TimeUnit;
2730

2831
public class HttpUtil {
2932
private final OkHttpClient client = new OkHttpClient.Builder()
3033
.cache(new Cache(getCacheFolder(), 50L * 1024L * 1024L)).build();
34+
protected static final com.google.common.cache.Cache<String, String> requestCachePool = CacheBuilder.newBuilder()
35+
.expireAfterWrite(7, TimeUnit.DAYS)
36+
.build();
3137

3238
public static HttpUtil create() {
3339
return new HttpUtil();
@@ -37,6 +43,27 @@ public static Response makeGet(@NotNull String url) throws IOException {
3743
return HttpUtil.create().getClient().newCall(new Request.Builder().get().url(url).build()).execute();
3844
}
3945

46+
public static String createGet(@NotNull String url) {
47+
String cache = requestCachePool.getIfPresent(url);
48+
if (cache != null) {
49+
return cache;
50+
}
51+
try (Response response = HttpUtil.create().getClient().newCall(new Request.Builder().get().url(url).build()).execute()) {
52+
val body = response.body();
53+
if (body == null) {
54+
return null;
55+
}
56+
cache = body.string();
57+
if (response.code() != 200) {
58+
return null;
59+
}
60+
requestCachePool.put(url, cache);
61+
return cache;
62+
} catch (IOException e) {
63+
return null;
64+
}
65+
}
66+
4067
public static Response makePost(@NotNull String url, @NotNull RequestBody body) throws IOException {
4168
return HttpUtil.create().getClient().newCall(new Request.Builder().post(body).url(url).build()).execute();
4269
}

src/main/java/org/maxgamer/quickshop/util/mojangapi/MojangAPI.java

Lines changed: 54 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919

2020
package org.maxgamer.quickshop.util.mojangapi;
2121

22+
import com.google.common.cache.Cache;
2223
import com.google.common.cache.CacheBuilder;
23-
import com.google.common.cache.LoadingCache;
2424
import com.google.gson.Gson;
2525
import com.google.gson.JsonElement;
2626
import com.google.gson.JsonParser;
@@ -29,14 +29,12 @@
2929
import lombok.SneakyThrows;
3030
import org.jetbrains.annotations.NotNull;
3131
import org.jetbrains.annotations.Nullable;
32-
import org.maxgamer.quickshop.util.HttpCacheLoader;
32+
import org.maxgamer.quickshop.util.HttpUtil;
3333
import org.maxgamer.quickshop.util.JsonUtil;
34+
import org.maxgamer.quickshop.util.Util;
3435

35-
import java.net.MalformedURLException;
36-
import java.net.URL;
3736
import java.util.Objects;
3837
import java.util.Optional;
39-
import java.util.concurrent.ExecutionException;
4038
import java.util.concurrent.TimeUnit;
4139

4240
public class MojangAPI {
@@ -77,29 +75,40 @@ public static class AssetsFileData {
7775

7876
@Data
7977
public static class ResourcesAPI {
80-
private final LoadingCache<URL, Optional<String>> request = CacheBuilder.newBuilder()
81-
.expireAfterAccess(10, TimeUnit.MINUTES)
82-
.build(new HttpCacheLoader());
78+
protected final Cache<String, String> requestCachePool = CacheBuilder.newBuilder()
79+
.expireAfterWrite(7, TimeUnit.DAYS)
80+
.build();
81+
// private final LoadingCache<URL, Optional<String>> request = CacheBuilder.newBuilder()
82+
// .expireAfterAccess(10, TimeUnit.MINUTES)
83+
// .build(new HttpCacheLoader());
8384
private final MojangApiMirror apiMirror;
8485

8586
public ResourcesAPI(MojangApiMirror mirror) {
8687
this.apiMirror = mirror;
8788
}
8889

8990
public Optional<String> get(@NotNull String hash) {
90-
try {
91-
return request.get(new URL(apiMirror.getResourcesDownloadRoot() + "/" + hash.substring(0, 2) + "/" + hash));
92-
} catch (ExecutionException | MalformedURLException e) {
93-
return Optional.empty();
94-
}
91+
String url = apiMirror.getResourcesDownloadRoot() + "/" + hash.substring(0, 2) + "/" + hash;
92+
return Optional.ofNullable(HttpUtil.createGet(url));
93+
// return data;
94+
95+
96+
// try {
97+
// return request.get(new URL(apiMirror.getResourcesDownloadRoot() + "/" + hash.substring(0, 2) + "/" + hash));
98+
// } catch (ExecutionException | MalformedURLException e) {
99+
// return Optional.empty();
100+
// }
95101
}
96102
}
97103

98104

99105
public static class AssetsAPI {
100-
private final LoadingCache<URL, Optional<String>> request = CacheBuilder.newBuilder()
101-
.expireAfterAccess(10, TimeUnit.MINUTES)
102-
.build(new HttpCacheLoader());
106+
protected final Cache<String, String> requestCachePool = CacheBuilder.newBuilder()
107+
.expireAfterWrite(7, TimeUnit.DAYS)
108+
.build();
109+
// private final LoadingCache<URL, Optional<String>> request = CacheBuilder.newBuilder()
110+
// .expireAfterAccess(10, TimeUnit.MINUTES)
111+
// .build(new HttpCacheLoader());
103112
private final MetaAPI metaAPI;
104113

105114
AssetsAPI(@NotNull MojangApiMirror apiMirror, @NotNull String version) {
@@ -124,13 +133,15 @@ public Optional<AssetsFileData> getGameAssetsFile() {
124133
if (assetIndexBean == null || assetIndexBean.getUrl() == null || assetIndexBean.getId() == null) {
125134
return Optional.empty();
126135
}
136+
String data = HttpUtil.createGet(assetIndexBean.getUrl());
137+
return Optional.of(new AssetsFileData(data, assetIndexBean.getSha1(), assetIndexBean.getId()));
127138

128-
try {
129-
Optional<String> fileContent = request.get(new URL(assetIndexBean.getUrl()));
130-
return fileContent.map(s -> new AssetsFileData(s, assetIndexBean.getSha1(), assetIndexBean.getId()));
131-
} catch (ExecutionException | MalformedURLException e) {
132-
return Optional.empty();
133-
}
139+
// try {
140+
// Optional<String> fileContent = request.get(new URL(assetIndexBean.getUrl()));
141+
// return fileContent.map(s -> new AssetsFileData(s, assetIndexBean.getSha1(), assetIndexBean.getId()));
142+
// } catch (ExecutionException | MalformedURLException e) {
143+
// return Optional.empty();
144+
// }
134145

135146
}
136147

@@ -154,6 +165,9 @@ private Optional<GameInfoAPI.DataBean> getAssetsJson() {
154165
public static class GameInfoAPI {
155166
private final String json;
156167
private final Gson gson = JsonUtil.getGson();
168+
protected final Cache<String, String> requestCachePool = CacheBuilder.newBuilder()
169+
.expireAfterWrite(7, TimeUnit.DAYS)
170+
.build();
157171

158172
public GameInfoAPI(@NotNull String json) {
159173
this.json = json;
@@ -195,16 +209,18 @@ public static class AssetIndexBean {
195209

196210
public static class MetaAPI {
197211
//Cache with URL and Content(String)
198-
private final LoadingCache<URL, Optional<String>> request = CacheBuilder.newBuilder()
199-
.expireAfterAccess(10, TimeUnit.MINUTES)
200-
.build(new HttpCacheLoader());
201-
private final URL metaEndpoint;
212+
// private final LoadingCache<URL, Optional<String>> request = CacheBuilder.newBuilder()
213+
// .expireAfterAccess(10, TimeUnit.MINUTES)
214+
// .build(new HttpCacheLoader());
215+
protected final Cache<String, String> requestCachePool = CacheBuilder.newBuilder()
216+
.expireAfterWrite(7, TimeUnit.DAYS)
217+
.build();
218+
private final String metaEndpoint;
202219
private final String version;
203220

204-
@SneakyThrows
205221
public MetaAPI(@NotNull MojangApiMirror mirror, @NotNull String version) {
206222
this.version = version;
207-
this.metaEndpoint = new URL(mirror.getLauncherMetaRoot() + "/mc/game/version_manifest.json");
223+
this.metaEndpoint = mirror.getLauncherMetaRoot() + "/mc/game/version_manifest.json";
208224
}
209225

210226
/**
@@ -214,12 +230,18 @@ public MetaAPI(@NotNull MojangApiMirror mirror, @NotNull String version) {
214230
*/
215231
@SneakyThrows
216232
public Optional<String> get() {
217-
Optional<String> result = request.get(this.metaEndpoint);
218-
if (!result.isPresent()) {
233+
234+
String result = HttpUtil.createGet(this.metaEndpoint);
235+
// Optional<String> result = request.get(this.metaEndpoint);
236+
// if (!result.isPresent()) {
237+
// return Optional.empty();
238+
// }
239+
if (result == null) {
240+
Util.debugLog("Request Meta Endpoint failed.");
219241
return Optional.empty();
220242
}
221243
try {
222-
JsonElement index = new JsonParser().parse(result.get());
244+
JsonElement index = new JsonParser().parse(result);
223245
if (!index.isJsonObject()) {
224246
return Optional.empty();
225247
}
@@ -232,7 +254,7 @@ public Optional<String> get() {
232254
JsonElement gameId = gameVersionData.getAsJsonObject().get("id");
233255
JsonElement gameIndexUrl = gameVersionData.getAsJsonObject().get("url");
234256
if (Objects.equals(gameId.getAsString(), version)) {
235-
return request.get(new URL(gameIndexUrl.getAsString()));
257+
return Optional.ofNullable(HttpUtil.createGet(gameIndexUrl.getAsString()));
236258
}
237259
}
238260
}

0 commit comments

Comments
 (0)