From 7a807e94af2d4884c095f4a28102dc6abb716dda Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Tue, 2 Sep 2025 18:28:41 -0400 Subject: [PATCH] Exposes active filters per relay on the Nostr Client for debugging purposes --- .../quartz/nip01Core/relay/client/NostrClient.kt | 7 +++++++ .../relay/client/pool/PoolEventOutboxRepository.kt | 10 ++++++++++ .../relay/client/pool/PoolSubscriptionRepository.kt | 11 +++++++++++ 3 files changed, 28 insertions(+) diff --git a/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/client/NostrClient.kt b/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/client/NostrClient.kt index aceb69c39..e464d787f 100644 --- a/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/client/NostrClient.kt +++ b/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/client/NostrClient.kt @@ -21,6 +21,7 @@ package com.vitorpamplona.quartz.nip01Core.relay.client import com.vitorpamplona.quartz.nip01Core.core.Event +import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.relay.client.listeners.IRelayClientListener import com.vitorpamplona.quartz.nip01Core.relay.client.listeners.RelayState import com.vitorpamplona.quartz.nip01Core.relay.client.pool.PoolEventOutboxRepository @@ -395,6 +396,12 @@ class NostrClient( listeners = listeners.minus(listener) } + fun activeRequests(url: NormalizedRelayUrl): Map> = activeRequests.activeFiltersFor(url) + + fun activeCounts(url: NormalizedRelayUrl): Map> = activeCounts.activeFiltersFor(url) + + fun activeOutboxCache(url: NormalizedRelayUrl): Set = eventOutbox.activeOutboxCacheFor(url) + fun getSubscriptionFiltersOrNull(subId: String): Map>? = activeRequests.getSubscriptionFiltersOrNull(subId) fun relayStatusFlow() = relayPool.statusFlow diff --git a/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/client/pool/PoolEventOutboxRepository.kt b/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/client/pool/PoolEventOutboxRepository.kt index 8ca1e03c9..8a301109d 100644 --- a/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/client/pool/PoolEventOutboxRepository.kt +++ b/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/client/pool/PoolEventOutboxRepository.kt @@ -40,6 +40,16 @@ class PoolEventOutboxRepository { } } + fun activeOutboxCacheFor(url: NormalizedRelayUrl): Set { + val myEvents = mutableSetOf() + eventOutbox.forEach { eventId, outboxCache -> + if (url in outboxCache.relays) { + myEvents.add(eventId) + } + } + return myEvents + } + fun markAsSending( event: Event, relays: Set, diff --git a/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/client/pool/PoolSubscriptionRepository.kt b/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/client/pool/PoolSubscriptionRepository.kt index c24064a12..2ac117b69 100644 --- a/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/client/pool/PoolSubscriptionRepository.kt +++ b/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/client/pool/PoolSubscriptionRepository.kt @@ -40,6 +40,17 @@ class PoolSubscriptionRepository { } } + fun activeFiltersFor(url: NormalizedRelayUrl): Map> { + val myRelays = mutableMapOf>() + subscriptions.forEach { sub, perRelayFilters -> + val filters = perRelayFilters.get(url) + if (filters != null) { + myRelays.put(sub, filters) + } + } + return myRelays + } + fun addOrUpdate( subscriptionId: String, filters: Map>,