From 580cf765775d6a85509cc8d915bff56f831728cd Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Tue, 2 May 2023 16:46:52 -0400 Subject: [PATCH] BugFix on calculating the Zap amount. --- .../com/vitorpamplona/amethyst/model/Note.kt | 2 +- .../amethyst/service/model/Event.kt | 1 + .../service/model/LnZapPaymentRequestEvent.kt | 52 ++++++++++++++++--- .../amethyst/ui/note/ReactionsRow.kt | 11 ++-- 4 files changed, 49 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/Note.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/Note.kt index c74ed7997..aa3ce4ad5 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/Note.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/Note.kt @@ -286,7 +286,7 @@ open class Note(val idHex: String) { response is PayInvoiceSuccessResponse } .associate { - val lnInvoice = (it.key.event as? LnZapPaymentRequestEvent)?.lnInvoice(privKey) + val lnInvoice = (it.key.event as? LnZapPaymentRequestEvent)?.lnInvoice(privKey, walletServicePubkey) val amount = try { if (lnInvoice == null) { null diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/model/Event.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/model/Event.kt index e25753d0b..3ecf62c9f 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/model/Event.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/model/Event.kt @@ -208,6 +208,7 @@ open class Event( .registerTypeAdapter(ByteArray::class.java, ByteArraySerializer()) .registerTypeAdapter(ByteArray::class.java, ByteArrayDeserializer()) .registerTypeAdapter(Response::class.java, ResponseDeserializer()) + .registerTypeAdapter(Request::class.java, RequestDeserializer()) .create() fun fromJson(json: String, lenient: Boolean = false): Event = gson.fromJson(json, Event::class.java).getRefinedEvent(lenient) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/model/LnZapPaymentRequestEvent.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/model/LnZapPaymentRequestEvent.kt index ff21118f2..23799afb3 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/model/LnZapPaymentRequestEvent.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/model/LnZapPaymentRequestEvent.kt @@ -1,10 +1,15 @@ package com.vitorpamplona.amethyst.service.model import android.util.Log +import com.google.gson.JsonDeserializationContext +import com.google.gson.JsonDeserializer +import com.google.gson.JsonElement +import com.google.gson.JsonParseException import com.vitorpamplona.amethyst.model.HexKey import com.vitorpamplona.amethyst.model.toByteArray import com.vitorpamplona.amethyst.model.toHexKey import nostr.postr.Utils +import java.lang.reflect.Type import java.util.Date class LnZapPaymentRequestEvent( @@ -18,11 +23,15 @@ class LnZapPaymentRequestEvent( fun walletServicePubKey() = tags.firstOrNull() { it.size > 1 && it[0] == "p" }?.get(1) - fun lnInvoice(privKey: ByteArray): String? { + fun lnInvoice(privKey: ByteArray, pubkey: ByteArray): String? { return try { - val sharedSecret = Utils.getSharedSecret(privKey, pubKey.toByteArray()) + val sharedSecret = Utils.getSharedSecret(privKey, pubkey) - return Utils.decrypt(content, sharedSecret) + val jsonText = Utils.decrypt(content, sharedSecret) + + val payInvoiceMethod = gson.fromJson(jsonText, Request::class.java) + + return (payInvoiceMethod as? PayInvoiceMethod)?.params?.invoice } catch (e: Exception) { Log.w("BookmarkList", "Error decrypting the message ${e.message}") null @@ -39,7 +48,7 @@ class LnZapPaymentRequestEvent( createdAt: Long = Date().time / 1000 ): LnZapPaymentRequestEvent { val pubKey = Utils.pubkeyCreate(privateKey) - val serializedRequest = gson.toJson(PayInvoiceMethod(lnInvoice)) + val serializedRequest = gson.toJson(PayInvoiceMethod.create(lnInvoice)) val content = Utils.encrypt( serializedRequest, @@ -59,11 +68,38 @@ class LnZapPaymentRequestEvent( // REQUEST OBJECTS -abstract class Request(val method: String, val params: Params) -abstract class Params +abstract class Request(var method: String? = null) // PayInvoice Call +class PayInvoiceParams(var invoice: String? = null) -class PayInvoiceMethod(bolt11: String) : Request("pay_invoice", PayInvoiceParams(bolt11)) { - class PayInvoiceParams(val invoice: String) : Params() +class PayInvoiceMethod(var params: PayInvoiceParams? = null) : Request("pay_invoice") { + + companion object { + fun create(bolt11: String): PayInvoiceMethod { + return PayInvoiceMethod(PayInvoiceParams(bolt11)) + } + } } + + +class RequestDeserializer : + JsonDeserializer { + @Throws(JsonParseException::class) + override fun deserialize( + json: JsonElement, + typeOfT: Type, + context: JsonDeserializationContext + ): Request? { + val jsonObject = json.asJsonObject + val method = jsonObject.get("method")?.asString + + if (method == "pay_invoice") { + return context.deserialize(jsonObject, PayInvoiceMethod::class.java) + } + return null + } + + companion object { + } +} \ No newline at end of file diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ReactionsRow.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ReactionsRow.kt index 21c839669..cc3591e3e 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ReactionsRow.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/ReactionsRow.kt @@ -319,12 +319,15 @@ fun ZapReaction( var zappingProgress by remember { mutableStateOf(0f) } var wasZappedByLoggedInUser by remember { mutableStateOf(false) } + var zapAmount by remember { mutableStateOf(null) } LaunchedEffect(key1 = zapsState) { withContext(Dispatchers.IO) { if (!wasZappedByLoggedInUser) { wasZappedByLoggedInUser = accountViewModel.calculateIfNoteWasZappedByAccount(zappedNote) } + + zapAmount = account.calculateZappedAmount(zappedNote) } } @@ -452,14 +455,6 @@ fun ZapReaction( } } - var zapAmount by remember { mutableStateOf(null) } - - LaunchedEffect(key1 = zapsState) { - withContext(Dispatchers.IO) { - zapAmount = account.calculateZappedAmount(zappedNote) - } - } - Text( showAmount(zapAmount), fontSize = 14.sp,