From 3b9a5df8b1e6a2da059fead8ad5a80eb7da8766d Mon Sep 17 00:00:00 2001 From: Lucwousin Date: Tue, 15 Oct 2019 11:58:30 +0200 Subject: [PATCH] increase http api item price parsing by a slightly really negligible amt --- .../runelite/http/api/item/ItemClient.java | 28 ++++++++++--------- .../net/runelite/client/game/ItemManager.java | 24 ++++------------ 2 files changed, 21 insertions(+), 31 deletions(-) diff --git a/http-api/src/main/java/net/runelite/http/api/item/ItemClient.java b/http-api/src/main/java/net/runelite/http/api/item/ItemClient.java index cb0c60cda5..7e7997d445 100644 --- a/http-api/src/main/java/net/runelite/http/api/item/ItemClient.java +++ b/http-api/src/main/java/net/runelite/http/api/item/ItemClient.java @@ -189,7 +189,7 @@ public class ItemClient }); } - public Observable getPrices() + public Observable> getPrices() { HttpUrl.Builder urlBuilder = RuneLiteAPI.getApiBase().newBuilder() .addPathSegment("item") @@ -199,27 +199,29 @@ public class ItemClient logger.debug("Built URI: {}", url); - - return Observable.defer(() -> + return Observable.fromCallable(() -> { Request request = new Request.Builder() .url(url) .build(); - try (Response response = client.newCall(request).execute()) + try (JsonReader reader = new JsonReader(client.newCall(request).execute().body().charStream())) { - if (!response.isSuccessful()) + ImmutableMap.Builder builder = ImmutableMap.builderWithExpectedSize(3666); + reader.beginArray(); + + while (reader.hasNext()) { - logger.warn("Error looking up prices: {}", response); - return Observable.just(null); + ItemPrice price = RuneLiteAPI.GSON.fromJson(reader, ItemPrice.class); + + builder.put( + price.getId(), + price + ); } - InputStream in = response.body().byteStream(); - return Observable.just(RuneLiteAPI.GSON.fromJson(new InputStreamReader(in), ItemPrice[].class)); - } - catch (JsonParseException ex) - { - return Observable.error(ex); + reader.endArray(); + return builder.build(); } }); } diff --git a/runelite-client/src/main/java/net/runelite/client/game/ItemManager.java b/runelite-client/src/main/java/net/runelite/client/game/ItemManager.java index c4c64d56dd..0afcf162db 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/ItemManager.java +++ b/runelite-client/src/main/java/net/runelite/client/game/ItemManager.java @@ -160,7 +160,7 @@ public class ItemManager .build(new CacheLoader() { @Override - public AsyncBufferedImage load(@NotNull ImageKey key) throws Exception + public AsyncBufferedImage load(@NotNull ImageKey key) { return loadImage(key.itemId, key.itemQuantity, key.stackable); } @@ -172,7 +172,7 @@ public class ItemManager .build(new CacheLoader() { @Override - public ItemDefinition load(@NotNull Integer key) throws Exception + public ItemDefinition load(@NotNull Integer key) { return client.getItemDefinition(key); } @@ -184,7 +184,7 @@ public class ItemManager .build(new CacheLoader() { @Override - public BufferedImage load(@NotNull OutlineKey key) throws Exception + public BufferedImage load(@NotNull OutlineKey key) { return loadItemOutline(key.itemId, key.itemQuantity, key.outlineColor); } @@ -199,21 +199,9 @@ public class ItemManager itemClient.getPrices() .subscribeOn(Schedulers.io()) .subscribe( - (prices) -> - { - if (prices != null) - { - ImmutableMap.Builder map = ImmutableMap.builderWithExpectedSize(prices.length); - for (ItemPrice price : prices) - { - map.put(price.getId(), price); - } - itemPrices = map.build(); - } - - log.debug("Loaded {} prices", itemPrices.size()); - }, - (e) -> log.warn("error loading prices!", e) + m -> itemPrices = m, + e -> log.warn("Error loading prices", e), + () -> log.debug("Loaded {} prices", itemPrices.size()) ); }