Generalizes the FastEOSE cache for Users
This commit is contained in:
+1
-1
@@ -42,7 +42,7 @@ abstract class PerUserEoseManager<T>(
|
|||||||
allKeys: () -> Set<T>,
|
allKeys: () -> Set<T>,
|
||||||
val invalidateAfterEose: Boolean = false,
|
val invalidateAfterEose: Boolean = false,
|
||||||
) : BaseEoseManager<T>(client, allKeys) {
|
) : BaseEoseManager<T>(client, allKeys) {
|
||||||
private val latestEOSEs = EOSEAccountFast()
|
private val latestEOSEs = EOSEAccountFast<User>()
|
||||||
private val userSubscriptionMap = mutableMapOf<User, String>()
|
private val userSubscriptionMap = mutableMapOf<User, String>()
|
||||||
|
|
||||||
fun since(key: T) = latestEOSEs.since(user(key))
|
fun since(key: T) = latestEOSEs.since(user(key))
|
||||||
|
|||||||
+3
-3
@@ -33,7 +33,7 @@ class UserWatcherSubAssembler(
|
|||||||
allKeys: () -> Set<UserFinderQueryState>,
|
allKeys: () -> Set<UserFinderQueryState>,
|
||||||
) : SingleSubEoseManager<UserFinderQueryState>(client, allKeys) {
|
) : SingleSubEoseManager<UserFinderQueryState>(client, allKeys) {
|
||||||
var lastUsersOnFilter: Set<User> = emptySet()
|
var lastUsersOnFilter: Set<User> = emptySet()
|
||||||
var latestEOSEs: EOSEAccountFast = EOSEAccountFast(2000)
|
var latestEOSEs: EOSEAccountFast<User> = EOSEAccountFast<User>(2000)
|
||||||
|
|
||||||
override fun newEose(
|
override fun newEose(
|
||||||
relayUrl: String,
|
relayUrl: String,
|
||||||
@@ -69,7 +69,7 @@ class UserWatcherSubAssembler(
|
|||||||
|
|
||||||
fun groupByRelayPresence(
|
fun groupByRelayPresence(
|
||||||
users: Iterable<User>,
|
users: Iterable<User>,
|
||||||
eoseCache: EOSEAccountFast,
|
eoseCache: EOSEAccountFast<User>,
|
||||||
): Collection<List<User>> =
|
): Collection<List<User>> =
|
||||||
users
|
users
|
||||||
.groupBy { eoseCache.since(it)?.keys?.hashCode() }
|
.groupBy { eoseCache.since(it)?.keys?.hashCode() }
|
||||||
@@ -81,7 +81,7 @@ class UserWatcherSubAssembler(
|
|||||||
|
|
||||||
fun findMinimumEOSEsForUsers(
|
fun findMinimumEOSEsForUsers(
|
||||||
users: List<User>,
|
users: List<User>,
|
||||||
eoseCache: EOSEAccountFast,
|
eoseCache: EOSEAccountFast<User>,
|
||||||
): Map<String, EOSETime> {
|
): Map<String, EOSETime> {
|
||||||
val minLatestEOSEs = mutableMapOf<String, EOSETime>()
|
val minLatestEOSEs = mutableMapOf<String, EOSETime>()
|
||||||
|
|
||||||
|
|||||||
@@ -122,13 +122,13 @@ class EOSEAccount(
|
|||||||
) = addOrUpdate(user, listCode, relayUrl, time)
|
) = addOrUpdate(user, listCode, relayUrl, time)
|
||||||
}
|
}
|
||||||
|
|
||||||
class EOSEAccountFast(
|
class EOSEAccountFast<T : Any>(
|
||||||
cacheSize: Int = 20,
|
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(
|
fun addOrUpdate(
|
||||||
user: User,
|
user: T,
|
||||||
relayUrl: String,
|
relayUrl: String,
|
||||||
time: Long,
|
time: Long,
|
||||||
) {
|
) {
|
||||||
@@ -143,14 +143,14 @@ class EOSEAccountFast(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun removeDataFor(user: User) {
|
fun removeDataFor(user: T) {
|
||||||
users.remove(user)
|
users.remove(user)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun since(key: User) = users[key]?.relayList
|
fun since(key: T) = users[key]?.relayList
|
||||||
|
|
||||||
fun newEose(
|
fun newEose(
|
||||||
user: User,
|
user: T,
|
||||||
relayUrl: String,
|
relayUrl: String,
|
||||||
time: Long,
|
time: Long,
|
||||||
) = addOrUpdate(user, relayUrl, time)
|
) = addOrUpdate(user, relayUrl, time)
|
||||||
|
|||||||
Reference in New Issue
Block a user