From 007161c7b45751c92b776ed7566aae048172d7cf Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 13 May 2026 03:15:02 +0000 Subject: [PATCH] fix(account): only skip broadcast for channel events that declare home relays MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Tighten the channel/community arm of wantsBroadcastRelays. The previous revision dropped broadcasting relays for every PollEvent / MeetingSpaceEvent / MeetingRoomEvent / LiveActivitiesEvent and for any event LocalCache resolves to a channel. That's wrong when the event itself doesn't carry a relay set — without broadcast there's no destination left. Only treat a channel/community event as "self-routing" when its own relays() / allRelayUrls() (or its channel's relays()) is non-empty. Otherwise fall through to the broadcasting list. --- .../vitorpamplona/amethyst/model/Account.kt | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/Account.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/Account.kt index 675dc3091..2138e02e1 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/Account.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/Account.kt @@ -940,8 +940,10 @@ class Account( private fun computeRelaysForChannels(event: Event): Set = cache.getAnyChannel(event)?.relays() ?: emptySet() // Personal events the user stores just for themselves — drafts, app settings, bookmark - // lists — and channel/community events that already declare their own relay set should - // not be replicated to the user's broadcasting relays. + // lists — and channel/community events that already declare their own home relays + // should not be replicated to the user's broadcasting relays. Channel/community events + // that don't define any home relays fall through to broadcast, since there's nowhere + // else for them to land. private fun wantsBroadcastRelays(event: Event): Boolean { if (event is DraftWrapEvent || event is AppSpecificDataEvent || @@ -951,14 +953,14 @@ class Account( ) { return false } - if (event is PollEvent || - event is MeetingSpaceEvent || - event is MeetingRoomEvent || - event is LiveActivitiesEvent || - cache.getAnyChannel(event) != null - ) { - return false - } + if (event is PollEvent && event.relays().isNotEmpty()) return false + if (event is MeetingSpaceEvent && event.allRelayUrls().isNotEmpty()) return false + if (event is MeetingRoomEvent && event.allRelayUrls().isNotEmpty()) return false + if (event is LiveActivitiesEvent && event.allRelayUrls().isNotEmpty()) return false + + val channelRelays = cache.getAnyChannel(event)?.relays() + if (channelRelays != null && channelRelays.isNotEmpty()) return false + return true }