Fix GE OSB actively traded price races

- Remove last item ID checks completely and simply update the widget
text with OSB actively traded price whenever the widget do not contains
any
- Properly reset grandExchangeText and grandExchangeItem widgets on
plugin shutdown

Fixes #5098
Closes #5158

Signed-off-by: Tomas Slusny <slusnucky@gmail.com>
This commit is contained in:
Tomas Slusny
2018-09-23 18:58:43 +02:00
parent 2b2f29dddf
commit 53bc779546

View File

@@ -82,6 +82,7 @@ public class GrandExchangePlugin extends Plugin
private static final int OFFER_CONTAINER_ITEM = 21;
private static final int OFFER_DEFAULT_ITEM_ID = 6512;
private static final GrandExchangeClient CLIENT = new GrandExchangeClient();
private static final String OSB_GE_TEXT = "<br>OSBuddy Actively traded price: ";
static final String SEARCH_GRAND_EXCHANGE = "Search Grand Exchange";
@@ -125,8 +126,6 @@ public class GrandExchangePlugin extends Plugin
private Widget grandExchangeText;
private Widget grandExchangeItem;
private int lastItem = -1;
@Provides
GrandExchangeConfig provideConfig(ConfigManager configManager)
{
@@ -162,6 +161,8 @@ public class GrandExchangePlugin extends Plugin
clientToolbar.removeNavigation(button);
mouseManager.unregisterMouseListener(inputListener);
keyManager.unregisterKeyListener(inputListener);
grandExchangeText = null;
grandExchangeItem = null;
}
@Subscribe
@@ -270,22 +271,14 @@ public class GrandExchangePlugin extends Plugin
{
// Grand exchange was opened.
case WidgetID.GRAND_EXCHANGE_GROUP_ID:
if (!config.enableOsbPrices())
{
return;
}
Widget grandExchangeOffer = client.getWidget(WidgetInfo.GRAND_EXCHANGE_OFFER_CONTAINER);
grandExchangeText = client.getWidget(WidgetInfo.GRAND_EXCHANGE_OFFER_TEXT);
grandExchangeItem = grandExchangeOffer.getDynamicChildren()[OFFER_CONTAINER_ITEM];
lastItem = -1;
break;
// Grand exchange was closed (if it was open before).
case WidgetID.INVENTORY_GROUP_ID:
grandExchangeText = null;
grandExchangeItem = null;
lastItem = -1;
break;
}
}
@@ -299,38 +292,29 @@ public class GrandExchangePlugin extends Plugin
}
final Widget geText = grandExchangeText;
final String geTextString = geText.getText();
final int itemId = grandExchangeItem.getItemId();
if (!geText.getText().contains("Actively traded price"))
{
// searching for the same item twice without closing the search window will cause this.
lastItem = -1;
}
int itemId = grandExchangeItem.getItemId();
if (itemId == OFFER_DEFAULT_ITEM_ID
|| itemId == -1
|| lastItem == itemId)
if (itemId == OFFER_DEFAULT_ITEM_ID || itemId == -1)
{
// This item is invalid/nothing has been searched for
return;
}
lastItem = itemId;
if (!config.enableOsbPrices() || geTextString.contains(OSB_GE_TEXT))
{
// OSB prices are disabled or price was already looked up, so no need to set it again
return;
}
log.debug("Looking up item {}", itemId);
log.debug("Looking up OSB item price {}", itemId);
executorService.submit(() ->
{
try
{
final GrandExchangeResult result = CLIENT.lookupItem(itemId);
if (result.getItem_id() != lastItem)
{
// something else has since been looked up?
return;
}
final String text = geText.getText() + "<br>OSBuddy Actively traded price: " + StackFormatter.formatNumber(result.getOverall_average());
final String text = geText.getText() + OSB_GE_TEXT + StackFormatter.formatNumber(result.getOverall_average());
geText.setText(text);
}
catch (IOException e)