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 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.amethyst.service.relayClient.reqCommand.channel.ChannelFinderQueryState
import com.vitorpamplona.ammolite.relays.NostrClient import com.vitorpamplona.ammolite.relays.NostrClient
import com.vitorpamplona.ammolite.relays.TypedFilter import com.vitorpamplona.ammolite.relays.TypedFilter
import com.vitorpamplona.ammolite.relays.filters.EOSETime
/** /**
* This assembler observes loads missing public chats when needed. * This assembler observes loads missing public chats when needed.
@@ -38,11 +37,8 @@ import com.vitorpamplona.ammolite.relays.filters.EOSETime
class ChannelLoaderSubAssembler( class ChannelLoaderSubAssembler(
client: NostrClient, client: NostrClient,
allKeys: () -> Set<ChannelFinderQueryState>, allKeys: () -> Set<ChannelFinderQueryState>,
) : SingleSubEoseManager<ChannelFinderQueryState>(client, allKeys, invalidateAfterEose = true) { ) : SingleSubNoEoseCacheEoseManager<ChannelFinderQueryState>(client, allKeys, invalidateAfterEose = true) {
override fun updateFilter( override fun updateFilter(keys: List<ChannelFinderQueryState>): List<TypedFilter>? = filterMissingChannelsById(keys)
keys: List<ChannelFinderQueryState>,
since: Map<String, EOSETime>?,
): List<TypedFilter>? = filterMissingChannelsById(keys, since)
override fun distinct(key: ChannelFinderQueryState) = key.channel.idHex 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.amethyst.service.relayClient.reqCommand.channel.ChannelFinderQueryState
import com.vitorpamplona.ammolite.relays.EVENT_FINDER_TYPES import com.vitorpamplona.ammolite.relays.EVENT_FINDER_TYPES
import com.vitorpamplona.ammolite.relays.TypedFilter import com.vitorpamplona.ammolite.relays.TypedFilter
import com.vitorpamplona.ammolite.relays.filters.EOSETime
import com.vitorpamplona.ammolite.relays.filters.SincePerRelayFilter import com.vitorpamplona.ammolite.relays.filters.SincePerRelayFilter
import com.vitorpamplona.quartz.nip28PublicChat.admin.ChannelCreateEvent import com.vitorpamplona.quartz.nip28PublicChat.admin.ChannelCreateEvent
fun filterMissingChannelsById( fun filterMissingChannelsById(keys: List<ChannelFinderQueryState>): List<TypedFilter>? {
keys: List<ChannelFinderQueryState>,
since: Map<String, EOSETime>?,
): List<TypedFilter>? {
val firstTimers = val firstTimers =
keys.mapNotNullTo(mutableSetOf()) { keys.mapNotNullTo(mutableSetOf()) {
if (it.channel is PublicChatChannel && it.channel.event == null) { 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.amethyst.service.relayClient.reqCommand.event.EventFinderQueryState
import com.vitorpamplona.ammolite.relays.EVENT_FINDER_TYPES import com.vitorpamplona.ammolite.relays.EVENT_FINDER_TYPES
import com.vitorpamplona.ammolite.relays.TypedFilter import com.vitorpamplona.ammolite.relays.TypedFilter
import com.vitorpamplona.ammolite.relays.filters.EOSETime
import com.vitorpamplona.ammolite.relays.filters.SincePerRelayFilter import com.vitorpamplona.ammolite.relays.filters.SincePerRelayFilter
import com.vitorpamplona.quartz.nip01Core.tags.addressables.Address import com.vitorpamplona.quartz.nip01Core.tags.addressables.Address
fun filterMissingAddressables( fun filterMissingAddressables(keys: List<EventFinderQueryState>): List<TypedFilter>? {
keys: List<EventFinderQueryState>,
since: Map<String, EOSETime>?,
): List<TypedFilter>? {
val missingAddressables = mutableSetOf<Address>() val missingAddressables = mutableSetOf<Address>()
keys.forEach { keys.forEach {
@@ -47,13 +43,10 @@ fun filterMissingAddressables(
} }
} }
return filterMissingAddressables(missingAddressables, since) return filterMissingAddressables(missingAddressables)
} }
fun filterMissingAddressables( fun filterMissingAddressables(missingAddressables: Set<Address>): List<TypedFilter>? {
missingAddressables: Set<Address>,
since: Map<String, EOSETime>?,
): List<TypedFilter>? {
if (missingAddressables.isEmpty()) return null if (missingAddressables.isEmpty()) return null
return missingAddressables.map { aTag -> 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.amethyst.service.relayClient.reqCommand.event.EventFinderQueryState
import com.vitorpamplona.ammolite.relays.EVENT_FINDER_TYPES import com.vitorpamplona.ammolite.relays.EVENT_FINDER_TYPES
import com.vitorpamplona.ammolite.relays.TypedFilter import com.vitorpamplona.ammolite.relays.TypedFilter
import com.vitorpamplona.ammolite.relays.filters.EOSETime
import com.vitorpamplona.ammolite.relays.filters.SincePerRelayFilter import com.vitorpamplona.ammolite.relays.filters.SincePerRelayFilter
import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.core.HexKey
fun filterMissingEvents( fun filterMissingEvents(keys: List<EventFinderQueryState>): List<TypedFilter>? {
keys: List<EventFinderQueryState>,
since: Map<String, EOSETime>?,
): List<TypedFilter>? {
val missingEvents = mutableSetOf<String>() val missingEvents = mutableSetOf<String>()
keys.forEach { keys.forEach {
@@ -47,19 +43,16 @@ fun filterMissingEvents(
} }
} }
return filterMissingEvents(missingEvents, since) return filterMissingEvents(missingEvents)
} }
fun filterMissingEvents( fun filterMissingEvents(missingEventIds: Set<HexKey>): List<TypedFilter>? {
missingEventIds: Set<HexKey>,
since: Map<String, EOSETime>?,
): List<TypedFilter>? {
if (missingEventIds.isEmpty()) return null if (missingEventIds.isEmpty()) return null
return listOf( return listOf(
TypedFilter( TypedFilter(
types = EVENT_FINDER_TYPES, 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 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.amethyst.service.relayClient.reqCommand.event.EventFinderQueryState
import com.vitorpamplona.ammolite.relays.NostrClient import com.vitorpamplona.ammolite.relays.NostrClient
import com.vitorpamplona.ammolite.relays.filters.EOSETime
class NoteEventLoaderSubAssembler( class NoteEventLoaderSubAssembler(
client: NostrClient, client: NostrClient,
allKeys: () -> Set<EventFinderQueryState>, allKeys: () -> Set<EventFinderQueryState>,
) : SingleSubEoseManager<EventFinderQueryState>(client, allKeys, invalidateAfterEose = true) { ) : SingleSubNoEoseCacheEoseManager<EventFinderQueryState>(client, allKeys, invalidateAfterEose = true) {
override fun updateFilter( override fun updateFilter(keys: List<EventFinderQueryState>) =
keys: List<EventFinderQueryState>, listOfNotNull(
since: Map<String, EOSETime>?, filterMissingEvents(keys),
) = listOfNotNull( filterMissingAddressables(keys),
filterMissingEvents(keys, since), ).flatten()
filterMissingAddressables(keys, since),
).flatten()
override fun distinct(key: EventFinderQueryState) = key.note override fun distinct(key: EventFinderQueryState) = key.note
} }