From f18ea8cf76958a600541135b1fd8af592d48723c Mon Sep 17 00:00:00 2001 From: Chemaclass Date: Sun, 5 Mar 2023 23:00:19 +0100 Subject: [PATCH] Create LnZapEventInterface --- .../amethyst/service/model/LnZapEvent.kt | 38 ++++++++++++++----- .../service/model/LnZapEventInterface.kt | 16 ++++++++ .../amethyst/service/model/zaps/UserZaps.kt | 4 +- 3 files changed, 46 insertions(+), 12 deletions(-) create mode 100644 app/src/main/java/com/vitorpamplona/amethyst/service/model/LnZapEventInterface.kt diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/model/LnZapEvent.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/model/LnZapEvent.kt index 6b43b627b..823b112e5 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/model/LnZapEvent.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/model/LnZapEvent.kt @@ -3,30 +3,38 @@ package com.vitorpamplona.amethyst.service.model import com.vitorpamplona.amethyst.model.HexKey import com.vitorpamplona.amethyst.service.lnurl.LnInvoiceUtil import com.vitorpamplona.amethyst.service.relays.Client +import java.math.BigDecimal -class LnZapEvent ( +class LnZapEvent( id: HexKey, pubKey: HexKey, createdAt: Long, tags: List>, content: String, sig: HexKey -): Event(id, pubKey, createdAt, kind, tags, content, sig) { +): LnZapEventInterface, Event(id, pubKey, createdAt, kind, tags, content, sig) { - fun zappedPost() = tags.filter { it.firstOrNull() == "e" }.mapNotNull { it.getOrNull(1) } - fun zappedAuthor() = tags.filter { it.firstOrNull() == "p" }.mapNotNull { it.getOrNull(1) } + override fun zappedPost() = tags + .filter { it.firstOrNull() == "e" } + .mapNotNull { it.getOrNull(1) } - fun taggedAddresses() = tags.filter { it.firstOrNull() == "a" }.mapNotNull { it.getOrNull(1) }.mapNotNull { ATag.parse(it) } + override fun zappedAuthor() = tags + .filter { it.firstOrNull() == "p" } + .mapNotNull { it.getOrNull(1) } - fun lnInvoice() = tags.filter { it.firstOrNull() == "bolt11" }.mapNotNull { it.getOrNull(1) }.firstOrNull() - fun preimage() = tags.filter { it.firstOrNull() == "preimage" }.mapNotNull { it.getOrNull(1) }.firstOrNull() + override fun taggedAddresses(): List = tags + .filter { it.firstOrNull() == "a" } + .mapNotNull { it.getOrNull(1) } + .mapNotNull { ATag.parse(it) } - fun description() = tags.filter { it.firstOrNull() == "description" }.mapNotNull { it.getOrNull(1) }.firstOrNull() + override fun amount(): BigDecimal? { + return lnInvoice()?.let { LnInvoiceUtil.getAmountInSats(it) } + } // Keeps this as a field because it's a heavier function used everywhere. val amount = lnInvoice()?.let { LnInvoiceUtil.getAmountInSats(it) } - fun containedPost() = try { + override fun containedPost(): Event? = try { description()?.let { fromJson(it, Client.lenient) } @@ -34,7 +42,17 @@ class LnZapEvent ( null } + private fun lnInvoice(): String? = tags + .filter { it.firstOrNull() == "bolt11" } + .mapNotNull { it.getOrNull(1) } + .firstOrNull() + + private fun description(): String? = tags + .filter { it.firstOrNull() == "description" } + .mapNotNull { it.getOrNull(1) } + .firstOrNull() + companion object { const val kind = 9735 } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/model/LnZapEventInterface.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/model/LnZapEventInterface.kt new file mode 100644 index 000000000..144edd730 --- /dev/null +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/model/LnZapEventInterface.kt @@ -0,0 +1,16 @@ +package com.vitorpamplona.amethyst.service.model + +import java.math.BigDecimal + +interface LnZapEventInterface: EventInterface { + + fun zappedPost(): List + + fun zappedAuthor(): List + + fun taggedAddresses(): List + + fun amount(): BigDecimal? + + fun containedPost(): Event? +} diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/model/zaps/UserZaps.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/model/zaps/UserZaps.kt index 08e8fe865..fe5c65304 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/model/zaps/UserZaps.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/model/zaps/UserZaps.kt @@ -1,7 +1,7 @@ package com.vitorpamplona.amethyst.service.model.zaps import com.vitorpamplona.amethyst.model.Note -import com.vitorpamplona.amethyst.service.model.LnZapEvent +import com.vitorpamplona.amethyst.service.model.LnZapEventInterface object UserZaps { fun groupByUser(zaps: Map?): List> { @@ -10,7 +10,7 @@ object UserZaps { return (zaps .filter { it.value != null } .toList() - .sortedBy { (it.second?.event as? LnZapEvent)?.amount } + .sortedBy { (it.second?.event as? LnZapEventInterface)?.amount() } .reversed()) as List> } }