fix(account): only skip broadcast for channel events that declare home relays
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.
This commit is contained in:
@@ -940,8 +940,10 @@ class Account(
|
|||||||
private fun computeRelaysForChannels(event: Event): Set<NormalizedRelayUrl> = cache.getAnyChannel(event)?.relays() ?: emptySet()
|
private fun computeRelaysForChannels(event: Event): Set<NormalizedRelayUrl> = cache.getAnyChannel(event)?.relays() ?: emptySet()
|
||||||
|
|
||||||
// Personal events the user stores just for themselves — drafts, app settings, bookmark
|
// 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
|
// lists — and channel/community events that already declare their own home relays
|
||||||
// not be replicated to the user's broadcasting 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 {
|
private fun wantsBroadcastRelays(event: Event): Boolean {
|
||||||
if (event is DraftWrapEvent ||
|
if (event is DraftWrapEvent ||
|
||||||
event is AppSpecificDataEvent ||
|
event is AppSpecificDataEvent ||
|
||||||
@@ -951,14 +953,14 @@ class Account(
|
|||||||
) {
|
) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
if (event is PollEvent ||
|
if (event is PollEvent && event.relays().isNotEmpty()) return false
|
||||||
event is MeetingSpaceEvent ||
|
if (event is MeetingSpaceEvent && event.allRelayUrls().isNotEmpty()) return false
|
||||||
event is MeetingRoomEvent ||
|
if (event is MeetingRoomEvent && event.allRelayUrls().isNotEmpty()) return false
|
||||||
event is LiveActivitiesEvent ||
|
if (event is LiveActivitiesEvent && event.allRelayUrls().isNotEmpty()) return false
|
||||||
cache.getAnyChannel(event) != null
|
|
||||||
) {
|
val channelRelays = cache.getAnyChannel(event)?.relays()
|
||||||
return false
|
if (channelRelays != null && channelRelays.isNotEmpty()) return false
|
||||||
}
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user