bank plugin: improve responsiveness of bank searches

This commit is contained in:
trimbe
2019-08-03 20:59:03 -04:00
parent 715c7a26b9
commit acabab9274
2 changed files with 70 additions and 27 deletions

View File

@@ -26,6 +26,7 @@
*/ */
package net.runelite.client.plugins.bank; package net.runelite.client.plugins.bank;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.google.inject.Provides; import com.google.inject.Provides;
import java.util.Arrays; import java.util.Arrays;
@@ -36,12 +37,17 @@ import net.runelite.api.InventoryID;
import net.runelite.api.Item; import net.runelite.api.Item;
import net.runelite.api.ItemContainer; import net.runelite.api.ItemContainer;
import net.runelite.api.MenuEntry; import net.runelite.api.MenuEntry;
import net.runelite.api.SpriteID;
import net.runelite.api.VarClientInt;
import net.runelite.api.VarClientStr;
import net.runelite.api.Varbits; import net.runelite.api.Varbits;
import net.runelite.api.events.ItemContainerChanged; import net.runelite.api.events.ItemContainerChanged;
import net.runelite.api.events.MenuEntryAdded; import net.runelite.api.events.MenuEntryAdded;
import net.runelite.api.events.MenuShouldLeftClick; import net.runelite.api.events.MenuShouldLeftClick;
import net.runelite.api.events.ScriptCallbackEvent; import net.runelite.api.events.ScriptCallbackEvent;
import net.runelite.api.events.VarClientStrChanged;
import net.runelite.api.events.WidgetLoaded; import net.runelite.api.events.WidgetLoaded;
import net.runelite.api.vars.InputType;
import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetID; import net.runelite.api.widgets.WidgetID;
import net.runelite.api.widgets.WidgetInfo; import net.runelite.api.widgets.WidgetInfo;
@@ -96,6 +102,7 @@ public class BankPlugin extends Plugin
private ContainerCalculation seedVaultCalculation; private ContainerCalculation seedVaultCalculation;
private boolean forceRightClickFlag; private boolean forceRightClickFlag;
private String searchString;
@Provides @Provides
BankConfig getConfig(ConfigManager configManager) BankConfig getConfig(ConfigManager configManager)
@@ -108,6 +115,7 @@ public class BankPlugin extends Plugin
{ {
clientThread.invokeLater(() -> bankSearch.reset(false)); clientThread.invokeLater(() -> bankSearch.reset(false));
forceRightClickFlag = false; forceRightClickFlag = false;
searchString = "";
} }
@Subscribe @Subscribe
@@ -176,6 +184,35 @@ public class BankPlugin extends Plugin
updateSeedVaultTotal(); updateSeedVaultTotal();
} }
@Subscribe
public void onVarClientStrChanged(VarClientStrChanged event)
{
String searchVar = client.getVar(VarClientStr.INPUT_TEXT);
if (!searchVar.equals(searchString))
{
Widget searchButtonBackground = client.getWidget(WidgetInfo.BANK_SEARCH_BUTTON_BACKGROUND);
if (searchButtonBackground != null && searchButtonBackground.hasListener())
{
searchButtonBackground.setOnTimerListener((Object[]) null);
searchButtonBackground.setHasListener(false);
}
clientThread.invokeLater(() -> bankSearch.layoutBank());
searchString = searchVar;
}
if (client.getVar(VarClientInt.INPUT_TYPE) != InputType.SEARCH.getType() && Strings.isNullOrEmpty(client.getVar(VarClientStr.INPUT_TEXT)))
{
Widget searchBackground = client.getWidget(WidgetInfo.BANK_SEARCH_BUTTON_BACKGROUND);
if (searchBackground != null)
{
searchBackground.setSpriteId(SpriteID.EQUIPMENT_SLOT_TILE);
}
}
}
@Subscribe @Subscribe
public void onItemContainerChanged(ItemContainerChanged event) public void onItemContainerChanged(ItemContainerChanged event)
{ {

View File

@@ -68,19 +68,6 @@ public class BankSearch
{ {
clientThread.invoke(() -> clientThread.invoke(() ->
{ {
Widget bankContainer = client.getWidget(WidgetInfo.BANK_CONTAINER);
if (bankContainer == null || bankContainer.isHidden())
{
return;
}
Object[] widgetIds = bankContainer.getOnLoadListener();
// In case the widget ids array is incorrect, do not proceed
if (widgetIds == null || widgetIds.length < 21)
{
return;
}
// This ensures that any chatbox input (e.g from search) will not remain visible when // This ensures that any chatbox input (e.g from search) will not remain visible when
// selecting/changing tab // selecting/changing tab
if (closeInput) if (closeInput)
@@ -91,23 +78,42 @@ public class BankSearch
client.setVar(VarClientInt.INPUT_TYPE, inputType.getType()); client.setVar(VarClientInt.INPUT_TYPE, inputType.getType());
client.setVar(VarClientStr.INPUT_TEXT, search); client.setVar(VarClientStr.INPUT_TEXT, search);
client.runScript(ScriptID.BANK_LAYOUT, layoutBank();
WidgetInfo.BANK_CONTAINER.getId(),
widgetIds[INNER_CONTAINER_IDX],
widgetIds[SETTINGS_IDX],
widgetIds[ITEM_CONTAINER_IDX],
widgetIds[SCROLLBAR_IDX],
widgetIds[BOTTOM_BAR_IDX],
widgetIds[TITLE_BAR_IDX],
widgetIds[ITEM_COUNT_IDX],
widgetIds[SEARCH_BUTTON_BACKGROUND_IDX],
widgetIds[TAB_BAR_IDX],
widgetIds[INCINERATOR_IDX],
widgetIds[INCINERATOR_CONFIRM_IDX],
widgetIds[HIDDEN_WIDGET_IDX]);
}); });
} }
public void layoutBank()
{
Widget bankContainer = client.getWidget(WidgetInfo.BANK_CONTAINER);
if (bankContainer == null || bankContainer.isHidden())
{
return;
}
Object[] widgetIds = bankContainer.getOnLoadListener();
// In case the widget ids array is incorrect, do not proceed
if (widgetIds == null || widgetIds.length < 21)
{
return;
}
client.runScript(ScriptID.BANK_LAYOUT,
WidgetInfo.BANK_CONTAINER.getId(),
widgetIds[INNER_CONTAINER_IDX],
widgetIds[SETTINGS_IDX],
widgetIds[ITEM_CONTAINER_IDX],
widgetIds[SCROLLBAR_IDX],
widgetIds[BOTTOM_BAR_IDX],
widgetIds[TITLE_BAR_IDX],
widgetIds[ITEM_COUNT_IDX],
widgetIds[SEARCH_BUTTON_BACKGROUND_IDX],
widgetIds[TAB_BAR_IDX],
widgetIds[INCINERATOR_IDX],
widgetIds[INCINERATOR_CONFIRM_IDX],
widgetIds[HIDDEN_WIDGET_IDX]);
}
public void reset(Boolean closeChat) public void reset(Boolean closeChat)
{ {
search(InputType.NONE, "", closeChat); search(InputType.NONE, "", closeChat);