Migrates event finder and channel finder to the new No Eose cache manager

This commit is contained in:
Vitor Pamplona
2025-05-14 14:55:53 -04:00
parent 4fc2d3a7d1
commit 979e02e7fa
5 changed files with 18 additions and 43 deletions
@@ -20,11 +20,10 @@
*/
package com.vitorpamplona.amethyst.service.relayClient.reqCommand.channel.nip28PublicChats
import com.vitorpamplona.amethyst.service.relayClient.eoseManagers.SingleSubEoseManager
import com.vitorpamplona.amethyst.service.relayClient.eoseManagers.SingleSubNoEoseCacheEoseManager
import com.vitorpamplona.amethyst.service.relayClient.reqCommand.channel.ChannelFinderQueryState
import com.vitorpamplona.ammolite.relays.NostrClient
import com.vitorpamplona.ammolite.relays.TypedFilter
import com.vitorpamplona.ammolite.relays.filters.EOSETime
/**
* This assembler observes loads missing public chats when needed.
@@ -38,11 +37,8 @@ import com.vitorpamplona.ammolite.relays.filters.EOSETime
class ChannelLoaderSubAssembler(
client: NostrClient,
allKeys: () -> Set<ChannelFinderQueryState>,
) : SingleSubEoseManager<ChannelFinderQueryState>(client, allKeys, invalidateAfterEose = true) {
override fun updateFilter(
keys: List<ChannelFinderQueryState>,
since: Map<String, EOSETime>?,
): List<TypedFilter>? = filterMissingChannelsById(keys, since)
) : SingleSubNoEoseCacheEoseManager<ChannelFinderQueryState>(client, allKeys, invalidateAfterEose = true) {
override fun updateFilter(keys: List<ChannelFinderQueryState>): List<TypedFilter>? = filterMissingChannelsById(keys)
override fun distinct(key: ChannelFinderQueryState) = key.channel.idHex
}
@@ -24,14 +24,10 @@ import com.vitorpamplona.amethyst.model.PublicChatChannel
import com.vitorpamplona.amethyst.service.relayClient.reqCommand.channel.ChannelFinderQueryState
import com.vitorpamplona.ammolite.relays.EVENT_FINDER_TYPES
import com.vitorpamplona.ammolite.relays.TypedFilter
import com.vitorpamplona.ammolite.relays.filters.EOSETime
import com.vitorpamplona.ammolite.relays.filters.SincePerRelayFilter
import com.vitorpamplona.quartz.nip28PublicChat.admin.ChannelCreateEvent
fun filterMissingChannelsById(
keys: List<ChannelFinderQueryState>,
since: Map<String, EOSETime>?,
): List<TypedFilter>? {
fun filterMissingChannelsById(keys: List<ChannelFinderQueryState>): List<TypedFilter>? {
val firstTimers =
keys.mapNotNullTo(mutableSetOf()) {
if (it.channel is PublicChatChannel && it.channel.event == null) {
@@ -24,14 +24,10 @@ import com.vitorpamplona.amethyst.model.AddressableNote
import com.vitorpamplona.amethyst.service.relayClient.reqCommand.event.EventFinderQueryState
import com.vitorpamplona.ammolite.relays.EVENT_FINDER_TYPES
import com.vitorpamplona.ammolite.relays.TypedFilter
import com.vitorpamplona.ammolite.relays.filters.EOSETime
import com.vitorpamplona.ammolite.relays.filters.SincePerRelayFilter
import com.vitorpamplona.quartz.nip01Core.tags.addressables.Address
fun filterMissingAddressables(
keys: List<EventFinderQueryState>,
since: Map<String, EOSETime>?,
): List<TypedFilter>? {
fun filterMissingAddressables(keys: List<EventFinderQueryState>): List<TypedFilter>? {
val missingAddressables = mutableSetOf<Address>()
keys.forEach {
@@ -47,13 +43,10 @@ fun filterMissingAddressables(
}
}
return filterMissingAddressables(missingAddressables, since)
return filterMissingAddressables(missingAddressables)
}
fun filterMissingAddressables(
missingAddressables: Set<Address>,
since: Map<String, EOSETime>?,
): List<TypedFilter>? {
fun filterMissingAddressables(missingAddressables: Set<Address>): List<TypedFilter>? {
if (missingAddressables.isEmpty()) return null
return missingAddressables.map { aTag ->
@@ -24,14 +24,10 @@ import com.vitorpamplona.amethyst.model.AddressableNote
import com.vitorpamplona.amethyst.service.relayClient.reqCommand.event.EventFinderQueryState
import com.vitorpamplona.ammolite.relays.EVENT_FINDER_TYPES
import com.vitorpamplona.ammolite.relays.TypedFilter
import com.vitorpamplona.ammolite.relays.filters.EOSETime
import com.vitorpamplona.ammolite.relays.filters.SincePerRelayFilter
import com.vitorpamplona.quartz.nip01Core.core.HexKey
fun filterMissingEvents(
keys: List<EventFinderQueryState>,
since: Map<String, EOSETime>?,
): List<TypedFilter>? {
fun filterMissingEvents(keys: List<EventFinderQueryState>): List<TypedFilter>? {
val missingEvents = mutableSetOf<String>()
keys.forEach {
@@ -47,19 +43,16 @@ fun filterMissingEvents(
}
}
return filterMissingEvents(missingEvents, since)
return filterMissingEvents(missingEvents)
}
fun filterMissingEvents(
missingEventIds: Set<HexKey>,
since: Map<String, EOSETime>?,
): List<TypedFilter>? {
fun filterMissingEvents(missingEventIds: Set<HexKey>): List<TypedFilter>? {
if (missingEventIds.isEmpty()) return null
return listOf(
TypedFilter(
types = EVENT_FINDER_TYPES,
filter = SincePerRelayFilter(ids = missingEventIds.toList()),
filter = SincePerRelayFilter(ids = missingEventIds.sorted()),
),
)
}
@@ -20,22 +20,19 @@
*/
package com.vitorpamplona.amethyst.service.relayClient.reqCommand.event.loaders
import com.vitorpamplona.amethyst.service.relayClient.eoseManagers.SingleSubEoseManager
import com.vitorpamplona.amethyst.service.relayClient.eoseManagers.SingleSubNoEoseCacheEoseManager
import com.vitorpamplona.amethyst.service.relayClient.reqCommand.event.EventFinderQueryState
import com.vitorpamplona.ammolite.relays.NostrClient
import com.vitorpamplona.ammolite.relays.filters.EOSETime
class NoteEventLoaderSubAssembler(
client: NostrClient,
allKeys: () -> Set<EventFinderQueryState>,
) : SingleSubEoseManager<EventFinderQueryState>(client, allKeys, invalidateAfterEose = true) {
override fun updateFilter(
keys: List<EventFinderQueryState>,
since: Map<String, EOSETime>?,
) = listOfNotNull(
filterMissingEvents(keys, since),
filterMissingAddressables(keys, since),
).flatten()
) : SingleSubNoEoseCacheEoseManager<EventFinderQueryState>(client, allKeys, invalidateAfterEose = true) {
override fun updateFilter(keys: List<EventFinderQueryState>) =
listOfNotNull(
filterMissingEvents(keys),
filterMissingAddressables(keys),
).flatten()
override fun distinct(key: EventFinderQueryState) = key.note
}