From 326e38f293e928637f88e55df7f7351f341e62e7 Mon Sep 17 00:00:00 2001 From: jeremyd Date: Fri, 10 May 2024 14:46:06 -0700 Subject: [PATCH] allow relay selection dialog to pick any relays (instead of just write relays) --- .../vitorpamplona/amethyst/model/Account.kt | 4 +++ .../amethyst/service/relays/Relay.kt | 32 +++++++++++++++++++ .../amethyst/service/relays/RelayPool.kt | 6 +++- .../ui/actions/RelaySelectionDialog.kt | 2 +- 4 files changed, 42 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt index d7107e8a1..5d61b0187 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt @@ -2435,6 +2435,10 @@ class Account( return (activeRelays() ?: convertLocalRelays()).filter { it.write } } + fun activeAllRelays(): List { + return ((activeRelays() ?: convertLocalRelays()).toList()) + } + fun isAllHidden(users: Set): Boolean { return users.all { isHidden(it) } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/relays/Relay.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/relays/Relay.kt index 21eaeb714..e9e63fede 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/relays/Relay.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/relays/Relay.kt @@ -449,6 +449,38 @@ class Relay( } } + // This function sends the event regardless of the relay being write or not. + fun sendOverride(signedEvent: EventInterface) { + checkNotInMainThread() + + if (signedEvent is RelayAuthEvent) { + authResponse.put(signedEvent.id, false) + // specific protocol for this event. + val event = """["AUTH",${signedEvent.toJson()}]""" + socket?.send(event) + eventUploadCounterInBytes += event.bytesUsedInMemory() + } else { + val event = """["EVENT",${signedEvent.toJson()}]""" + if (isConnected()) { + if (isReady) { + socket?.send(event) + eventUploadCounterInBytes += event.bytesUsedInMemory() + } + } else { + // sends all filters after connection is successful. + connectAndRun { + checkNotInMainThread() + + socket?.send(event) + eventUploadCounterInBytes += event.bytesUsedInMemory() + + // Sends everything. + renewFilters() + } + } + } + } + fun send(signedEvent: EventInterface) { checkNotInMainThread() diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/relays/RelayPool.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/relays/RelayPool.kt index faf184671..969a726b7 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/relays/RelayPool.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/relays/RelayPool.kt @@ -150,13 +150,17 @@ object RelayPool : Relay.Listener { list: List, signedEvent: EventInterface, ) { - list.forEach { relay -> relays.filter { it.url == relay.url }.forEach { it.send(signedEvent) } } + list.forEach { relay -> relays.filter { it.url == relay.url }.forEach { it.sendOverride(signedEvent) } } } fun send(signedEvent: EventInterface) { relays.forEach { it.send(signedEvent) } } + fun sendOverride(signedEvent: EventInterface) { + relays.forEach { it.sendOverride(signedEvent) } + } + fun close(subscriptionId: String) { relays.forEach { it.close(subscriptionId) } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/RelaySelectionDialog.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/RelaySelectionDialog.kt index b64c63cec..b2286c749 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/RelaySelectionDialog.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/RelaySelectionDialog.kt @@ -78,7 +78,7 @@ fun RelaySelectionDialog( var relays by remember { mutableStateOf( - accountViewModel.account.activeWriteRelays().map { + accountViewModel.account.activeAllRelays().map { RelayList( relay = it, relayInfo = RelayBriefInfoCache.RelayBriefInfo(it.url),