fix: skip offline relays when fetching user metadata

This commit is contained in:
Claude
2026-05-20 20:18:56 +00:00
parent 13a599e282
commit dfd06e0dfd
3 changed files with 12 additions and 3 deletions
@@ -48,7 +48,7 @@ class UserFinderFilterAssembler(
val group =
listOf(
UserOutboxFinderSubAssembler(client, cache, failureTracker, ::allKeys),
UserWatcherSubAssembler(client, cache, ::allKeys),
UserWatcherSubAssembler(client, cache, failureTracker, ::allKeys),
UserReportsSubAssembler(client, cache, ::allKeys),
UserCardsSubAssembler(client, cache, ::allKeys),
)
@@ -48,6 +48,7 @@ val UserMetadataForKeyKinds =
fun filterUserMetadataForKey(
authors: Set<User>,
indexRelays: Set<NormalizedRelayUrl>,
cannotConnectRelays: Set<NormalizedRelayUrl>,
since: EOSEAccountFast<User>,
): List<RelayBasedFilter> {
val perRelayUsers =
@@ -57,7 +58,7 @@ fun filterUserMetadataForKey(
key.outboxRelays()
?: (key.allUsedRelays() + LocalCache.relayHints.hintsForKey(key.pubkeyHex) + indexRelays)
relays.forEach {
(relays - cannotConnectRelays).forEach {
add(it, key)
}
}
@@ -28,6 +28,7 @@ import com.vitorpamplona.amethyst.service.relayClient.reqCommand.user.UserFinder
import com.vitorpamplona.amethyst.service.relays.EOSEAccountFast
import com.vitorpamplona.quartz.nip01Core.core.Event
import com.vitorpamplona.quartz.nip01Core.relay.client.INostrClient
import com.vitorpamplona.quartz.nip01Core.relay.client.accessories.RelayOfflineTracker
import com.vitorpamplona.quartz.nip01Core.relay.client.pool.groupByRelay
import com.vitorpamplona.quartz.nip01Core.relay.client.reqs.SubscriptionListener
import com.vitorpamplona.quartz.nip01Core.relay.filters.Filter
@@ -37,6 +38,7 @@ import com.vitorpamplona.quartz.utils.TimeUtils
class UserWatcherSubAssembler(
client: INostrClient,
val cache: LocalCache,
val failureTracker: RelayOfflineTracker,
allKeys: () -> Set<UserFinderQueryState>,
) : BaseEoseManager<UserFinderQueryState>(client, allKeys) {
/**
@@ -99,7 +101,13 @@ class UserWatcherSubAssembler(
)
}
val newFilters = filterUserMetadataForKey(users, indexRelays, latestEOSEs).ifEmpty { null }
val newFilters =
filterUserMetadataForKey(
users,
indexRelays,
failureTracker.cannotConnectRelays,
latestEOSEs,
).ifEmpty { null }
sub.updateFilters(newFilters?.groupByRelay())
}