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 3d2222875..d6e6e7193 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt @@ -452,7 +452,13 @@ class Account( fun broadcast(note: Note) { note.event?.let { - Client.send(it) + if (it is WrappedEvent && it.host != null) { + it.host?.let { hostEvent -> + Client.send(hostEvent) + } + } else { + Client.send(it) + } } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/ChatMessageEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/ChatMessageEvent.kt index 47a552f18..b41c60429 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/ChatMessageEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/ChatMessageEvent.kt @@ -17,7 +17,7 @@ class ChatMessageEvent( tags: List>, content: String, sig: HexKey -) : Event(id, pubKey, createdAt, kind, tags, content, sig), ChatroomKeyable { +) : WrappedEvent(id, pubKey, createdAt, kind, tags, content, sig), ChatroomKeyable { /** * Recepients intended to receive this conversation */ diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/Event.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/Event.kt index 594e17e47..2bf84d6dd 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/Event.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/Event.kt @@ -362,6 +362,22 @@ open class Event( } } +@Immutable +open class WrappedEvent( + id: HexKey, + @JsonProperty("pubkey") + pubKey: HexKey, + @JsonProperty("created_at") + createdAt: Long, + kind: Int, + tags: List>, + content: String, + sig: HexKey +) : Event(id, pubKey, createdAt, kind, tags, content, sig) { + @Transient + var host: Event? = null // host event to broadcast when needed +} + @Immutable interface AddressableEvent { fun dTag(): String diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/GiftWrapEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/GiftWrapEvent.kt index 84ab92e36..9c58f89ff 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/GiftWrapEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/GiftWrapEvent.kt @@ -28,6 +28,10 @@ class GiftWrapEvent( if (cachedInnerEvent.contains(hex)) return cachedInnerEvent[hex] val myInnerEvent = unwrap(privKey = privKey) + if (myInnerEvent is WrappedEvent) { + myInnerEvent.host = this + } + cachedInnerEvent = cachedInnerEvent + Pair(hex, myInnerEvent) return myInnerEvent } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/SealedGossipEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/SealedGossipEvent.kt index 3bdf735d9..c3eadf865 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/SealedGossipEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/SealedGossipEvent.kt @@ -20,7 +20,7 @@ class SealedGossipEvent( tags: List>, content: String, sig: HexKey -) : Event(id, pubKey, createdAt, kind, tags, content, sig) { +): WrappedEvent(id, pubKey, createdAt, kind, tags, content, sig) { @Transient private var cachedInnerEvent: Map = mapOf() @@ -30,6 +30,10 @@ class SealedGossipEvent( val gossip = unseal(privKey = privKey) val event = gossip?.mergeWith(this) + if (event is WrappedEvent) { + event.host = host ?: this + } + cachedInnerEvent = cachedInnerEvent + Pair(hex, event) return event }