implement record sorting

Signed-off-by: PKLite <stonewall@pklite.xyz>
This commit is contained in:
PKLite
2019-06-09 01:48:56 -04:00
parent e3aa3fd2fd
commit 7b2e0ded2b
5 changed files with 34 additions and 10 deletions

View File

@@ -14,7 +14,7 @@ public enum LootRecordSortType implements Comparator<LootTrackerRecord>
@Override @Override
public int compare(LootTrackerRecord o1, LootTrackerRecord o2) public int compare(LootTrackerRecord o1, LootTrackerRecord o2)
{ {
return Math.toIntExact(o1.getTimestamp() - o2.getTimestamp()); return Long.compare(o1.getTimestamp(), o2.getTimestamp());
} }
}, },
TOTAL_VALUE TOTAL_VALUE

View File

@@ -32,7 +32,6 @@ import java.awt.GridLayout;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@@ -121,7 +120,8 @@ class LootTrackerBox extends JPanel
private long getTotalKills() private long getTotalKills()
{ {
return hideIgnoredItems return hideIgnoredItems
? records.stream().filter(r -> !Arrays.stream(r.getItems()).allMatch(LootTrackerItem::isIgnored)).count() ? records.stream().filter(
r -> !Arrays.stream(r.getItems()).allMatch(LootTrackerItem::isIgnored)).count()
: records.size(); : records.size();
} }

View File

@@ -91,5 +91,14 @@ public interface LootTrackerConfig extends Config
{ {
return true; return true;
} }
@ConfigItem(
keyName = "sortType",
name = "Sorting",
description = "The method for sorting Loot Tracker entries"
)
default LootRecordSortType sortType()
{
return LootRecordSortType.TIMESTAMP;
}
} }

View File

@@ -44,6 +44,8 @@ import javax.swing.JMenuItem;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.JPopupMenu; import javax.swing.JPopupMenu;
import javax.swing.border.EmptyBorder; import javax.swing.border.EmptyBorder;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.runelite.api.GameState; import net.runelite.api.GameState;
import net.runelite.client.game.ItemManager; import net.runelite.client.game.ItemManager;
@@ -137,6 +139,9 @@ class LootTrackerPanel extends PluginPanel
private final JPanel displaySelector; private final JPanel displaySelector;
@Getter @Setter
private LootRecordSortType lootRecordSortType = LootRecordSortType.TIMESTAMP;
LootTrackerPanel(final LootTrackerPlugin plugin, final ItemManager itemManager, final LootTrackerConfig config) LootTrackerPanel(final LootTrackerPlugin plugin, final ItemManager itemManager, final LootTrackerConfig config)
{ {
this.itemManager = itemManager; this.itemManager = itemManager;
@@ -423,6 +428,7 @@ class LootTrackerPanel extends PluginPanel
logsContainer.removeAll(); logsContainer.removeAll();
boxes.clear(); boxes.clear();
int start = 0; int start = 0;
records.sort(lootRecordSortType);
if (!groupLoot && records.size() > MAX_LOOT_BOXES) if (!groupLoot && records.size() > MAX_LOOT_BOXES)
{ {
start = records.size() - MAX_LOOT_BOXES; start = records.size() - MAX_LOOT_BOXES;

View File

@@ -256,9 +256,18 @@ public class LootTrackerPlugin extends Plugin
{ {
if (event.getGroup().equals("loottracker")) if (event.getGroup().equals("loottracker"))
{ {
ignoredItems = Text.fromCSV(config.getIgnoredItems()); if (event.getKey().equals("ignoredItems"))
SwingUtilities.invokeLater(panel::updateIgnoredRecords); {
ignoredItems = Text.fromCSV(config.getIgnoredItems());
SwingUtilities.invokeLater(panel::updateIgnoredRecords);
}
if (event.getKey().equals("sortType"))
{
panel.setLootRecordSortType(config.sortType());
SwingUtilities.invokeLater(panel::rebuild);
}
} }
} }
@Override @Override
@@ -391,7 +400,7 @@ public class LootTrackerPlugin extends Plugin
final LootTrackerItem[] entries = buildEntries(stack(items)); final LootTrackerItem[] entries = buildEntries(stack(items));
String localUsername = client.getLocalPlayer().getName(); String localUsername = client.getLocalPlayer().getName();
SwingUtilities.invokeLater(() -> panel.add(name, localUsername, combat, entries)); SwingUtilities.invokeLater(() -> panel.add(name, localUsername, combat, entries));
LootRecord lootRecord = new LootRecord(localUsername, name, LootRecordType.PLAYER, LootRecord lootRecord = new LootRecord( name, localUsername, LootRecordType.PLAYER,
toGameItems(items), Instant.now()); toGameItems(items), Instant.now());
if (lootTrackerClient != null && config.saveLoot()) if (lootTrackerClient != null && config.saveLoot())
{ {
@@ -481,11 +490,11 @@ public class LootTrackerPlugin extends Plugin
} }
final LootTrackerItem[] entries = buildEntries(stack(items)); final LootTrackerItem[] entries = buildEntries(stack(items));
SwingUtilities.invokeLater(() -> panel.add(client.getLocalPlayer().getName(), eventType, -1, entries)); SwingUtilities.invokeLater(() -> panel.add(eventType, client.getLocalPlayer().getName(), -1, entries));
if (lootTrackerClient != null && config.saveLoot()) if (lootTrackerClient != null && config.saveLoot())
{ {
LootRecord lootRecord = new LootRecord(client.getLocalPlayer().getName(), eventType, LootRecordType.EVENT, LootRecord lootRecord = new LootRecord(eventType, client.getLocalPlayer().getName(), LootRecordType.EVENT,
toGameItems(items), Instant.now()); toGameItems(items), Instant.now());
lootTrackerClient.submit(lootRecord); lootTrackerClient.submit(lootRecord);
} }
@@ -692,11 +701,11 @@ public class LootTrackerPlugin extends Plugin
.collect(Collectors.toList()); .collect(Collectors.toList());
final LootTrackerItem[] entries = buildEntries(stack(items)); final LootTrackerItem[] entries = buildEntries(stack(items));
SwingUtilities.invokeLater(() -> panel.add(client.getLocalPlayer().getName(), chestType, -1, entries)); SwingUtilities.invokeLater(() -> panel.add(chestType, client.getLocalPlayer().getName(), -1, entries));
if (lootTrackerClient != null && config.saveLoot()) if (lootTrackerClient != null && config.saveLoot())
{ {
LootRecord lootRecord = new LootRecord(client.getLocalPlayer().getName(), chestType, LootRecord lootRecord = new LootRecord(chestType, client.getLocalPlayer().getName(),
LootRecordType.EVENT, toGameItems(items), Instant.now()); LootRecordType.EVENT, toGameItems(items), Instant.now());
lootTrackerClient.submit(lootRecord); lootTrackerClient.submit(lootRecord);
} }