Refactoring the DVM codebase

Allows pull to refresh to request the job again.
This commit is contained in:
Vitor Pamplona
2024-05-17 17:02:04 -04:00
parent 8b052567c4
commit 9fb8d4821e
16 changed files with 335 additions and 329 deletions
@@ -87,6 +87,13 @@ open class Event(
override fun hasTagWithContent(tagName: String) = tags.any { it.size > 1 && it[0] == tagName }
override fun forEachTaggedEvent(onEach: (eventId: HexKey) -> Unit) =
tags.forEach {
if (it.size > 1 && it[0] == "e") {
onEach(it[1])
}
}
override fun taggedUsers() = tags.filter { it.size > 1 && it[0] == "p" }.map { it[1] }
override fun taggedEvents() = tags.filter { it.size > 1 && it[0] == "e" }.map { it[1] }
@@ -117,6 +117,8 @@ interface EventInterface {
fun hasTagWithContent(tagName: String): Boolean
fun forEachTaggedEvent(onEach: (eventId: HexKey) -> Unit)
fun taggedAddresses(): List<ATag>
fun taggedUsers(): List<HexKey>
@@ -40,14 +40,14 @@ class NIP90ContentDiscoveryRequestEvent(
const val KIND = 5300
fun create(
addressedDVM: String,
dvmPublicKey: String,
signer: NostrSigner,
createdAt: Long = TimeUtils.now(),
onReady: (NIP90ContentDiscoveryRequestEvent) -> Unit,
) {
val content = ""
val tags = mutableListOf<Array<String>>()
tags.add(arrayOf("p", addressedDVM))
tags.add(arrayOf("p", dvmPublicKey))
tags.add(arrayOf("alt", "NIP90 Content Discovery request"))
tags.add(arrayOf("client", "Amethyst"))
signer.sign(createdAt, KIND, tags.toTypedArray(), content, onReady)
@@ -20,7 +20,9 @@
*/
package com.vitorpamplona.quartz.events
import android.util.Log
import androidx.compose.runtime.Immutable
import com.fasterxml.jackson.module.kotlin.readValue
import com.vitorpamplona.quartz.encoders.HexKey
import com.vitorpamplona.quartz.signers.NostrSigner
import com.vitorpamplona.quartz.utils.TimeUtils
@@ -34,6 +36,33 @@ class NIP90ContentDiscoveryResponseEvent(
content: String,
sig: HexKey,
) : Event(id, pubKey, createdAt, KIND, tags, content, sig) {
@Transient var events: List<HexKey>? = null
fun innerTags(): List<HexKey> {
if (content.isEmpty()) {
return listOf()
}
events?.let {
return it
}
try {
events =
mapper.readValue<Array<Array<String>>>(content).mapNotNull {
if (it.size > 1 && it[0] == "e") {
it[1]
} else {
null
}
}
} catch (e: Throwable) {
Log.w("GeneralList", "Error parsing the JSON ${e.message}")
}
return events ?: listOf()
}
companion object {
const val KIND = 6300
const val ALT = "NIP90 Content Discovery reply"