Generalizes the FastEOSE cache for Users

This commit is contained in:
Vitor Pamplona
2025-05-14 14:53:30 -04:00
parent b7ac32d768
commit d0f138e992
3 changed files with 10 additions and 10 deletions
@@ -42,7 +42,7 @@ abstract class PerUserEoseManager<T>(
allKeys: () -> Set<T>,
val invalidateAfterEose: Boolean = false,
) : BaseEoseManager<T>(client, allKeys) {
private val latestEOSEs = EOSEAccountFast()
private val latestEOSEs = EOSEAccountFast<User>()
private val userSubscriptionMap = mutableMapOf<User, String>()
fun since(key: T) = latestEOSEs.since(user(key))
@@ -33,7 +33,7 @@ class UserWatcherSubAssembler(
allKeys: () -> Set<UserFinderQueryState>,
) : SingleSubEoseManager<UserFinderQueryState>(client, allKeys) {
var lastUsersOnFilter: Set<User> = emptySet()
var latestEOSEs: EOSEAccountFast = EOSEAccountFast(2000)
var latestEOSEs: EOSEAccountFast<User> = EOSEAccountFast<User>(2000)
override fun newEose(
relayUrl: String,
@@ -69,7 +69,7 @@ class UserWatcherSubAssembler(
fun groupByRelayPresence(
users: Iterable<User>,
eoseCache: EOSEAccountFast,
eoseCache: EOSEAccountFast<User>,
): Collection<List<User>> =
users
.groupBy { eoseCache.since(it)?.keys?.hashCode() }
@@ -81,7 +81,7 @@ class UserWatcherSubAssembler(
fun findMinimumEOSEsForUsers(
users: List<User>,
eoseCache: EOSEAccountFast,
eoseCache: EOSEAccountFast<User>,
): Map<String, EOSETime> {
val minLatestEOSEs = mutableMapOf<String, EOSETime>()
@@ -122,13 +122,13 @@ class EOSEAccount(
) = addOrUpdate(user, listCode, relayUrl, time)
}
class EOSEAccountFast(
class EOSEAccountFast<T : Any>(
cacheSize: Int = 20,
) {
private val users: LruCache<User, EOSERelayList> = LruCache<User, EOSERelayList>(cacheSize)
private val users: LruCache<T, EOSERelayList> = LruCache<T, EOSERelayList>(cacheSize)
fun addOrUpdate(
user: User,
user: T,
relayUrl: String,
time: Long,
) {
@@ -143,14 +143,14 @@ class EOSEAccountFast(
}
}
fun removeDataFor(user: User) {
fun removeDataFor(user: T) {
users.remove(user)
}
fun since(key: User) = users[key]?.relayList
fun since(key: T) = users[key]?.relayList
fun newEose(
user: User,
user: T,
relayUrl: String,
time: Long,
) = addOrUpdate(user, relayUrl, time)