diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/event/EventObservers.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/event/EventObservers.kt index 96fa4a6f1..c0ac72aa1 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/event/EventObservers.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/event/EventObservers.kt @@ -333,7 +333,10 @@ fun observeNoteReferences( // Subscribe in the relay for changes in this note. EventFinderFilterAssemblerSubscription(note, accountViewModel) - // Subscribe in the LocalCache for changes that arrive in the device + // Subscribe in the LocalCache for changes that arrive in the device. + // On-chain zaps piggyback `note.flow().zaps.stateFlow` because Note.addOnchainZap + // invalidates the same `flowSet.zaps`. If that ever moves to a dedicated flow, + // add it here too — otherwise on-chain-only notes will stop pinging the chevron. val flow = remember(note) { combine( diff --git a/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/model/Note.kt b/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/model/Note.kt index 5421d0f9a..a6a7a6d65 100644 --- a/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/model/Note.kt +++ b/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/model/Note.kt @@ -278,7 +278,7 @@ open class Note( } } - fun hasZapsBoostsOrReactions(): Boolean = reactions.isNotEmpty() || zaps.isNotEmpty() || boosts.isNotEmpty() + fun hasZapsBoostsOrReactions(): Boolean = reactions.isNotEmpty() || zaps.isNotEmpty() || boosts.isNotEmpty() || onchainZaps.isNotEmpty() fun countReactions(): Int { var total = 0 diff --git a/commons/src/commonTest/kotlin/com/vitorpamplona/amethyst/commons/model/NoteOnchainZapTest.kt b/commons/src/commonTest/kotlin/com/vitorpamplona/amethyst/commons/model/NoteOnchainZapTest.kt index 752bb2b36..b70afc7dc 100644 --- a/commons/src/commonTest/kotlin/com/vitorpamplona/amethyst/commons/model/NoteOnchainZapTest.kt +++ b/commons/src/commonTest/kotlin/com/vitorpamplona/amethyst/commons/model/NoteOnchainZapTest.kt @@ -23,6 +23,7 @@ package com.vitorpamplona.amethyst.commons.model import java.math.BigDecimal import kotlin.test.Test import kotlin.test.assertEquals +import kotlin.test.assertFalse import kotlin.test.assertSame import kotlin.test.assertTrue @@ -104,6 +105,28 @@ class NoteOnchainZapTest { assertEquals(BigDecimal.valueOf(100L), target.zapsAmount) } + @Test + fun hasZapsBoostsOrReactionsReturnsTrueWhenOnlyOnchainZapPresent() { + val target = freshNote() + val src = sourceNote("9".repeat(64)) + + assertFalse(target.hasZapsBoostsOrReactions()) + + target.addOnchainZap(source = src, txid = "tx1", verifiedSats = 6416L, confirmed = true) + + assertTrue(target.hasZapsBoostsOrReactions()) + } + + @Test + fun hasZapsBoostsOrReactionsReturnsTrueWhenOnlyPendingOnchainZapPresent() { + val target = freshNote() + val src = sourceNote("8".repeat(64)) + + target.addOnchainZap(source = src, txid = "tx1", verifiedSats = 1000L, confirmed = false) + + assertTrue(target.hasZapsBoostsOrReactions()) + } + @Test fun updateZapTotalSumsConfirmedAcrossMultipleTxids() { val target = freshNote()