From 36ea33a9190fc33750653f0c54fe577eb7b16581 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Thu, 24 Aug 2023 08:56:51 -0400 Subject: [PATCH] Adds StatusEvent support --- .../com/vitorpamplona/quartz/events/Event.kt | 6 +++ .../quartz/events/EventInterface.kt | 2 + .../quartz/events/StatusEvent.kt | 50 +++---------------- 3 files changed, 16 insertions(+), 42 deletions(-) diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/Event.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/Event.kt index 123bd2f70..a51cfa3a4 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/Event.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/Event.kt @@ -120,6 +120,12 @@ open class Event( return tags.any { it.size > 1 && it[0] == "a" && it[1].startsWith(kindStr) } } + override fun expiration() = try { + tags.firstOrNull { it.size > 1 && it[0] == "expiration" }?.get(1)?.toLongOrNull() + } catch (_: Exception) { + null + } + override fun getTagOfAddressableKind(kind: Int): ATag? { val kindStr = kind.toString() val aTag = tags diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/EventInterface.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/EventInterface.kt index 2cc03a5a3..1ded89bf5 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/EventInterface.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/EventInterface.kt @@ -49,6 +49,8 @@ interface EventInterface { fun isTaggedAddressableKind(kind: Int): Boolean fun getTagOfAddressableKind(kind: Int): ATag? + fun expiration(): Long? + fun hashtags(): List fun geohashes(): List diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/StatusEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/StatusEvent.kt index e22b0e0cc..59a617126 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/StatusEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/StatusEvent.kt @@ -8,7 +8,7 @@ import com.vitorpamplona.quartz.encoders.ATag import com.vitorpamplona.quartz.encoders.HexKey @Immutable -class ClassifiedsEvent( +class StatusEvent( id: HexKey, pubKey: HexKey, createdAt: Long, @@ -16,59 +16,25 @@ class ClassifiedsEvent( content: String, sig: HexKey ) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) { - fun title() = tags.firstOrNull { it.size > 1 && it[0] == "title" }?.get(1) - fun image() = tags.firstOrNull { it.size > 1 && it[0] == "image" }?.get(1) - fun summary() = tags.firstOrNull { it.size > 1 && it[0] == "summary" }?.get(1) - fun price() = tags.firstOrNull { it.size > 1 && it[0] == "price" }?.let { - Price(it[1], it.getOrNull(2), it.getOrNull(3)) - } - fun location() = tags.firstOrNull { it.size > 1 && it[0] == "location" }?.get(1) - - fun publishedAt() = try { - tags.firstOrNull { it.size > 1 && it[0] == "published_at" }?.get(1)?.toLongOrNull() - } catch (_: Exception) { - null - } companion object { - const val kind = 30402 + const val kind = 30315 fun create( - dTag: String, - title: String?, - image: String?, - summary: String?, - price: Price?, - location: String?, - publishedAt: Long?, + type: String, + expiration: Long?, privateKey: ByteArray, createdAt: Long = TimeUtils.now() - ): ClassifiedsEvent { + ): StatusEvent { val tags = mutableListOf>() - tags.add(listOf("d", dTag)) - title?.let { tags.add(listOf("title", it)) } - image?.let { tags.add(listOf("image", it)) } - summary?.let { tags.add(listOf("summary", it)) } - price?.let { - if (it.frequency != null && it.currency != null) { - tags.add(listOf("price", it.amount, it.currency, it.frequency)) - } else if (it.currency != null) { - tags.add(listOf("price", it.amount, it.currency)) - } else { - tags.add(listOf("price", it.amount)) - } - } - location?.let { tags.add(listOf("location", it)) } - publishedAt?.let { tags.add(listOf("publishedAt", it.toString())) } - title?.let { tags.add(listOf("title", it)) } + tags.add(listOf("d", type)) + expiration?.let { tags.add(listOf("publishedAt", it.toString())) } val pubKey = CryptoUtils.pubkeyCreate(privateKey).toHexKey() val id = generateId(pubKey, createdAt, kind, tags, "") val sig = CryptoUtils.sign(id, privateKey) - return ClassifiedsEvent(id.toHexKey(), pubKey, createdAt, tags, "", sig.toHexKey()) + return StatusEvent(id.toHexKey(), pubKey, createdAt, tags, "", sig.toHexKey()) } } } - -data class Price(val amount: String, val currency: String?, val frequency: String?)