BugFix on calculating the Zap amount.
This commit is contained in:
@@ -286,7 +286,7 @@ open class Note(val idHex: String) {
|
|||||||
response is PayInvoiceSuccessResponse
|
response is PayInvoiceSuccessResponse
|
||||||
}
|
}
|
||||||
.associate {
|
.associate {
|
||||||
val lnInvoice = (it.key.event as? LnZapPaymentRequestEvent)?.lnInvoice(privKey)
|
val lnInvoice = (it.key.event as? LnZapPaymentRequestEvent)?.lnInvoice(privKey, walletServicePubkey)
|
||||||
val amount = try {
|
val amount = try {
|
||||||
if (lnInvoice == null) {
|
if (lnInvoice == null) {
|
||||||
null
|
null
|
||||||
|
|||||||
@@ -208,6 +208,7 @@ open class Event(
|
|||||||
.registerTypeAdapter(ByteArray::class.java, ByteArraySerializer())
|
.registerTypeAdapter(ByteArray::class.java, ByteArraySerializer())
|
||||||
.registerTypeAdapter(ByteArray::class.java, ByteArrayDeserializer())
|
.registerTypeAdapter(ByteArray::class.java, ByteArrayDeserializer())
|
||||||
.registerTypeAdapter(Response::class.java, ResponseDeserializer())
|
.registerTypeAdapter(Response::class.java, ResponseDeserializer())
|
||||||
|
.registerTypeAdapter(Request::class.java, RequestDeserializer())
|
||||||
.create()
|
.create()
|
||||||
|
|
||||||
fun fromJson(json: String, lenient: Boolean = false): Event = gson.fromJson(json, Event::class.java).getRefinedEvent(lenient)
|
fun fromJson(json: String, lenient: Boolean = false): Event = gson.fromJson(json, Event::class.java).getRefinedEvent(lenient)
|
||||||
|
|||||||
+44
-8
@@ -1,10 +1,15 @@
|
|||||||
package com.vitorpamplona.amethyst.service.model
|
package com.vitorpamplona.amethyst.service.model
|
||||||
|
|
||||||
import android.util.Log
|
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.HexKey
|
||||||
import com.vitorpamplona.amethyst.model.toByteArray
|
import com.vitorpamplona.amethyst.model.toByteArray
|
||||||
import com.vitorpamplona.amethyst.model.toHexKey
|
import com.vitorpamplona.amethyst.model.toHexKey
|
||||||
import nostr.postr.Utils
|
import nostr.postr.Utils
|
||||||
|
import java.lang.reflect.Type
|
||||||
import java.util.Date
|
import java.util.Date
|
||||||
|
|
||||||
class LnZapPaymentRequestEvent(
|
class LnZapPaymentRequestEvent(
|
||||||
@@ -18,11 +23,15 @@ class LnZapPaymentRequestEvent(
|
|||||||
|
|
||||||
fun walletServicePubKey() = tags.firstOrNull() { it.size > 1 && it[0] == "p" }?.get(1)
|
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 {
|
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) {
|
} catch (e: Exception) {
|
||||||
Log.w("BookmarkList", "Error decrypting the message ${e.message}")
|
Log.w("BookmarkList", "Error decrypting the message ${e.message}")
|
||||||
null
|
null
|
||||||
@@ -39,7 +48,7 @@ class LnZapPaymentRequestEvent(
|
|||||||
createdAt: Long = Date().time / 1000
|
createdAt: Long = Date().time / 1000
|
||||||
): LnZapPaymentRequestEvent {
|
): LnZapPaymentRequestEvent {
|
||||||
val pubKey = Utils.pubkeyCreate(privateKey)
|
val pubKey = Utils.pubkeyCreate(privateKey)
|
||||||
val serializedRequest = gson.toJson(PayInvoiceMethod(lnInvoice))
|
val serializedRequest = gson.toJson(PayInvoiceMethod.create(lnInvoice))
|
||||||
|
|
||||||
val content = Utils.encrypt(
|
val content = Utils.encrypt(
|
||||||
serializedRequest,
|
serializedRequest,
|
||||||
@@ -59,11 +68,38 @@ class LnZapPaymentRequestEvent(
|
|||||||
|
|
||||||
// REQUEST OBJECTS
|
// REQUEST OBJECTS
|
||||||
|
|
||||||
abstract class Request(val method: String, val params: Params)
|
abstract class Request(var method: String? = null)
|
||||||
abstract class Params
|
|
||||||
|
|
||||||
// PayInvoice Call
|
// PayInvoice Call
|
||||||
|
class PayInvoiceParams(var invoice: String? = null)
|
||||||
|
|
||||||
class PayInvoiceMethod(bolt11: String) : Request("pay_invoice", PayInvoiceParams(bolt11)) {
|
class PayInvoiceMethod(var params: PayInvoiceParams? = null) : Request("pay_invoice") {
|
||||||
class PayInvoiceParams(val invoice: String) : Params()
|
|
||||||
|
companion object {
|
||||||
|
fun create(bolt11: String): PayInvoiceMethod {
|
||||||
|
return PayInvoiceMethod(PayInvoiceParams(bolt11))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class RequestDeserializer :
|
||||||
|
JsonDeserializer<Request?> {
|
||||||
|
@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<PayInvoiceMethod>(jsonObject, PayInvoiceMethod::class.java)
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -319,12 +319,15 @@ fun ZapReaction(
|
|||||||
var zappingProgress by remember { mutableStateOf(0f) }
|
var zappingProgress by remember { mutableStateOf(0f) }
|
||||||
|
|
||||||
var wasZappedByLoggedInUser by remember { mutableStateOf(false) }
|
var wasZappedByLoggedInUser by remember { mutableStateOf(false) }
|
||||||
|
var zapAmount by remember { mutableStateOf<BigDecimal?>(null) }
|
||||||
|
|
||||||
LaunchedEffect(key1 = zapsState) {
|
LaunchedEffect(key1 = zapsState) {
|
||||||
withContext(Dispatchers.IO) {
|
withContext(Dispatchers.IO) {
|
||||||
if (!wasZappedByLoggedInUser) {
|
if (!wasZappedByLoggedInUser) {
|
||||||
wasZappedByLoggedInUser = accountViewModel.calculateIfNoteWasZappedByAccount(zappedNote)
|
wasZappedByLoggedInUser = accountViewModel.calculateIfNoteWasZappedByAccount(zappedNote)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
zapAmount = account.calculateZappedAmount(zappedNote)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -452,14 +455,6 @@ fun ZapReaction(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var zapAmount by remember { mutableStateOf<BigDecimal?>(null) }
|
|
||||||
|
|
||||||
LaunchedEffect(key1 = zapsState) {
|
|
||||||
withContext(Dispatchers.IO) {
|
|
||||||
zapAmount = account.calculateZappedAmount(zappedNote)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Text(
|
Text(
|
||||||
showAmount(zapAmount),
|
showAmount(zapAmount),
|
||||||
fontSize = 14.sp,
|
fontSize = 14.sp,
|
||||||
|
|||||||
Reference in New Issue
Block a user