ge plugin: fix accessing item composition from executor thread
This commit is contained in:
@@ -34,6 +34,7 @@ import javax.swing.border.EmptyBorder;
|
|||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.runelite.api.Client;
|
import net.runelite.api.Client;
|
||||||
|
import net.runelite.client.callback.ClientThread;
|
||||||
import net.runelite.client.game.ItemManager;
|
import net.runelite.client.game.ItemManager;
|
||||||
import net.runelite.client.ui.ColorScheme;
|
import net.runelite.client.ui.ColorScheme;
|
||||||
import net.runelite.client.ui.PluginPanel;
|
import net.runelite.client.ui.PluginPanel;
|
||||||
@@ -56,7 +57,7 @@ class GrandExchangePanel extends PluginPanel
|
|||||||
private GrandExchangeOffersPanel offersPanel;
|
private GrandExchangeOffersPanel offersPanel;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
GrandExchangePanel(Client client, ItemManager itemManager, ScheduledExecutorService executor)
|
GrandExchangePanel(Client client, ClientThread clientThread, ItemManager itemManager, ScheduledExecutorService executor)
|
||||||
{
|
{
|
||||||
super(false);
|
super(false);
|
||||||
|
|
||||||
@@ -64,7 +65,7 @@ class GrandExchangePanel extends PluginPanel
|
|||||||
setBackground(ColorScheme.DARK_GRAY_COLOR);
|
setBackground(ColorScheme.DARK_GRAY_COLOR);
|
||||||
|
|
||||||
// Search Panel
|
// Search Panel
|
||||||
searchPanel = new GrandExchangeSearchPanel(client, itemManager, executor);
|
searchPanel = new GrandExchangeSearchPanel(clientThread, itemManager, executor);
|
||||||
|
|
||||||
//Offers Panel
|
//Offers Panel
|
||||||
offersPanel = new GrandExchangeOffersPanel(client, itemManager, executor);
|
offersPanel = new GrandExchangeOffersPanel(client, itemManager, executor);
|
||||||
|
|||||||
@@ -40,14 +40,15 @@ import javax.swing.JScrollPane;
|
|||||||
import javax.swing.SwingUtilities;
|
import javax.swing.SwingUtilities;
|
||||||
import javax.swing.border.EmptyBorder;
|
import javax.swing.border.EmptyBorder;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.runelite.api.Client;
|
|
||||||
import net.runelite.api.ItemComposition;
|
import net.runelite.api.ItemComposition;
|
||||||
|
import net.runelite.client.callback.ClientThread;
|
||||||
import net.runelite.client.game.AsyncBufferedImage;
|
import net.runelite.client.game.AsyncBufferedImage;
|
||||||
import net.runelite.client.game.ItemManager;
|
import net.runelite.client.game.ItemManager;
|
||||||
import net.runelite.client.ui.ColorScheme;
|
import net.runelite.client.ui.ColorScheme;
|
||||||
import net.runelite.client.ui.components.IconTextField;
|
import net.runelite.client.ui.components.IconTextField;
|
||||||
import net.runelite.client.ui.components.PluginErrorPanel;
|
import net.runelite.client.ui.components.PluginErrorPanel;
|
||||||
import net.runelite.client.util.ImageUtil;
|
import net.runelite.client.util.ImageUtil;
|
||||||
|
import net.runelite.client.util.RunnableExceptionLogger;
|
||||||
import net.runelite.http.api.item.Item;
|
import net.runelite.http.api.item.Item;
|
||||||
import net.runelite.http.api.item.ItemPrice;
|
import net.runelite.http.api.item.ItemPrice;
|
||||||
import net.runelite.http.api.item.SearchResult;
|
import net.runelite.http.api.item.SearchResult;
|
||||||
@@ -69,7 +70,7 @@ class GrandExchangeSearchPanel extends JPanel
|
|||||||
private final GridBagConstraints constraints = new GridBagConstraints();
|
private final GridBagConstraints constraints = new GridBagConstraints();
|
||||||
private final CardLayout cardLayout = new CardLayout();
|
private final CardLayout cardLayout = new CardLayout();
|
||||||
|
|
||||||
private final Client client;
|
private final ClientThread clientThread;
|
||||||
private final ItemManager itemManager;
|
private final ItemManager itemManager;
|
||||||
private final ScheduledExecutorService executor;
|
private final ScheduledExecutorService executor;
|
||||||
|
|
||||||
@@ -99,9 +100,9 @@ class GrandExchangeSearchPanel extends JPanel
|
|||||||
ERROR_ICON = new ImageIcon(ImageUtil.getResourceStreamFromClass(IconTextField.class, "error.png"));
|
ERROR_ICON = new ImageIcon(ImageUtil.getResourceStreamFromClass(IconTextField.class, "error.png"));
|
||||||
}
|
}
|
||||||
|
|
||||||
GrandExchangeSearchPanel(Client client, ItemManager itemManager, ScheduledExecutorService executor)
|
GrandExchangeSearchPanel(ClientThread clientThread, ItemManager itemManager, ScheduledExecutorService executor)
|
||||||
{
|
{
|
||||||
this.client = client;
|
this.clientThread = clientThread;
|
||||||
this.itemManager = itemManager;
|
this.itemManager = itemManager;
|
||||||
this.executor = executor;
|
this.executor = executor;
|
||||||
init();
|
init();
|
||||||
@@ -120,7 +121,7 @@ class GrandExchangeSearchPanel extends JPanel
|
|||||||
searchBox.setBackground(ColorScheme.MEDIUM_GRAY_COLOR);
|
searchBox.setBackground(ColorScheme.MEDIUM_GRAY_COLOR);
|
||||||
searchBox.setHoverBackgroundColor(ColorScheme.MEDIUM_GRAY_COLOR.brighter());
|
searchBox.setHoverBackgroundColor(ColorScheme.MEDIUM_GRAY_COLOR.brighter());
|
||||||
searchBox.setIcon(SEARCH_ICON);
|
searchBox.setIcon(SEARCH_ICON);
|
||||||
searchBox.addActionListener(e -> executor.execute(() -> priceLookup(false)));
|
searchBox.addActionListener(e -> executor.execute(RunnableExceptionLogger.wrap(() -> priceLookup(false))));
|
||||||
|
|
||||||
searchItemsPanel.setLayout(new GridBagLayout());
|
searchItemsPanel.setLayout(new GridBagLayout());
|
||||||
searchItemsPanel.setBackground(ColorScheme.DARK_GRAY_COLOR);
|
searchItemsPanel.setBackground(ColorScheme.DARK_GRAY_COLOR);
|
||||||
@@ -163,7 +164,7 @@ class GrandExchangeSearchPanel extends JPanel
|
|||||||
void priceLookup(String item)
|
void priceLookup(String item)
|
||||||
{
|
{
|
||||||
searchBox.setText(item);
|
searchBox.setText(item);
|
||||||
executor.execute(() -> priceLookup(true));
|
executor.execute(RunnableExceptionLogger.wrap(() -> priceLookup(true)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void priceLookup(boolean exactMatch)
|
private void priceLookup(boolean exactMatch)
|
||||||
@@ -199,6 +200,12 @@ class GrandExchangeSearchPanel extends JPanel
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// move to client thread to lookup item composition
|
||||||
|
clientThread.invokeLater(() -> processResult(result, lookup, exactMatch));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void processResult(SearchResult result, String lookup, boolean exactMatch)
|
||||||
|
{
|
||||||
itemsList.clear();
|
itemsList.clear();
|
||||||
|
|
||||||
if (result != null && !result.getItems().isEmpty())
|
if (result != null && !result.getItems().isEmpty())
|
||||||
@@ -209,7 +216,7 @@ class GrandExchangeSearchPanel extends JPanel
|
|||||||
{
|
{
|
||||||
int itemId = item.getId();
|
int itemId = item.getId();
|
||||||
|
|
||||||
ItemComposition itemComp = client.getItemDefinition(itemId);
|
ItemComposition itemComp = itemManager.getItemComposition(itemId);
|
||||||
if (itemComp == null)
|
if (itemComp == null)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
Reference in New Issue
Block a user