increase http api item price parsing by a slightly really negligible amt

This commit is contained in:
Lucwousin
2019-10-15 11:58:30 +02:00
parent a433b58fae
commit 3b9a5df8b1
2 changed files with 21 additions and 31 deletions

View File

@@ -189,7 +189,7 @@ public class ItemClient
}); });
} }
public Observable<ItemPrice[]> getPrices() public Observable<ImmutableMap<Integer, ItemPrice>> getPrices()
{ {
HttpUrl.Builder urlBuilder = RuneLiteAPI.getApiBase().newBuilder() HttpUrl.Builder urlBuilder = RuneLiteAPI.getApiBase().newBuilder()
.addPathSegment("item") .addPathSegment("item")
@@ -199,27 +199,29 @@ public class ItemClient
logger.debug("Built URI: {}", url); logger.debug("Built URI: {}", url);
return Observable.fromCallable(() ->
return Observable.defer(() ->
{ {
Request request = new Request.Builder() Request request = new Request.Builder()
.url(url) .url(url)
.build(); .build();
try (Response response = client.newCall(request).execute()) try (JsonReader reader = new JsonReader(client.newCall(request).execute().body().charStream()))
{ {
if (!response.isSuccessful()) ImmutableMap.Builder<Integer, ItemPrice> builder = ImmutableMap.builderWithExpectedSize(3666);
reader.beginArray();
while (reader.hasNext())
{ {
logger.warn("Error looking up prices: {}", response); ItemPrice price = RuneLiteAPI.GSON.fromJson(reader, ItemPrice.class);
return Observable.just(null);
builder.put(
price.getId(),
price
);
} }
InputStream in = response.body().byteStream(); reader.endArray();
return Observable.just(RuneLiteAPI.GSON.fromJson(new InputStreamReader(in), ItemPrice[].class)); return builder.build();
}
catch (JsonParseException ex)
{
return Observable.error(ex);
} }
}); });
} }

View File

@@ -160,7 +160,7 @@ public class ItemManager
.build(new CacheLoader<ImageKey, AsyncBufferedImage>() .build(new CacheLoader<ImageKey, AsyncBufferedImage>()
{ {
@Override @Override
public AsyncBufferedImage load(@NotNull ImageKey key) throws Exception public AsyncBufferedImage load(@NotNull ImageKey key)
{ {
return loadImage(key.itemId, key.itemQuantity, key.stackable); return loadImage(key.itemId, key.itemQuantity, key.stackable);
} }
@@ -172,7 +172,7 @@ public class ItemManager
.build(new CacheLoader<Integer, ItemDefinition>() .build(new CacheLoader<Integer, ItemDefinition>()
{ {
@Override @Override
public ItemDefinition load(@NotNull Integer key) throws Exception public ItemDefinition load(@NotNull Integer key)
{ {
return client.getItemDefinition(key); return client.getItemDefinition(key);
} }
@@ -184,7 +184,7 @@ public class ItemManager
.build(new CacheLoader<OutlineKey, BufferedImage>() .build(new CacheLoader<OutlineKey, BufferedImage>()
{ {
@Override @Override
public BufferedImage load(@NotNull OutlineKey key) throws Exception public BufferedImage load(@NotNull OutlineKey key)
{ {
return loadItemOutline(key.itemId, key.itemQuantity, key.outlineColor); return loadItemOutline(key.itemId, key.itemQuantity, key.outlineColor);
} }
@@ -199,21 +199,9 @@ public class ItemManager
itemClient.getPrices() itemClient.getPrices()
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.subscribe( .subscribe(
(prices) -> m -> itemPrices = m,
{ e -> log.warn("Error loading prices", e),
if (prices != null) () -> log.debug("Loaded {} prices", itemPrices.size())
{
ImmutableMap.Builder<Integer, ItemPrice> 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)
); );
} }