diff --git a/http-api/pom.xml b/http-api/pom.xml
index b23c17e47d..d9422499e7 100644
--- a/http-api/pom.xml
+++ b/http-api/pom.xml
@@ -79,6 +79,11 @@
com.squareup.okhttp3
mockwebserver
+
+ io.reactivex.rxjava2
+ rxjava
+ 2.2.10
+
diff --git a/http-api/src/main/java/net/runelite/http/api/osbuddy/OSBGrandExchangeClient.java b/http-api/src/main/java/net/runelite/http/api/osbuddy/OSBGrandExchangeClient.java
index c01337fdc0..3c187552fc 100644
--- a/http-api/src/main/java/net/runelite/http/api/osbuddy/OSBGrandExchangeClient.java
+++ b/http-api/src/main/java/net/runelite/http/api/osbuddy/OSBGrandExchangeClient.java
@@ -25,6 +25,7 @@
package net.runelite.http.api.osbuddy;
import com.google.gson.JsonParseException;
+import io.reactivex.Observable;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
@@ -37,7 +38,7 @@ import okhttp3.Response;
@Slf4j
public class OSBGrandExchangeClient
{
- public OSBGrandExchangeResult lookupItem(int itemId) throws IOException
+ public Observable lookupItem(int itemId)
{
final HttpUrl url = RuneLiteAPI.getApiBase().newBuilder()
.addPathSegment("osb")
@@ -47,23 +48,26 @@ public class OSBGrandExchangeClient
log.debug("Built URI: {}", url);
- final Request request = new Request.Builder()
- .url(url)
- .build();
-
- try (final Response response = RuneLiteAPI.CLIENT.newCall(request).execute())
+ return Observable.defer(() ->
{
- if (!response.isSuccessful())
+ Request request = new Request.Builder()
+ .url(url)
+ .build();
+
+ try (final Response response = RuneLiteAPI.CLIENT.newCall(request).execute())
{
- throw new IOException("Error looking up item id: " + response);
- }
+ if (!response.isSuccessful())
+ {
+ throw new IOException("Error looking up item id: " + response);
+ }
- final InputStream in = response.body().byteStream();
- return RuneLiteAPI.GSON.fromJson(new InputStreamReader(in), OSBGrandExchangeResult.class);
- }
- catch (JsonParseException ex)
- {
- throw new IOException(ex);
- }
+ final InputStream in = response.body().byteStream();
+ return Observable.just(RuneLiteAPI.GSON.fromJson(new InputStreamReader(in), OSBGrandExchangeResult.class));
+ }
+ catch (JsonParseException e)
+ {
+ return Observable.error(e);
+ }
+ });
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java
index a17596f99c..521da25b34 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java
@@ -25,15 +25,15 @@
*/
package net.runelite.client.plugins.chatcommands;
-import javax.inject.Singleton;
-import net.runelite.api.vars.AccountType;
import com.google.inject.Provides;
+import io.reactivex.schedulers.Schedulers;
import java.io.IOException;
import java.util.List;
import java.util.concurrent.ScheduledExecutorService;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.inject.Inject;
+import javax.inject.Singleton;
import lombok.Value;
import lombok.extern.slf4j.Slf4j;
import net.runelite.api.ChatMessageType;
@@ -48,6 +48,7 @@ import net.runelite.api.events.ChatMessage;
import net.runelite.api.events.GameTick;
import net.runelite.api.events.VarbitChanged;
import net.runelite.api.events.WidgetLoaded;
+import net.runelite.api.vars.AccountType;
import net.runelite.api.widgets.Widget;
import static net.runelite.api.widgets.WidgetID.KILL_LOGS_GROUP_ID;
import net.runelite.api.widgets.WidgetInfo;
@@ -74,7 +75,6 @@ import net.runelite.http.api.hiscore.SingleHiscoreSkillResult;
import net.runelite.http.api.hiscore.Skill;
import net.runelite.http.api.item.ItemPrice;
import net.runelite.http.api.osbuddy.OSBGrandExchangeClient;
-import net.runelite.http.api.osbuddy.OSBGrandExchangeResult;
import org.apache.commons.text.WordUtils;
@PluginDescriptor(
@@ -822,49 +822,46 @@ public class ChatCommandsPlugin extends Plugin
if (!results.isEmpty())
{
ItemPrice item = retrieveFromList(results, search);
- OSBGrandExchangeResult osbresult = new OSBGrandExchangeResult();
- try
- {
- osbresult = CLIENT.lookupItem(item.getId());
- }
- catch (IOException e)
- {
- log.error("Error looking up prices", e);
- }
+ CLIENT.lookupItem(item.getId())
+ .subscribeOn(Schedulers.single())
+ .subscribe(
+ (osbresult) ->
+ {
+ int itemId = item.getId();
+ int itemPrice = itemManager.getItemPrice(itemId);
- int itemId = item.getId();
- int itemPrice = itemManager.getItemPrice(itemId);
+ final ChatMessageBuilder builder = new ChatMessageBuilder();
+ builder.append(ChatColorType.NORMAL);
+ builder.append(ChatColorType.HIGHLIGHT);
+ builder.append(item.getName());
+ builder.append(ChatColorType.NORMAL);
+ builder.append(": GE ");
+ builder.append(ChatColorType.HIGHLIGHT);
+ builder.append(StackFormatter.formatNumber(itemPrice));
+ builder.append(ChatColorType.NORMAL);
+ builder.append(": OSB ");
+ builder.append(ChatColorType.HIGHLIGHT);
+ builder.append(StackFormatter.formatNumber(osbresult.getOverall_average()));
- final ChatMessageBuilder builder = new ChatMessageBuilder();
- builder.append(ChatColorType.NORMAL);
- builder.append(ChatColorType.HIGHLIGHT);
- builder.append(item.getName());
- builder.append(ChatColorType.NORMAL);
- builder.append(": GE ");
- builder.append(ChatColorType.HIGHLIGHT);
- builder.append(StackFormatter.formatNumber(itemPrice));
- builder.append(ChatColorType.NORMAL);
- builder.append(": OSB ");
- builder.append(ChatColorType.HIGHLIGHT);
- builder.append(StackFormatter.formatNumber(osbresult.getOverall_average()));
+ ItemDefinition itemComposition = itemManager.getItemDefinition(itemId);
+ if (itemComposition != null)
+ {
+ int alchPrice = itemManager.getAlchValue(itemId);
+ builder
+ .append(ChatColorType.NORMAL)
+ .append(" HA value ")
+ .append(ChatColorType.HIGHLIGHT)
+ .append(StackFormatter.formatNumber(alchPrice));
+ }
- ItemDefinition itemComposition = itemManager.getItemDefinition(itemId);
- if (itemComposition != null)
- {
- int alchPrice = itemManager.getAlchValue(itemId);
- builder
- .append(ChatColorType.NORMAL)
- .append(" HA value ")
- .append(ChatColorType.HIGHLIGHT)
- .append(StackFormatter.formatNumber(alchPrice));
- }
+ String response = builder.build();
- String response = builder.build();
-
- log.debug("Setting response {}", response);
- messageNode.setRuneLiteFormatMessage(response);
- chatMessageManager.update(messageNode);
- client.refreshChat();
+ log.debug("Setting response {}", response);
+ messageNode.setRuneLiteFormatMessage(response);
+ chatMessageManager.update(messageNode);
+ client.refreshChat();
+ }
+ );
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java
index 8583cbe11a..f277e18464 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java
@@ -26,7 +26,7 @@ package net.runelite.client.plugins.examine;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
-import java.io.IOException;
+import io.reactivex.schedulers.Schedulers;
import java.time.Instant;
import java.util.ArrayDeque;
import java.util.Deque;
@@ -57,7 +57,6 @@ import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.util.StackFormatter;
import net.runelite.http.api.examine.ExamineClient;
import net.runelite.http.api.osbuddy.OSBGrandExchangeClient;
-import net.runelite.http.api.osbuddy.OSBGrandExchangeResult;
/**
* Submits examine info to the api
@@ -365,40 +364,40 @@ public class ExaminePlugin extends Plugin
if (gePrice > 0)
{
- OSBGrandExchangeResult osbresult = new OSBGrandExchangeResult();
- try
- {
- osbresult = CLIENT.lookupItem(id);
- }
- catch (IOException e)
- {
- log.error(e.toString());
- }
- message
- .append(ChatColorType.NORMAL)
- .append(" GE ")
- .append(ChatColorType.HIGHLIGHT)
- .append(StackFormatter.formatNumber(gePrice * quantity));
+ int finalQuantity = quantity;
+ CLIENT.lookupItem(id)
+ .subscribeOn(Schedulers.single())
+ .subscribe(
+ (osbresult) ->
+ {
+ message
+ .append(ChatColorType.NORMAL)
+ .append(" GE ")
+ .append(ChatColorType.HIGHLIGHT)
+ .append(StackFormatter.formatNumber(gePrice * finalQuantity));
- if (osbresult != null)
- {
- message
- .append(ChatColorType.NORMAL)
- .append(" OSB ")
- .append(ChatColorType.HIGHLIGHT)
- .append(StackFormatter.formatNumber(osbresult.getOverall_average() * quantity));
- }
+ if (osbresult != null)
+ {
+ message
+ .append(ChatColorType.NORMAL)
+ .append(" OSB ")
+ .append(ChatColorType.HIGHLIGHT)
+ .append(StackFormatter.formatNumber(osbresult.getOverall_average() * finalQuantity));
+ }
- if (quantity > 1)
- {
- message
- .append(ChatColorType.NORMAL)
- .append(" (")
- .append(ChatColorType.HIGHLIGHT)
- .append(StackFormatter.formatNumber(gePrice))
- .append(ChatColorType.NORMAL)
- .append("ea)");
- }
+ if (finalQuantity > 1)
+ {
+ message
+ .append(ChatColorType.NORMAL)
+ .append(" (")
+ .append(ChatColorType.HIGHLIGHT)
+ .append(StackFormatter.formatNumber(gePrice))
+ .append(ChatColorType.NORMAL)
+ .append("ea)");
+ }
+ },
+ (e) -> log.error(e.toString())
+ );
}
if (alchPrice > 0)
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java
index 8314a1493d..5fa2e77a21 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java
@@ -30,8 +30,8 @@ package net.runelite.client.plugins.grandexchange;
import com.google.common.reflect.TypeToken;
import com.google.gson.Gson;
import com.google.inject.Provides;
+import io.reactivex.schedulers.Schedulers;
import java.awt.image.BufferedImage;
-import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Map;
@@ -58,8 +58,8 @@ import net.runelite.api.events.GameStateChanged;
import net.runelite.api.events.GameTick;
import net.runelite.api.events.GrandExchangeOfferChanged;
import net.runelite.api.events.MenuEntryAdded;
-import net.runelite.api.events.WidgetLoaded;
import net.runelite.api.events.ScriptCallbackEvent;
+import net.runelite.api.events.WidgetLoaded;
import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetID;
import net.runelite.api.widgets.WidgetInfo;
@@ -83,7 +83,6 @@ import net.runelite.client.util.Text;
import net.runelite.http.api.ge.GrandExchangeClient;
import net.runelite.http.api.ge.GrandExchangeTrade;
import net.runelite.http.api.osbuddy.OSBGrandExchangeClient;
-import net.runelite.http.api.osbuddy.OSBGrandExchangeResult;
@PluginDescriptor(
name = "Grand Exchange",
@@ -547,16 +546,16 @@ public class GrandExchangePlugin extends Plugin
return;
}
- try
- {
- final OSBGrandExchangeResult result = CLIENT.lookupItem(itemId);
- final String text = geText.getText() + OSB_GE_TEXT + StackFormatter.formatNumber(result.getOverall_average());
- geText.setText(text);
- }
- catch (IOException e)
- {
- log.debug("Error getting price of item {}", itemId, e);
- }
+ CLIENT.lookupItem(itemId)
+ .subscribeOn(Schedulers.single())
+ .subscribe(
+ (osbresult) ->
+ {
+ final String text = geText.getText() + OSB_GE_TEXT + StackFormatter.formatNumber(osbresult.getOverall_average());
+ geText.setText(text);
+ },
+ (e) -> log.debug("Error getting price of item {}", itemId, e)
+ );
});
}