From cc124d6d583b24f3df77f360a905054cbb055236 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Fri, 9 Feb 2018 22:34:08 +0100 Subject: [PATCH] Properly invalidate cache and load icons in Clan Properly invalidate cache on plugin shutdown and load clan chat icons on plugin startup. Signed-off-by: Tomas Slusny --- .../plugins/clanchat/ClanChatPlugin.java | 56 +++++++++++-------- 1 file changed, 33 insertions(+), 23 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatPlugin.java index 646236fa75..c7cec907a8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatPlugin.java @@ -70,7 +70,30 @@ public class ClanChatPlugin extends Plugin }; - private LoadingCache clanRanksCache; + private final LoadingCache clanRanksCache = CacheBuilder.newBuilder() + .maximumSize(100) + .expireAfterAccess(1, TimeUnit.MINUTES) + .build(new CacheLoader() + { + @Override + public ClanMemberRank load(String key) throws Exception + { + final ClanMember[] clanMembersArr = client.getClanMembers(); + + if (clanMembersArr == null || clanMembersArr.length == 0) + { + return ClanMemberRank.UNRANKED; + } + + return Arrays.stream(clanMembersArr) + .filter(Objects::nonNull) + .filter(clanMember -> sanitize(clanMember.getUsername()).equals(sanitize(key))) + .map(ClanMember::getRank) + .findAny() + .orElse(ClanMemberRank.UNRANKED); + } + }); + private int modIconsLength; @Inject @@ -79,29 +102,16 @@ public class ClanChatPlugin extends Plugin @Override protected void startUp() throws Exception { - clanRanksCache = CacheBuilder.newBuilder() - .maximumSize(100) - .expireAfterAccess(1, TimeUnit.MINUTES) - .build(new CacheLoader() - { - @Override - public ClanMemberRank load(String key) throws Exception - { - final ClanMember[] clanMembersArr = client.getClanMembers(); + if (modIconsLength == 0 && client.getGameState().compareTo(GameState.LOGIN_SCREEN) >= 0) + { + loadClanChatIcons(); + } + } - if (clanMembersArr == null || clanMembersArr.length == 0) - { - return ClanMemberRank.UNRANKED; - } - - return Arrays.stream(clanMembersArr) - .filter(Objects::nonNull) - .filter(clanMember -> sanitize(clanMember.getUsername()).equals(sanitize(key))) - .map(ClanMember::getRank) - .findAny() - .orElse(ClanMemberRank.UNRANKED); - } - }); + @Override + protected void shutDown() + { + clanRanksCache.invalidateAll(); } @Subscribe