http-api: Use observables for ItemClient
This commit is contained in:
@@ -26,6 +26,7 @@ package net.runelite.http.api.item;
|
|||||||
|
|
||||||
import com.google.gson.JsonParseException;
|
import com.google.gson.JsonParseException;
|
||||||
import com.google.gson.reflect.TypeToken;
|
import com.google.gson.reflect.TypeToken;
|
||||||
|
import io.reactivex.Observable;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
@@ -112,7 +113,7 @@ public class ItemClient
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public BufferedImage getIcon(int itemId) throws IOException
|
public Observable<BufferedImage> getIcon(int itemId)
|
||||||
{
|
{
|
||||||
HttpUrl url = RuneLiteAPI.getApiBase().newBuilder()
|
HttpUrl url = RuneLiteAPI.getApiBase().newBuilder()
|
||||||
.addPathSegment("item")
|
.addPathSegment("item")
|
||||||
@@ -126,23 +127,26 @@ public class ItemClient
|
|||||||
.url(url)
|
.url(url)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute())
|
return Observable.defer(() ->
|
||||||
{
|
{
|
||||||
if (!response.isSuccessful())
|
try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute())
|
||||||
{
|
{
|
||||||
logger.debug("Error grabbing icon {}: {}", itemId, response);
|
if (!response.isSuccessful())
|
||||||
return null;
|
{
|
||||||
}
|
logger.debug("Error grabbing icon {}: {}", itemId, response);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
InputStream in = response.body().byteStream();
|
InputStream in = response.body().byteStream();
|
||||||
synchronized (ImageIO.class)
|
synchronized (ImageIO.class)
|
||||||
{
|
{
|
||||||
return ImageIO.read(in);
|
return Observable.just(ImageIO.read(in));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public SearchResult search(String itemName) throws IOException
|
public Observable<SearchResult> search(String itemName)
|
||||||
{
|
{
|
||||||
HttpUrl url = RuneLiteAPI.getApiBase().newBuilder()
|
HttpUrl url = RuneLiteAPI.getApiBase().newBuilder()
|
||||||
.addPathSegment("item")
|
.addPathSegment("item")
|
||||||
@@ -152,28 +156,31 @@ public class ItemClient
|
|||||||
|
|
||||||
logger.debug("Built URI: {}", url);
|
logger.debug("Built URI: {}", url);
|
||||||
|
|
||||||
Request request = new Request.Builder()
|
return Observable.defer(() ->
|
||||||
.url(url)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute())
|
|
||||||
{
|
{
|
||||||
if (!response.isSuccessful())
|
Request request = new Request.Builder()
|
||||||
|
.url(url)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute())
|
||||||
{
|
{
|
||||||
logger.debug("Error looking up item {}: {}", itemName, response);
|
if (!response.isSuccessful())
|
||||||
return null;
|
{
|
||||||
}
|
logger.debug("Error looking up item {}: {}", itemName, response);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
InputStream in = response.body().byteStream();
|
InputStream in = response.body().byteStream();
|
||||||
return RuneLiteAPI.GSON.fromJson(new InputStreamReader(in), SearchResult.class);
|
return Observable.just(RuneLiteAPI.GSON.fromJson(new InputStreamReader(in), SearchResult.class));
|
||||||
}
|
}
|
||||||
catch (JsonParseException ex)
|
catch (JsonParseException ex)
|
||||||
{
|
{
|
||||||
throw new IOException(ex);
|
return Observable.error(ex);
|
||||||
}
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public ItemPrice[] getPrices() throws IOException
|
public Observable<ItemPrice[]> getPrices()
|
||||||
{
|
{
|
||||||
HttpUrl.Builder urlBuilder = RuneLiteAPI.getApiBase().newBuilder()
|
HttpUrl.Builder urlBuilder = RuneLiteAPI.getApiBase().newBuilder()
|
||||||
.addPathSegment("item")
|
.addPathSegment("item")
|
||||||
@@ -183,28 +190,32 @@ public class ItemClient
|
|||||||
|
|
||||||
logger.debug("Built URI: {}", url);
|
logger.debug("Built URI: {}", url);
|
||||||
|
|
||||||
Request request = new Request.Builder()
|
|
||||||
.url(url)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute())
|
return Observable.defer(() ->
|
||||||
{
|
{
|
||||||
if (!response.isSuccessful())
|
Request request = new Request.Builder()
|
||||||
|
.url(url)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute())
|
||||||
{
|
{
|
||||||
logger.warn("Error looking up prices: {}", response);
|
if (!response.isSuccessful())
|
||||||
return null;
|
{
|
||||||
}
|
logger.warn("Error looking up prices: {}", response);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
InputStream in = response.body().byteStream();
|
InputStream in = response.body().byteStream();
|
||||||
return RuneLiteAPI.GSON.fromJson(new InputStreamReader(in), ItemPrice[].class);
|
return Observable.just(RuneLiteAPI.GSON.fromJson(new InputStreamReader(in), ItemPrice[].class));
|
||||||
}
|
}
|
||||||
catch (JsonParseException ex)
|
catch (JsonParseException ex)
|
||||||
{
|
{
|
||||||
throw new IOException(ex);
|
return Observable.error(ex);
|
||||||
}
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<Integer, ItemStats> getStats() throws IOException
|
public Observable<Map<Integer, ItemStats>> getStats()
|
||||||
{
|
{
|
||||||
HttpUrl.Builder urlBuilder = RuneLiteAPI.getStaticBase().newBuilder()
|
HttpUrl.Builder urlBuilder = RuneLiteAPI.getStaticBase().newBuilder()
|
||||||
.addPathSegment("item")
|
.addPathSegment("item")
|
||||||
@@ -215,27 +226,31 @@ public class ItemClient
|
|||||||
|
|
||||||
logger.debug("Built URI: {}", url);
|
logger.debug("Built URI: {}", url);
|
||||||
|
|
||||||
Request request = new Request.Builder()
|
|
||||||
.url(url)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute())
|
return Observable.defer(() ->
|
||||||
{
|
{
|
||||||
if (!response.isSuccessful())
|
Request request = new Request.Builder()
|
||||||
|
.url(url)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute())
|
||||||
{
|
{
|
||||||
logger.warn("Error looking up item stats: {}", response);
|
if (!response.isSuccessful())
|
||||||
return null;
|
{
|
||||||
|
logger.warn("Error looking up item stats: {}", response);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
InputStream in = response.body().byteStream();
|
||||||
|
final Type typeToken = new TypeToken<Map<Integer, ItemStats>>()
|
||||||
|
{
|
||||||
|
}.getType();
|
||||||
|
return Observable.just(RuneLiteAPI.GSON.fromJson(new InputStreamReader(in), typeToken));
|
||||||
}
|
}
|
||||||
|
catch (JsonParseException ex)
|
||||||
InputStream in = response.body().byteStream();
|
|
||||||
final Type typeToken = new TypeToken<Map<Integer, ItemStats>>()
|
|
||||||
{
|
{
|
||||||
}.getType();
|
return Observable.error(ex);
|
||||||
return RuneLiteAPI.GSON.fromJson(new InputStreamReader(in), typeToken);
|
}
|
||||||
}
|
});
|
||||||
catch (JsonParseException ex)
|
|
||||||
{
|
|
||||||
throw new IOException(ex);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,9 +30,9 @@ import com.google.common.cache.LoadingCache;
|
|||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.reflect.TypeToken;
|
import com.google.gson.reflect.TypeToken;
|
||||||
|
import io.reactivex.schedulers.Schedulers;
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
@@ -209,43 +209,42 @@ public class ItemManager
|
|||||||
|
|
||||||
private void loadPrices()
|
private void loadPrices()
|
||||||
{
|
{
|
||||||
try
|
itemClient.getPrices()
|
||||||
{
|
.subscribeOn(Schedulers.io())
|
||||||
ItemPrice[] prices = itemClient.getPrices();
|
.subscribe(
|
||||||
if (prices != null)
|
(prices) ->
|
||||||
{
|
|
||||||
ImmutableMap.Builder<Integer, ItemPrice> map = ImmutableMap.builderWithExpectedSize(prices.length);
|
|
||||||
for (ItemPrice price : prices)
|
|
||||||
{
|
{
|
||||||
map.put(price.getId(), price);
|
if (prices != null)
|
||||||
}
|
{
|
||||||
itemPrices = map.build();
|
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());
|
log.debug("Loaded {} prices", itemPrices.size());
|
||||||
}
|
},
|
||||||
catch (IOException e)
|
(e) -> log.warn("error loading prices!", e)
|
||||||
{
|
);
|
||||||
log.warn("error loading prices!", e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadStats()
|
private void loadStats()
|
||||||
{
|
{
|
||||||
try
|
itemClient.getStats()
|
||||||
{
|
.subscribeOn(Schedulers.io())
|
||||||
final Map<Integer, ItemStats> stats = itemClient.getStats();
|
.subscribe(
|
||||||
if (stats != null)
|
(stats) -> {
|
||||||
{
|
if (stats != null)
|
||||||
itemStats = ImmutableMap.copyOf(stats);
|
{
|
||||||
}
|
itemStats = ImmutableMap.copyOf(stats);
|
||||||
|
}
|
||||||
|
|
||||||
log.debug("Loaded {} stats", itemStats.size());
|
log.debug("Loaded {} stats", itemStats.size());
|
||||||
}
|
},
|
||||||
catch (IOException e)
|
(e) -> log.warn("error loading stats!", e)
|
||||||
{
|
);
|
||||||
log.warn("error loading stats!", e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onGameStateChanged(final GameStateChanged event)
|
private void onGameStateChanged(final GameStateChanged event)
|
||||||
|
|||||||
Reference in New Issue
Block a user