From dfd06e0dfdf3ff2092ac16f68c246c6084513071 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 20 May 2026 20:18:56 +0000 Subject: [PATCH] fix: skip offline relays when fetching user metadata --- .../reqCommand/user/UserFinderFilterAssembler.kt | 2 +- .../user/watchers/FilterUserMetadataForKey.kt | 3 ++- .../user/watchers/UserWatcherSubAssembler.kt | 10 +++++++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/user/UserFinderFilterAssembler.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/user/UserFinderFilterAssembler.kt index e6b572e096..8e72efe9ef 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/user/UserFinderFilterAssembler.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/user/UserFinderFilterAssembler.kt @@ -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), ) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/user/watchers/FilterUserMetadataForKey.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/user/watchers/FilterUserMetadataForKey.kt index 97a13bac74..c04d4d9392 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/user/watchers/FilterUserMetadataForKey.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/user/watchers/FilterUserMetadataForKey.kt @@ -48,6 +48,7 @@ val UserMetadataForKeyKinds = fun filterUserMetadataForKey( authors: Set, indexRelays: Set, + cannotConnectRelays: Set, since: EOSEAccountFast, ): List { 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) } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/user/watchers/UserWatcherSubAssembler.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/user/watchers/UserWatcherSubAssembler.kt index a925ca08fd..3210d70cf4 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/user/watchers/UserWatcherSubAssembler.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/user/watchers/UserWatcherSubAssembler.kt @@ -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, ) : BaseEoseManager(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()) }