The current PersistenceService.
The maximum age of a cache entry in seconds; older than which will be removed.
import std.datetime.systime : Clock; immutable nowInUnix = Clock.currTime.toUnixTime(); IRCPluginState state; auto service = new PersistenceService(state); IRCUser user1; user1.nickname = "foo"; user1.account = "foo"; user1.updated = nowInUnix; IRCUser user2; user2.nickname = "bar"; user2.account = "bar"; user2.updated = nowInUnix - 3600; IRCUser user3; user3.nickname = "baz"; user3.account = "BAZ"; user3.updated = nowInUnix - 6*3600; service.channelUserCache.aaOf["#channel1"]["foo"] = user1; service.channelUserCache.aaOf["#channel1"]["bar"] = user2; service.channelUserCache.aaOf["#channel1"]["baz"] = user3; service.channelUserCache.aaOf["#channel2"]["foo"] = user1; service.channelUserCache.aaOf["#channel2"]["bar"] = user2; service.channelUserCache.aaOf["#channel3"]["baz"] = user3; service.nicknameAccountMap["foo"] = "foo"; service.nicknameAccountMap["bar"] = "bar"; service.nicknameAccountMap["baz"] = "BAZ"; assert(service.channelUserCache["#channel1"].length == 3); assert(service.channelUserCache["#channel2"].length == 2); assert(service.channelUserCache["#channel3"].length == 1); assert(service.nicknameAccountMap.length == 3); service.purgeOldCacheEntries(5*3600); assert("foo" in service.channelUserCache["#channel1"]); assert("bar" in service.channelUserCache["#channel1"]); assert("baz" !in service.channelUserCache["#channel1"]); assert("foo" in service.channelUserCache["#channel2"]); assert("bar" in service.channelUserCache["#channel2"]); assert("#channel3" !in service.channelUserCache); assert("foo" in service.nicknameAccountMap); assert("bar" in service.nicknameAccountMap); assert("baz" !in service.nicknameAccountMap);
Walks the channel-user cache and removes entries older than a certain age. Additionally removes channels with no users, and nicknames from the nickname account map that are not found in any channel.