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 02b5764d1..edc4dc3b8 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/Note.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/Note.kt @@ -284,7 +284,7 @@ open class Note(val idHex: String) { } fun removeReaction(note: Note) { - val tags = note.event?.tags() ?: emptyList() + val tags = note.event?.tags() ?: emptyArray() val reaction = note.event?.content()?.firstFullCharOrEmoji(ImmutableListOfLists(tags)) ?: "+" if (reaction in reactions.keys && reactions[reaction]?.contains(note) == true) { @@ -403,7 +403,7 @@ open class Note(val idHex: String) { } fun addReaction(note: Note) { - val tags = note.event?.tags() ?: emptyList() + val tags = note.event?.tags() ?: emptyArray() val reaction = note.event?.content()?.firstFullCharOrEmoji(ImmutableListOfLists(tags)) ?: "+" if (reaction !in reactions.keys) { diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt index 051842b75..42a3c1792 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt @@ -1586,7 +1586,7 @@ fun RenderAppDefinition( Row(verticalAlignment = Alignment.Bottom, modifier = Modifier.padding(top = 7.dp)) { CreateTextWithEmoji( text = it, - tags = remember { (note.event?.tags() ?: emptyList()).toImmutableListOfLists() }, + tags = remember { (note.event?.tags() ?: emptyArray()).toImmutableListOfLists() }, fontWeight = FontWeight.Bold, fontSize = 25.sp ) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/CardFeedState.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/CardFeedState.kt index ada8a6665..176ad67cc 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/CardFeedState.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/CardFeedState.kt @@ -64,7 +64,7 @@ class MultiSetCard( ) val likeEventsByType = likeEvents.groupBy { - it.event?.content()?.firstFullCharOrEmoji(ImmutableListOfLists(it.event?.tags() ?: emptyList())) ?: "+" + it.event?.content()?.firstFullCharOrEmoji(ImmutableListOfLists(it.event?.tags() ?: emptyArray())) ?: "+" }.mapValues { it.value.toImmutableList() }.toImmutableMap() diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/AdvertisedRelayListEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/AdvertisedRelayListEvent.kt index 938bf0f57..687fdd88d 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/AdvertisedRelayListEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/AdvertisedRelayListEvent.kt @@ -13,7 +13,7 @@ class AdvertisedRelayListEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) { @@ -47,11 +47,11 @@ class AdvertisedRelayListEvent( ) { val tags = list.map { if (it.type == AdvertisedRelayType.BOTH) { - listOf(it.relayUrl) + arrayOf(it.relayUrl) } else { - listOf(it.relayUrl, it.type.code) + arrayOf(it.relayUrl, it.type.code) } - } + }.toTypedArray() val msg = "" signer.sign(createdAt, kind, tags, msg, onReady) diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/AppDefinitionEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/AppDefinitionEvent.kt index d3c4239d5..39c20096b 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/AppDefinitionEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/AppDefinitionEvent.kt @@ -13,7 +13,7 @@ class AppDefinitionEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) { @@ -54,7 +54,7 @@ class AppDefinitionEvent( createdAt: Long = TimeUtils.now(), onReady: (AppDefinitionEvent) -> Unit ) { - val tags = mutableListOf>() + val tags = emptyArray>() signer.sign(createdAt, kind, tags, "", onReady) } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/AppRecommendationEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/AppRecommendationEvent.kt index 6b8ce21d7..f3a02dba3 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/AppRecommendationEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/AppRecommendationEvent.kt @@ -11,7 +11,7 @@ class AppRecommendationEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) { @@ -27,7 +27,7 @@ class AppRecommendationEvent( createdAt: Long = TimeUtils.now(), onReady: (AppRecommendationEvent) -> Unit ) { - val tags = mutableListOf>() + val tags = emptyArray>() signer.sign(createdAt, kind, tags, "", onReady) } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/AudioHeaderEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/AudioHeaderEvent.kt index cdcc2fe39..d9fa178a2 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/AudioHeaderEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/AudioHeaderEvent.kt @@ -11,7 +11,7 @@ class AudioHeaderEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : Event(id, pubKey, createdAt, kind, tags, content, sig) { @@ -29,7 +29,7 @@ class AudioHeaderEvent( private const val STREAM_URL = "stream_url" private const val WAVEFORM = "waveform" - suspend fun create( + fun create( description: String, downloadUrl: String, streamUrl: String? = null, @@ -40,17 +40,17 @@ class AudioHeaderEvent( onReady: (AudioHeaderEvent) -> Unit ) { val tags = listOfNotNull( - downloadUrl.let { listOf(DOWNLOAD_URL, it) }, - streamUrl?.let { listOf(STREAM_URL, it) }, - wavefront?.let { listOf(WAVEFORM, it) }, + downloadUrl.let { arrayOf(DOWNLOAD_URL, it) }, + streamUrl?.let { arrayOf(STREAM_URL, it) }, + wavefront?.let { arrayOf(WAVEFORM, it) }, sensitiveContent?.let { if (it) { - listOf("content-warning", "") + arrayOf("content-warning", "") } else { null } } - ) + ).toTypedArray() signer.sign(createdAt, kind, tags, description, onReady) } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/AudioTrackEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/AudioTrackEvent.kt index f0cbd176e..77b47cda5 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/AudioTrackEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/AudioTrackEvent.kt @@ -13,7 +13,7 @@ class AudioTrackEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) { @@ -46,12 +46,12 @@ class AudioTrackEvent( onReady: (AudioTrackEvent) -> Unit ) { val tags = listOfNotNull( - listOf(MEDIA, media), - listOf(TYPE, type), - price?.let { listOf(PRICE, it) }, - cover?.let { listOf(COVER, it) }, - subject?.let { listOf(SUBJECT, it) } - ) + arrayOf(MEDIA, media), + arrayOf(TYPE, type), + price?.let { arrayOf(PRICE, it) }, + cover?.let { arrayOf(COVER, it) }, + subject?.let { arrayOf(SUBJECT, it) } + ).toTypedArray() signer.sign(createdAt, kind, tags, "", onReady) } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/BadgeAwardEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/BadgeAwardEvent.kt index d956d23dc..dfddf65af 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/BadgeAwardEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/BadgeAwardEvent.kt @@ -8,7 +8,7 @@ class BadgeAwardEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : Event(id, pubKey, createdAt, kind, tags, content, sig) { diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/BadgeDefinitionEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/BadgeDefinitionEvent.kt index 410a6a20c..e6b4d9456 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/BadgeDefinitionEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/BadgeDefinitionEvent.kt @@ -9,7 +9,7 @@ class BadgeDefinitionEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) { diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/BadgeProfilesEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/BadgeProfilesEvent.kt index a4801ecae..92db2f6a7 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/BadgeProfilesEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/BadgeProfilesEvent.kt @@ -9,7 +9,7 @@ class BadgeProfilesEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) { diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/BaseTextNoteEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/BaseTextNoteEvent.kt index 167833264..6ad366307 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/BaseTextNoteEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/BaseTextNoteEvent.kt @@ -16,7 +16,7 @@ open class BaseTextNoteEvent( pubKey: HexKey, createdAt: Long, kind: Int, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : Event(id, pubKey, createdAt, kind, tags, content, sig) { diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/BookmarkListEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/BookmarkListEvent.kt index 3266471fc..259ac747e 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/BookmarkListEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/BookmarkListEvent.kt @@ -13,7 +13,7 @@ class BookmarkListEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : GeneralListEvent(id, pubKey, createdAt, kind, tags, content, sig) { @@ -49,7 +49,7 @@ class BookmarkListEvent( ) { add( earlierVersion, - listOf(listOf(tagName, tagValue)), + arrayOf(arrayOf(tagName, tagValue)), isPrivate, signer, createdAt, @@ -59,7 +59,7 @@ class BookmarkListEvent( fun add( earlierVersion: BookmarkListEvent?, - listNewTags: List>, + listNewTags: Array>, isPrivate: Boolean, signer: NostrSigner, createdAt: Long = TimeUtils.now(), @@ -88,7 +88,7 @@ class BookmarkListEvent( ) { encryptedTags -> create( content = encryptedTags, - tags = emptyList(), + tags = emptyArray(), signer = signer, createdAt = createdAt, onReady = onReady @@ -98,7 +98,7 @@ class BookmarkListEvent( } else { create( content = earlierVersion?.content ?: "", - tags = (earlierVersion?.tags ?: emptyList()).plus(listNewTags), + tags = (earlierVersion?.tags ?: emptyArray()).plus(listNewTags), signer = signer, createdAt = createdAt, onReady = onReady @@ -136,12 +136,12 @@ class BookmarkListEvent( if (isPrivate) { earlierVersion.privateTagsOrEmpty(signer) { privateTags -> encryptTags( - privateTags = privateTags.filter { it.size <= 1 || !(it[0] == tagName && it[1] == tagValue) }, + privateTags = privateTags.filter { it.size <= 1 || !(it[0] == tagName && it[1] == tagValue) }.toTypedArray(), signer = signer ) { encryptedTags -> create( content = encryptedTags, - tags = earlierVersion.tags.filter { it.size <= 1 || !(it[0] == tagName && it[1] == tagValue) }, + tags = earlierVersion.tags.filter { it.size <= 1 || !(it[0] == tagName && it[1] == tagValue) }.toTypedArray(), signer = signer, createdAt = createdAt, onReady = onReady @@ -151,7 +151,7 @@ class BookmarkListEvent( } else { create( content = earlierVersion.content, - tags = earlierVersion.tags.filter { it.size <= 1 || !(it[0] == tagName && it[1] == tagValue) }, + tags = earlierVersion.tags.filter { it.size <= 1 || !(it[0] == tagName && it[1] == tagValue) }.toTypedArray(), signer = signer, createdAt = createdAt, onReady = onReady @@ -161,7 +161,7 @@ class BookmarkListEvent( fun create( content: String, - tags: List>, + tags: Array>, signer: NostrSigner, createdAt: Long = TimeUtils.now(), onReady: (BookmarkListEvent) -> Unit @@ -184,21 +184,21 @@ class BookmarkListEvent( createdAt: Long = TimeUtils.now(), onReady: (BookmarkListEvent) -> Unit ) { - val tags = mutableListOf>() - tags.add(listOf("d", name)) + val tags = mutableListOf>() + tags.add(arrayOf("d", name)) events?.forEach { - tags.add(listOf("e", it)) + tags.add(arrayOf("e", it)) } users?.forEach { - tags.add(listOf("p", it)) + tags.add(arrayOf("p", it)) } addresses?.forEach { - tags.add(listOf("a", it.toTag())) + tags.add(arrayOf("a", it.toTag())) } createPrivateTags(privEvents, privUsers, privAddresses, signer) { content -> - signer.sign(createdAt, kind, tags, content, onReady) + signer.sign(createdAt, kind, tags.toTypedArray(), content, onReady) } } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/CalendarDateSlotEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/CalendarDateSlotEvent.kt index a041f45c5..767ce995d 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/CalendarDateSlotEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/CalendarDateSlotEvent.kt @@ -13,7 +13,7 @@ class CalendarDateSlotEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) { @@ -33,7 +33,7 @@ class CalendarDateSlotEvent( createdAt: Long = TimeUtils.now(), onReady: (CalendarDateSlotEvent) -> Unit ) { - val tags = mutableListOf>() + val tags = emptyArray>() signer.sign(createdAt, kind, tags, "", onReady) } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/CalendarEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/CalendarEvent.kt index 605800e87..33bc3c6cd 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/CalendarEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/CalendarEvent.kt @@ -13,7 +13,7 @@ class CalendarEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) { @@ -25,7 +25,7 @@ class CalendarEvent( createdAt: Long = TimeUtils.now(), onReady: (CalendarEvent) -> Unit ) { - val tags = mutableListOf>() + val tags = emptyArray>() signer.sign(createdAt, kind, tags, "", onReady) } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/CalendarRSVPEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/CalendarRSVPEvent.kt index 495d1ff82..757e47caf 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/CalendarRSVPEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/CalendarRSVPEvent.kt @@ -13,7 +13,7 @@ class CalendarRSVPEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) { @@ -35,7 +35,7 @@ class CalendarRSVPEvent( createdAt: Long = TimeUtils.now(), onReady: (CalendarRSVPEvent) -> Unit ) { - val tags = mutableListOf>() + val tags = emptyArray>() signer.sign(createdAt, kind, tags, "", onReady) } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/CalendarTimeSlotEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/CalendarTimeSlotEvent.kt index ad7423be8..cf33e5280 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/CalendarTimeSlotEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/CalendarTimeSlotEvent.kt @@ -13,7 +13,7 @@ class CalendarTimeSlotEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) { @@ -37,7 +37,7 @@ class CalendarTimeSlotEvent( createdAt: Long = TimeUtils.now(), onReady: (CalendarTimeSlotEvent) -> Unit ) { - val tags = mutableListOf>() + val tags = emptyArray>() signer.sign(createdAt, kind, tags, "", onReady) } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelCreateEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelCreateEvent.kt index d5220c4b3..681ca49f3 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelCreateEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelCreateEvent.kt @@ -16,7 +16,7 @@ class ChannelCreateEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : Event(id, pubKey, createdAt, kind, tags, content, sig) { @@ -65,7 +65,7 @@ class ChannelCreateEvent( "" } - signer.sign(createdAt, kind, emptyList(), content, onReady) + signer.sign(createdAt, kind, emptyArray(), content, onReady) } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelHideMessageEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelHideMessageEvent.kt index 6650e9ad6..f2242fb11 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelHideMessageEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelHideMessageEvent.kt @@ -12,7 +12,7 @@ class ChannelHideMessageEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : Event(id, pubKey, createdAt, kind, tags, content, sig), IsInPublicChatChannel { @@ -36,8 +36,8 @@ class ChannelHideMessageEvent( ) { val tags = messagesToHide?.map { - listOf("e", it) - } ?: emptyList() + arrayOf("e", it) + }?.toTypedArray() ?: emptyArray() signer.sign(createdAt, kind, tags, reason, onReady) } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelMessageEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelMessageEvent.kt index f8ffdf599..0c77bbd66 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelMessageEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelMessageEvent.kt @@ -2,9 +2,6 @@ package com.vitorpamplona.quartz.events import androidx.compose.runtime.Immutable import com.vitorpamplona.quartz.utils.TimeUtils -import com.vitorpamplona.quartz.encoders.toHexKey -import com.vitorpamplona.quartz.crypto.CryptoUtils -import com.vitorpamplona.quartz.crypto.KeyPair import com.vitorpamplona.quartz.encoders.HexKey import com.vitorpamplona.quartz.signers.NostrSigner @@ -13,7 +10,7 @@ class ChannelMessageEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : BaseTextNoteEvent(id, pubKey, createdAt, kind, tags, content, sig), IsInPublicChatChannel { @@ -42,30 +39,29 @@ class ChannelMessageEvent( geohash: String? = null, onReady: (ChannelMessageEvent) -> Unit ) { - val content = message val tags = mutableListOf( - listOf("e", channel, "", "root") + arrayOf("e", channel, "", "root") ) replyTos?.forEach { - tags.add(listOf("e", it)) + tags.add(arrayOf("e", it)) } mentions?.forEach { - tags.add(listOf("p", it)) + tags.add(arrayOf("p", it)) } zapReceiver?.forEach { - tags.add(listOf("zap", it.lnAddressOrPubKeyHex, it.relay ?: "", it.weight.toString())) + tags.add(arrayOf("zap", it.lnAddressOrPubKeyHex, it.relay ?: "", it.weight.toString())) } if (markAsSensitive) { - tags.add(listOf("content-warning", "")) + tags.add(arrayOf("content-warning", "")) } zapRaiserAmount?.let { - tags.add(listOf("zapraiser", "$it")) + tags.add(arrayOf("zapraiser", "$it")) } geohash?.let { tags.addAll(geohashMipMap(it)) } - signer.sign(createdAt, kind, tags, content, onReady) + signer.sign(createdAt, kind, tags.toTypedArray(), message, onReady) } } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelMetadataEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelMetadataEvent.kt index f2439c8a2..9fae95bae 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelMetadataEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelMetadataEvent.kt @@ -14,7 +14,7 @@ class ChannelMetadataEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : Event(id, pubKey, createdAt, kind, tags, content, sig), IsInPublicChatChannel { @@ -65,8 +65,8 @@ class ChannelMetadataEvent( "" } - val tags = listOf(listOf("e", originalChannelIdHex, "", "root")) - signer.sign(createdAt, kind, tags, content, onReady) + val tags = listOf(arrayOf("e", originalChannelIdHex, "", "root")) + signer.sign(createdAt, kind, tags.toTypedArray(), content, onReady) } } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelMuteUserEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelMuteUserEvent.kt index 957cb7bbf..16a7e1cdc 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelMuteUserEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/ChannelMuteUserEvent.kt @@ -12,7 +12,7 @@ class ChannelMuteUserEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : Event(id, pubKey, createdAt, kind, tags, content, sig), IsInPublicChatChannel { @@ -36,8 +36,8 @@ class ChannelMuteUserEvent( ) { val content = reason val tags = usersToMute?.map { - listOf("p", it) - } ?: emptyList() + arrayOf("p", it) + }?.toTypedArray() ?: emptyArray() signer.sign(createdAt, kind, tags, content, onReady) } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/ChatMessageEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/ChatMessageEvent.kt index 55d7ddfd6..5a9264aba 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/ChatMessageEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/ChatMessageEvent.kt @@ -13,7 +13,7 @@ class ChatMessageEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : WrappedEvent(id, pubKey, createdAt, kind, tags, content, sig), ChatroomKeyable { @@ -64,33 +64,33 @@ class ChatMessageEvent( createdAt: Long = TimeUtils.now(), onReady: (ChatMessageEvent) -> Unit ) { - val tags = mutableListOf>() + val tags = mutableListOf>() to?.forEach { - tags.add(listOf("p", it)) + tags.add(arrayOf("p", it)) } replyTos?.forEach { - tags.add(listOf("e", it)) + tags.add(arrayOf("e", it)) } mentions?.forEach { - tags.add(listOf("p", it, "", "mention")) + tags.add(arrayOf("p", it, "", "mention")) } zapReceiver?.forEach { - tags.add(listOf("zap", it.lnAddressOrPubKeyHex, it.relay ?: "", it.weight.toString())) + tags.add(arrayOf("zap", it.lnAddressOrPubKeyHex, it.relay ?: "", it.weight.toString())) } if (markAsSensitive) { - tags.add(listOf("content-warning", "")) + tags.add(arrayOf("content-warning", "")) } zapRaiserAmount?.let { - tags.add(listOf("zapraiser", "$it")) + tags.add(arrayOf("zapraiser", "$it")) } geohash?.let { tags.addAll(geohashMipMap(it)) } subject?.let { - tags.add(listOf("subject", it)) + tags.add(arrayOf("subject", it)) } - signer.sign(createdAt, kind, tags, msg, onReady) + signer.sign(createdAt, kind, tags.toTypedArray(), msg, onReady) } } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/ClassifiedsEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/ClassifiedsEvent.kt index 021d928cc..71c88d730 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/ClassifiedsEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/ClassifiedsEvent.kt @@ -13,7 +13,7 @@ class ClassifiedsEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) { @@ -46,26 +46,26 @@ class ClassifiedsEvent( createdAt: Long = TimeUtils.now(), onReady: (ClassifiedsEvent) -> Unit ) { - val tags = mutableListOf>() + 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)) } + tags.add(arrayOf("d", dTag)) + title?.let { tags.add(arrayOf("title", it)) } + image?.let { tags.add(arrayOf("image", it)) } + summary?.let { tags.add(arrayOf("summary", it)) } price?.let { if (it.frequency != null && it.currency != null) { - tags.add(listOf("price", it.amount, it.currency, it.frequency)) + tags.add(arrayOf("price", it.amount, it.currency, it.frequency)) } else if (it.currency != null) { - tags.add(listOf("price", it.amount, it.currency)) + tags.add(arrayOf("price", it.amount, it.currency)) } else { - tags.add(listOf("price", it.amount)) + tags.add(arrayOf("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)) } + location?.let { tags.add(arrayOf("location", it)) } + publishedAt?.let { tags.add(arrayOf("publishedAt", it.toString())) } + title?.let { tags.add(arrayOf("title", it)) } - signer.sign(createdAt, kind, tags, "", onReady) + signer.sign(createdAt, kind, tags.toTypedArray(), "", onReady) } } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/CommunityDefinitionEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/CommunityDefinitionEvent.kt index 769712e41..570816bf6 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/CommunityDefinitionEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/CommunityDefinitionEvent.kt @@ -13,7 +13,7 @@ class CommunityDefinitionEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) { @@ -31,7 +31,7 @@ class CommunityDefinitionEvent( createdAt: Long = TimeUtils.now(), onReady: (CommunityDefinitionEvent) -> Unit ) { - val tags = mutableListOf>() + val tags = emptyArray>() signer.sign(createdAt, kind, tags, "", onReady) } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/CommunityPostApprovalEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/CommunityPostApprovalEvent.kt index 7d9065ec5..346f8c304 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/CommunityPostApprovalEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/CommunityPostApprovalEvent.kt @@ -14,7 +14,7 @@ class CommunityPostApprovalEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : Event(id, pubKey, createdAt, kind, tags, content, sig) { @@ -55,12 +55,12 @@ class CommunityPostApprovalEvent( ) { val content = approvedPost.toJson() - val communities = listOf("a", community.address().toTag()) - val replyToPost = listOf("e", approvedPost.id()) - val replyToAuthor = listOf("p", approvedPost.pubKey()) - val innerKind = listOf("k", "${approvedPost.kind()}") + val communities = arrayOf("a", community.address().toTag()) + val replyToPost = arrayOf("e", approvedPost.id()) + val replyToAuthor = arrayOf("p", approvedPost.pubKey()) + val innerKind = arrayOf("k", "${approvedPost.kind()}") - val tags: List> = listOf(communities, replyToPost, replyToAuthor, innerKind) + val tags: Array> = arrayOf(communities, replyToPost, replyToAuthor, innerKind) signer.sign(createdAt, kind, tags, content, onReady) } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/ContactListEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/ContactListEvent.kt index a35de2491..be421fc76 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/ContactListEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/ContactListEvent.kt @@ -21,7 +21,7 @@ class ContactListEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : Event(id, pubKey, createdAt, kind, tags, content, sig) { @@ -112,27 +112,27 @@ class ContactListEvent( val tags = followUsers.map { if (it.relayUri != null) { - listOf("p", it.pubKeyHex, it.relayUri) + arrayOf("p", it.pubKeyHex, it.relayUri) } else { - listOf("p", it.pubKeyHex) + arrayOf("p", it.pubKeyHex) } } + followTags.map { - listOf("t", it) + arrayOf("t", it) } + followEvents.map { - listOf("e", it) + arrayOf("e", it) } + followCommunities.map { if (it.relay != null) { - listOf("a", it.toTag(), it.relay) + arrayOf("a", it.toTag(), it.relay) } else { - listOf("a", it.toTag()) + arrayOf("a", it.toTag()) } } + followGeohashes.map { - listOf("g", it) + arrayOf("g", it) } return create( content = content, - tags = tags, + tags = tags.toTypedArray(), signer = signer, createdAt = createdAt, onReady = onReady @@ -144,7 +144,7 @@ class ContactListEvent( return create( content = earlierVersion.content, - tags = earlierVersion.tags.plus(element = listOf("p", pubKeyHex)), + tags = earlierVersion.tags.plus(element = arrayOf("p", pubKeyHex)), signer = signer, createdAt = createdAt, onReady = onReady @@ -156,7 +156,7 @@ class ContactListEvent( return create( content = earlierVersion.content, - tags = earlierVersion.tags.filter { it.size > 1 && it[1] != pubKeyHex }, + tags = earlierVersion.tags.filter { it.size > 1 && it[1] != pubKeyHex }.toTypedArray(), signer = signer, createdAt = createdAt, onReady = onReady @@ -168,7 +168,7 @@ class ContactListEvent( return create( content = earlierVersion.content, - tags = earlierVersion.tags.plus(element = listOf("t", hashtag)), + tags = earlierVersion.tags.plus(element = arrayOf("t", hashtag)), signer = signer, createdAt = createdAt, onReady = onReady @@ -180,7 +180,7 @@ class ContactListEvent( return create( content = earlierVersion.content, - tags = earlierVersion.tags.filter { it.size > 1 && !it[1].equals(hashtag, true) }, + tags = earlierVersion.tags.filter { it.size > 1 && !it[1].equals(hashtag, true) }.toTypedArray(), signer = signer, createdAt = createdAt, onReady = onReady @@ -192,7 +192,7 @@ class ContactListEvent( return create( content = earlierVersion.content, - tags = earlierVersion.tags.plus(element = listOf("g", hashtag)), + tags = earlierVersion.tags.plus(element = arrayOf("g", hashtag)), signer = signer, createdAt = createdAt, onReady = onReady @@ -204,7 +204,7 @@ class ContactListEvent( return create( content = earlierVersion.content, - tags = earlierVersion.tags.filter { it.size > 1 && it[1] != hashtag }, + tags = earlierVersion.tags.filter { it.size > 1 && it[1] != hashtag }.toTypedArray(), signer = signer, createdAt = createdAt, onReady = onReady @@ -216,7 +216,7 @@ class ContactListEvent( return create( content = earlierVersion.content, - tags = earlierVersion.tags.plus(element = listOf("e", idHex)), + tags = earlierVersion.tags.plus(element = arrayOf("e", idHex)), signer = signer, createdAt = createdAt, onReady = onReady @@ -228,7 +228,7 @@ class ContactListEvent( return create( content = earlierVersion.content, - tags = earlierVersion.tags.filter { it.size > 1 && it[1] != idHex }, + tags = earlierVersion.tags.filter { it.size > 1 && it[1] != idHex }.toTypedArray(), signer = signer, createdAt = createdAt, onReady = onReady @@ -240,7 +240,7 @@ class ContactListEvent( return create( content = earlierVersion.content, - tags = earlierVersion.tags.plus(element = listOfNotNull("a", aTag.toTag(), aTag.relay)), + tags = earlierVersion.tags.plus(element = listOfNotNull("a", aTag.toTag(), aTag.relay).toTypedArray()), signer = signer, createdAt = createdAt, onReady = onReady @@ -252,7 +252,7 @@ class ContactListEvent( return create( content = earlierVersion.content, - tags = earlierVersion.tags.filter { it.size > 1 && it[1] != aTag.toTag() }, + tags = earlierVersion.tags.filter { it.size > 1 && it[1] != aTag.toTag() }.toTypedArray(), signer = signer, createdAt = createdAt, onReady = onReady @@ -277,7 +277,7 @@ class ContactListEvent( fun create( content: String, - tags: List>, + tags: Array>, signer: NostrSigner, createdAt: Long = TimeUtils.now(), onReady: (ContactListEvent) -> Unit @@ -346,10 +346,10 @@ class UserMetadata { } @Stable -data class ImmutableListOfLists(val lists: List> = emptyList()) +data class ImmutableListOfLists(val lists: Array>) -val EmptyTagList = ImmutableListOfLists(emptyList()) +val EmptyTagList = ImmutableListOfLists(emptyArray()) -fun List>.toImmutableListOfLists(): ImmutableListOfLists { +fun Array>.toImmutableListOfLists(): ImmutableListOfLists { return ImmutableListOfLists(this) } \ No newline at end of file diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/DeletionEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/DeletionEvent.kt index ccb1192cf..fd7788ead 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/DeletionEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/DeletionEvent.kt @@ -13,7 +13,7 @@ class DeletionEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : Event(id, pubKey, createdAt, kind, tags, content, sig) { @@ -24,7 +24,7 @@ class DeletionEvent( fun create(deleteEvents: List, signer: NostrSigner, createdAt: Long = TimeUtils.now(), onReady: (DeletionEvent) -> Unit) { val content = "" - val tags = deleteEvents.map { listOf("e", it) } + val tags = deleteEvents.map { arrayOf("e", it) }.toTypedArray() signer.sign(createdAt, kind, tags, content, onReady) } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/EmojiPackEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/EmojiPackEvent.kt index 8e5e85eb2..8e74178bc 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/EmojiPackEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/EmojiPackEvent.kt @@ -12,7 +12,7 @@ class EmojiPackEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : GeneralListEvent(id, pubKey, createdAt, kind, tags, content, sig) { @@ -28,10 +28,10 @@ class EmojiPackEvent( ) { val content = "" - val tags = mutableListOf>() - tags.add(listOf("d", name)) + val tags = mutableListOf>() + tags.add(arrayOf("d", name)) - signer.sign(createdAt, kind, tags, content, onReady) + signer.sign(createdAt, kind, tags.toTypedArray(), content, onReady) } } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/EmojiPackSelectionEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/EmojiPackSelectionEvent.kt index 9925800b3..46887c78d 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/EmojiPackSelectionEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/EmojiPackSelectionEvent.kt @@ -14,7 +14,7 @@ class EmojiPackSelectionEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) { @@ -31,13 +31,13 @@ class EmojiPackSelectionEvent( onReady: (EmojiPackSelectionEvent) -> Unit ) { val msg = "" - val tags = mutableListOf>() + val tags = mutableListOf>() listOfEmojiPacks?.forEach { - tags.add(listOf("a", it.toTag())) + tags.add(arrayOf("a", it.toTag())) } - signer.sign(createdAt, kind, tags, msg, onReady) + signer.sign(createdAt, kind, tags.toTypedArray(), msg, onReady) } } } 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 9102363d0..b93eddbb9 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/Event.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/Event.kt @@ -11,6 +11,7 @@ import com.fasterxml.jackson.databind.JsonNode import com.fasterxml.jackson.databind.SerializerProvider import com.fasterxml.jackson.databind.deser.std.StdDeserializer import com.fasterxml.jackson.databind.module.SimpleModule +import com.fasterxml.jackson.databind.node.ArrayNode import com.fasterxml.jackson.databind.ser.std.StdSerializer import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import com.vitorpamplona.quartz.crypto.CryptoUtils @@ -33,7 +34,7 @@ open class Event( @JsonProperty("created_at") val createdAt: Long, val kind: Int, - val tags: List>, + val tags: Array>, val content: String, val sig: HexKey ) : EventInterface { @@ -55,7 +56,7 @@ open class Event( override fun kind(): Int = kind - override fun tags(): List> = tags + override fun tags(): Array> = tags override fun content(): String = content @@ -272,14 +273,13 @@ open class Event( private class GossipDeserializer : StdDeserializer(Gossip::class.java) { override fun deserialize(jp: JsonParser, ctxt: DeserializationContext): Gossip { val jsonObject: JsonNode = jp.codec.readTree(jp) - val tagList = jsonObject.get("tags") return Gossip( id = jsonObject.get("id")?.asText()?.intern(), pubKey = jsonObject.get("pubkey")?.asText()?.intern(), createdAt = jsonObject.get("created_at")?.asLong(), kind = jsonObject.get("kind")?.asInt(), - tags = tagList.mapTo(ArrayList>(tagList.size())) { - it.mapNotNullTo(ArrayList(it.size())) { s -> if (s.isNull) null else s.asText().intern() } + tags = jsonObject.get("tags").toTypedArray { + it.toTypedArray { s -> if (s.isNull) "" else s.asText().intern() } }, content = jsonObject.get("content")?.asText() ) @@ -295,7 +295,7 @@ open class Event( gen.writeNumberField("kind", event.kind) gen.writeArrayFieldStart("tags") event.tags.forEach { tag -> - gen.writeArray(tag.toTypedArray(), 0, tag.size) + gen.writeArray(tag, 0, tag.size) } gen.writeEndArray() gen.writeStringField("content", event.content) @@ -314,7 +314,7 @@ open class Event( event.tags?.let { gen.writeArrayFieldStart("tags") event.tags.forEach { tag -> - gen.writeArray(tag.toTypedArray(), 0, tag.size) + gen.writeArray(tag, 0, tag.size) } gen.writeEndArray() } @@ -361,24 +361,29 @@ open class Event( ) fun fromJson(jsonObject: JsonNode): Event { - val tagList = jsonObject.get("tags") return EventFactory.create( id = jsonObject.get("id").asText().intern(), pubKey = jsonObject.get("pubkey").asText().intern(), createdAt = jsonObject.get("created_at").asLong(), kind = jsonObject.get("kind").asInt(), - tags = tagList.mapTo(ArrayList>(tagList.size())) { - it.mapNotNullTo(ArrayList(it.size())) { s -> if (s.isNull) null else s.asText().intern() } + tags = jsonObject.get("tags").toTypedArray { + it.toTypedArray { s -> if (s.isNull) "" else s.asText().intern() } }, content = jsonObject.get("content").asText(), sig = jsonObject.get("sig").asText() ) } + private inline fun JsonNode.toTypedArray(transform: (JsonNode) -> R): Array { + return Array(size()) { + transform(get(it)) + } + } + fun fromJson(json: String): Event = mapper.readValue(json, Event::class.java) fun toJson(event: Event): String = mapper.writeValueAsString(event) - fun makeJsonForId(pubKey: HexKey, createdAt: Long, kind: Int, tags: List>, content: String): String { + fun makeJsonForId(pubKey: HexKey, createdAt: Long, kind: Int, tags: Array>, content: String): String { val factory = mapper.nodeFactory val rawEvent = factory.arrayNode(6).apply { add(0) @@ -402,11 +407,11 @@ open class Event( return mapper.writeValueAsString(rawEvent) } - fun generateId(pubKey: HexKey, createdAt: Long, kind: Int, tags: List>, content: String): ByteArray { + fun generateId(pubKey: HexKey, createdAt: Long, kind: Int, tags: Array>, content: String): ByteArray { return CryptoUtils.sha256(makeJsonForId(pubKey, createdAt, kind, tags, content).toByteArray()) } - fun create(signer: NostrSigner, kind: Int, tags: List> = emptyList(), content: String = "", createdAt: Long = TimeUtils.now(), onReady: (Event) -> Unit) { + fun create(signer: NostrSigner, kind: Int, tags: Array> = emptyArray(), content: String = "", createdAt: Long = TimeUtils.now(), onReady: (Event) -> Unit) { return signer.sign(createdAt, kind, tags, content, onReady) } } @@ -420,7 +425,7 @@ open class WrappedEvent( @JsonProperty("created_at") createdAt: Long, kind: Int, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : Event(id, pubKey, createdAt, kind, tags, content, sig) { @@ -440,7 +445,7 @@ open class BaseAddressableEvent( pubKey: HexKey, createdAt: Long, kind: Int, - tags: List>, + tags: Array>, content: String, sig: HexKey ): Event(id, pubKey, createdAt, kind, tags, content, sig), AddressableEvent { diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/EventFactory.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/EventFactory.kt index 6b6319d8d..f490b4fec 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/EventFactory.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/EventFactory.kt @@ -10,7 +10,7 @@ class EventFactory { pubKey: String, createdAt: Long, kind: Int, - tags: List>, + tags: Array>, content: String, sig: String ) = when (kind) { 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 52e3f1620..ed4cbd8f9 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/EventInterface.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/EventInterface.kt @@ -17,7 +17,7 @@ interface EventInterface { fun kind(): Int - fun tags(): List> + fun tags(): Array> fun content(): String diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/FileHeaderEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/FileHeaderEvent.kt index af2724e73..05fafdc40 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/FileHeaderEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/FileHeaderEvent.kt @@ -13,7 +13,7 @@ class FileHeaderEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : Event(id, pubKey, createdAt, kind, tags, content, sig) { @@ -62,20 +62,20 @@ class FileHeaderEvent( onReady: (FileHeaderEvent) -> Unit ) { val tags = listOfNotNull( - listOf(URL, url), - mimeType?.let { listOf(MIME_TYPE, mimeType) }, - alt?.ifBlank { null }?.let { listOf(ALT, it) }, - hash?.let { listOf(HASH, it) }, - size?.let { listOf(FILE_SIZE, it) }, - dimensions?.let { listOf(DIMENSION, it) }, - blurhash?.let { listOf(BLUR_HASH, it) }, - magnetURI?.let { listOf(MAGNET_URI, it) }, + arrayOf(URL, url), + mimeType?.let { arrayOf(MIME_TYPE, mimeType) }, + alt?.ifBlank { null }?.let { arrayOf(ALT, it) }, + hash?.let { arrayOf(HASH, it) }, + size?.let { arrayOf(FILE_SIZE, it) }, + dimensions?.let { arrayOf(DIMENSION, it) }, + blurhash?.let { arrayOf(BLUR_HASH, it) }, + magnetURI?.let { arrayOf(MAGNET_URI, it) }, - torrentInfoHash?.let { listOf(TORRENT_INFOHASH, it) }, - encryptionKey?.let { listOf(ENCRYPTION_KEY, it.key, it.nonce) }, + torrentInfoHash?.let { arrayOf(TORRENT_INFOHASH, it) }, + encryptionKey?.let { arrayOf(ENCRYPTION_KEY, it.key, it.nonce) }, sensitiveContent?.let { if (it) { - listOf("content-warning", "") + arrayOf("content-warning", "") } else { null } @@ -83,7 +83,7 @@ class FileHeaderEvent( ) val content = alt ?: "" - signer.sign(createdAt, kind, tags, content, onReady) + signer.sign(createdAt, kind, tags.toTypedArray(), content, onReady) } } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/FileStorageEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/FileStorageEvent.kt index 82ad4fd94..eb283328d 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/FileStorageEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/FileStorageEvent.kt @@ -14,7 +14,7 @@ class FileStorageEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : Event(id, pubKey, createdAt, kind, tags, content, sig) { @@ -49,11 +49,11 @@ class FileStorageEvent( onReady: (FileStorageEvent) -> Unit ) { val tags = listOfNotNull( - listOf(TYPE, mimeType) + arrayOf(TYPE, mimeType) ) val content = encode(data) - signer.sign(createdAt, kind, tags, content, onReady) + signer.sign(createdAt, kind, tags.toTypedArray(), content, onReady) } } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/FileStorageHeaderEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/FileStorageHeaderEvent.kt index c0d63260d..84e31d338 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/FileStorageHeaderEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/FileStorageHeaderEvent.kt @@ -12,7 +12,7 @@ class FileStorageHeaderEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : Event(id, pubKey, createdAt, kind, tags, content, sig) { @@ -59,19 +59,19 @@ class FileStorageHeaderEvent( onReady: (FileStorageHeaderEvent) -> Unit ) { val tags = listOfNotNull( - listOf("e", storageEvent.id), - mimeType?.let { listOf(MIME_TYPE, mimeType) }, - hash?.let { listOf(HASH, it) }, - alt?.let { listOf(ALT, it) }, - size?.let { listOf(FILE_SIZE, it) }, - dimensions?.let { listOf(DIMENSION, it) }, - blurhash?.let { listOf(BLUR_HASH, it) }, - magnetURI?.let { listOf(MAGNET_URI, it) }, - torrentInfoHash?.let { listOf(TORRENT_INFOHASH, it) }, - encryptionKey?.let { listOf(ENCRYPTION_KEY, it.key, it.nonce) }, + arrayOf("e", storageEvent.id), + mimeType?.let { arrayOf(MIME_TYPE, mimeType) }, + hash?.let { arrayOf(HASH, it) }, + alt?.let { arrayOf(ALT, it) }, + size?.let { arrayOf(FILE_SIZE, it) }, + dimensions?.let { arrayOf(DIMENSION, it) }, + blurhash?.let { arrayOf(BLUR_HASH, it) }, + magnetURI?.let { arrayOf(MAGNET_URI, it) }, + torrentInfoHash?.let { arrayOf(TORRENT_INFOHASH, it) }, + encryptionKey?.let { arrayOf(ENCRYPTION_KEY, it.key, it.nonce) }, sensitiveContent?.let { if (it) { - listOf("content-warning", "") + arrayOf("content-warning", "") } else { null } @@ -79,7 +79,7 @@ class FileStorageHeaderEvent( ) val content = alt ?: "" - signer.sign(createdAt, kind, tags, content, onReady) + signer.sign(createdAt, kind, tags.toTypedArray(), content, onReady) } } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/GeneralListEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/GeneralListEvent.kt index c96ff1656..e60eb67d6 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/GeneralListEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/GeneralListEvent.kt @@ -17,12 +17,12 @@ abstract class GeneralListEvent( pubKey: HexKey, createdAt: Long, kind: Int, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) { @Transient - private var privateTagsCache: List>? = null + private var privateTagsCache: Array>? = null fun category() = dTag() fun bookmarkedPosts() = taggedEvents() @@ -32,11 +32,11 @@ abstract class GeneralListEvent( fun title() = tags.firstOrNull { it.size > 1 && it[0] == "title" }?.get(1) fun nameOrTitle() = name() ?: title() - fun cachedPrivateTags(): List>? { + fun cachedPrivateTags(): Array>? { return privateTagsCache } - fun filterTagList(key: String, privateTags: List>?): ImmutableSet { + fun filterTagList(key: String, privateTags: Array>?): ImmutableSet { val privateUserList = privateTags?.let { it.filter { it.size > 1 && it[0] == key }.map { it[1] }.toSet() } ?: emptySet() @@ -57,7 +57,7 @@ abstract class GeneralListEvent( } } - fun privateTags(signer: NostrSigner, onReady: (List>) -> Unit) { + fun privateTags(signer: NostrSigner, onReady: (Array>) -> Unit) { if (content.isBlank()) return privateTagsCache?.let { @@ -67,7 +67,7 @@ abstract class GeneralListEvent( try { signer.nip04Decrypt(content, pubKey) { - privateTagsCache = mapper.readValue>>(it) + privateTagsCache = mapper.readValue>>(it) privateTagsCache?.let { onReady(it) } @@ -77,7 +77,7 @@ abstract class GeneralListEvent( } } - fun privateTagsOrEmpty(signer: NostrSigner, onReady: (List>) -> Unit) { + fun privateTagsOrEmpty(signer: NostrSigner, onReady: (Array>) -> Unit) { privateTags(signer, onReady) } @@ -97,23 +97,23 @@ abstract class GeneralListEvent( onReady(filterAddresses(it)) } - fun filterUsers(tags: List>): List { + fun filterUsers(tags: Array>): List { return tags.filter { it.size > 1 && it[0] == "p" }.map { it[1] } } - fun filterHashtags(tags: List>): List { + fun filterHashtags(tags: Array>): List { return tags.filter { it.size > 1 && it[0] == "t" }.map { it[1] } } - fun filterGeohashes(tags: List>): List { + fun filterGeohashes(tags: Array>): List { return tags.filter { it.size > 1 && it[0] == "g" }.map { it[1] } } - fun filterEvents(tags: List>): List { + fun filterEvents(tags: Array>): List { return tags.filter { it.size > 1 && it[0] == "e" }.map { it[1] } } - fun filterAddresses(tags: List>): List { + fun filterAddresses(tags: Array>): List { return tags.filter { it.firstOrNull() == "a" }.mapNotNull { val aTagValue = it.getOrNull(1) val relay = it.getOrNull(2) @@ -131,22 +131,22 @@ abstract class GeneralListEvent( signer: NostrSigner, onReady: (String) -> Unit ) { - val privTags = mutableListOf>() + val privTags = mutableListOf>() privEvents?.forEach { - privTags.add(listOf("e", it)) + privTags.add(arrayOf("e", it)) } privUsers?.forEach { - privTags.add(listOf("p", it)) + privTags.add(arrayOf("p", it)) } privAddresses?.forEach { - privTags.add(listOf("a", it.toTag())) + privTags.add(arrayOf("a", it.toTag())) } - return encryptTags(privTags, signer, onReady) + return encryptTags(privTags.toTypedArray(), signer, onReady) } fun encryptTags( - privateTags: List>? = null, + privateTags: Array>? = null, signer: NostrSigner, onReady: (String) -> Unit ) { diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/GenericRepostEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/GenericRepostEvent.kt index 765142df9..d0759611b 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/GenericRepostEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/GenericRepostEvent.kt @@ -13,7 +13,7 @@ class GenericRepostEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : Event(id, pubKey, createdAt, kind, tags, content, sig) { @@ -38,18 +38,18 @@ class GenericRepostEvent( ) { val content = boostedPost.toJson() - val replyToPost = listOf("e", boostedPost.id()) - val replyToAuthor = listOf("p", boostedPost.pubKey()) + val replyToPost = arrayOf("e", boostedPost.id()) + val replyToAuthor = arrayOf("p", boostedPost.pubKey()) - var tags: List> = listOf(replyToPost, replyToAuthor) + var tags: List> = listOf(replyToPost, replyToAuthor) if (boostedPost is AddressableEvent) { - tags = tags + listOf(listOf("a", boostedPost.address().toTag())) + tags = tags + listOf(arrayOf("a", boostedPost.address().toTag())) } - tags = tags + listOf(listOf("k", "${boostedPost.kind()}")) + tags = tags + listOf(arrayOf("k", "${boostedPost.kind()}")) - signer.sign(createdAt, kind, tags, content, onReady) + signer.sign(createdAt, kind, tags.toTypedArray(), content, onReady) } } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/GiftWrapEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/GiftWrapEvent.kt index 228cff177..0ca442d72 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/GiftWrapEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/GiftWrapEvent.kt @@ -19,7 +19,7 @@ class GiftWrapEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : Event(id, pubKey, createdAt, kind, tags, content, sig) { @@ -71,7 +71,7 @@ class GiftWrapEvent( ) { val signer = NostrSignerInternal(KeyPair()) // GiftWrap is always a random key val serializedContent = toJson(event) - val tags = listOf(listOf("p", recipientPubKey)) + val tags = arrayOf(arrayOf("p", recipientPubKey)) signer.nip44Encrypt(serializedContent, recipientPubKey) { signer.sign(createdAt, kind, tags, it, onReady) diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/HTTPAuthorizationEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/HTTPAuthorizationEvent.kt index 65d891d34..b0590267f 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/HTTPAuthorizationEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/HTTPAuthorizationEvent.kt @@ -13,7 +13,7 @@ class HTTPAuthorizationEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : Event(id, pubKey, createdAt, kind, tags, content, sig) { @@ -35,12 +35,12 @@ class HTTPAuthorizationEvent( } val tags = listOfNotNull( - listOf("u", url), - listOf("method", method), - listOf("payload", hash) + arrayOf("u", url), + arrayOf("method", method), + arrayOf("payload", hash) ) - signer.sign(createdAt, kind, tags, "", onReady) + signer.sign(createdAt, kind, tags.toTypedArray(), "", onReady) } } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/HighlightEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/HighlightEvent.kt index e0f5e9298..ee15aa8e0 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/HighlightEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/HighlightEvent.kt @@ -12,7 +12,7 @@ class HighlightEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : BaseTextNoteEvent(id, pubKey, createdAt, kind, tags, content, sig) { @@ -32,7 +32,7 @@ class HighlightEvent( createdAt: Long = TimeUtils.now(), onReady: (HighlightEvent) -> Unit ) { - signer.sign(createdAt, kind, emptyList(), msg, onReady) + signer.sign(createdAt, kind, emptyArray(), msg, onReady) } } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/LiveActivitiesChatMessageEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/LiveActivitiesChatMessageEvent.kt index e43644211..ba8c65db7 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/LiveActivitiesChatMessageEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/LiveActivitiesChatMessageEvent.kt @@ -14,7 +14,7 @@ class LiveActivitiesChatMessageEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : BaseTextNoteEvent(id, pubKey, createdAt, kind, tags, content, sig) { @@ -60,28 +60,28 @@ class LiveActivitiesChatMessageEvent( ) { val content = message val tags = mutableListOf( - listOf("a", activity.toTag(), "", "root") + arrayOf("a", activity.toTag(), "", "root") ) replyTos?.forEach { - tags.add(listOf("e", it)) + tags.add(arrayOf("e", it)) } mentions?.forEach { - tags.add(listOf("p", it)) + tags.add(arrayOf("p", it)) } zapReceiver?.forEach { - tags.add(listOf("zap", it.lnAddressOrPubKeyHex, it.relay ?: "", it.weight.toString())) + tags.add(arrayOf("zap", it.lnAddressOrPubKeyHex, it.relay ?: "", it.weight.toString())) } if (markAsSensitive) { - tags.add(listOf("content-warning", "")) + tags.add(arrayOf("content-warning", "")) } zapRaiserAmount?.let { - tags.add(listOf("zapraiser", "$it")) + tags.add(arrayOf("zapraiser", "$it")) } geohash?.let { tags.addAll(geohashMipMap(it)) } - signer.sign(createdAt, kind, tags, content, onReady) + signer.sign(createdAt, kind, tags.toTypedArray(), content, onReady) } } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/LiveActivitiesEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/LiveActivitiesEvent.kt index ad49834c9..770e27767 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/LiveActivitiesEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/LiveActivitiesEvent.kt @@ -13,7 +13,7 @@ class LiveActivitiesEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) { @@ -55,7 +55,7 @@ class LiveActivitiesEvent( createdAt: Long = TimeUtils.now(), onReady: (LiveActivitiesEvent) -> Unit ) { - val tags = mutableListOf>() + val tags = emptyArray>() signer.sign(createdAt, kind, tags, "", onReady) } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapEvent.kt index 17ddedb66..c26b9892d 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapEvent.kt @@ -10,7 +10,7 @@ class LnZapEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : LnZapEventInterface, Event(id, pubKey, createdAt, kind, tags, content, sig) { diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapPaymentRequestEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapPaymentRequestEvent.kt index 8a02e9a33..5bab9c113 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapPaymentRequestEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapPaymentRequestEvent.kt @@ -18,7 +18,7 @@ class LnZapPaymentRequestEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : Event(id, pubKey, createdAt, kind, tags, content, sig) { @@ -66,8 +66,7 @@ class LnZapPaymentRequestEvent( ) { val serializedRequest = mapper.writeValueAsString(PayInvoiceMethod.create(lnInvoice)) - val tags = mutableListOf>() - tags.add(listOf("p", walletServicePubkey)) + val tags = arrayOf(arrayOf("p", walletServicePubkey)) signer.nip04Encrypt( serializedRequest, diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapPaymentResponseEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapPaymentResponseEvent.kt index a9c2d55fa..98cc288f2 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapPaymentResponseEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapPaymentResponseEvent.kt @@ -16,7 +16,7 @@ class LnZapPaymentResponseEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : Event(id, pubKey, createdAt, kind, tags, content, sig) { diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapPrivateEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapPrivateEvent.kt index ddeed32e2..ffb8ff5b5 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapPrivateEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapPrivateEvent.kt @@ -21,7 +21,7 @@ class LnZapPrivateEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : Event(id, pubKey, createdAt, kind, tags, content, sig) { @@ -31,7 +31,7 @@ class LnZapPrivateEvent( fun create( signer: NostrSigner, - tags: List> = emptyList(), + tags: Array> = emptyArray(), content: String = "", createdAt: Long = TimeUtils.now(), onReady: (LnZapPrivateEvent) -> Unit diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapRequestEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapRequestEvent.kt index 1dda40cfd..74aa28034 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapRequestEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/LnZapRequestEvent.kt @@ -22,7 +22,7 @@ class LnZapRequestEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : Event(id, pubKey, createdAt, kind, tags, content, sig) { @@ -89,25 +89,25 @@ class LnZapRequestEvent( if (zapType == LnZapEvent.ZapType.NONZAP) return var tags = listOf( - listOf("e", originalNote.id()), - listOf("p", toUserPubHex ?: originalNote.pubKey()), - listOf("relays") + relays + arrayOf("e", originalNote.id()), + arrayOf("p", toUserPubHex ?: originalNote.pubKey()), + arrayOf("relays") + relays ) if (originalNote is AddressableEvent) { - tags = tags + listOf(listOf("a", originalNote.address().toTag())) + tags = tags + listOf(arrayOf("a", originalNote.address().toTag())) } if (pollOption != null && pollOption >= 0) { - tags = tags + listOf(listOf(POLL_OPTION, pollOption.toString())) + tags = tags + listOf(arrayOf(POLL_OPTION, pollOption.toString())) } if (zapType == LnZapEvent.ZapType.ANONYMOUS) { - tags = tags + listOf(listOf("anon")) - NostrSignerInternal(KeyPair()).sign(createdAt, kind, tags, message, onReady) + tags = tags + listOf(arrayOf("anon")) + NostrSignerInternal(KeyPair()).sign(createdAt, kind, tags.toTypedArray(), message, onReady) } else if (zapType == LnZapEvent.ZapType.PRIVATE) { - tags = tags + listOf(listOf("anon", "")) - signer.sign(createdAt, kind, tags, message, onReady) + tags = tags + listOf(arrayOf("anon", "")) + signer.sign(createdAt, kind, tags.toTypedArray(), message, onReady) } else { - signer.sign(createdAt, kind, tags, message, onReady) + signer.sign(createdAt, kind, tags.toTypedArray(), message, onReady) } } @@ -122,16 +122,16 @@ class LnZapRequestEvent( ) { if (zapType == LnZapEvent.ZapType.NONZAP) return - var tags = listOf( - listOf("p", userHex), - listOf("relays") + relays + var tags = arrayOf( + arrayOf("p", userHex), + arrayOf("relays") + relays ) if (zapType == LnZapEvent.ZapType.ANONYMOUS) { - tags = tags + listOf(listOf("anon", "")) + tags += arrayOf(arrayOf("anon", "")) NostrSignerInternal(KeyPair()).sign(createdAt, kind, tags, message, onReady) } else if (zapType == LnZapEvent.ZapType.PRIVATE) { - tags = tags + listOf(listOf("anon", "")) + tags += arrayOf(arrayOf("anon", "")) signer.sign(createdAt, kind, tags, message, onReady) } else { signer.sign(createdAt, kind, tags, message, onReady) diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/LongTextNoteEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/LongTextNoteEvent.kt index 3d6f70489..b67d98183 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/LongTextNoteEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/LongTextNoteEvent.kt @@ -13,7 +13,7 @@ class LongTextNoteEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : BaseTextNoteEvent(id, pubKey, createdAt, kind, tags, content, sig), AddressableEvent { @@ -42,14 +42,14 @@ class LongTextNoteEvent( createdAt: Long = TimeUtils.now(), onReady: (LongTextNoteEvent) -> Unit ) { - val tags = mutableListOf>() + val tags = mutableListOf>() replyTos?.forEach { - tags.add(listOf("e", it)) + tags.add(arrayOf("e", it)) } mentions?.forEach { - tags.add(listOf("p", it)) + tags.add(arrayOf("p", it)) } - signer.sign(createdAt, kind, tags, msg, onReady) + signer.sign(createdAt, kind, tags.toTypedArray(), msg, onReady) } } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/MetadataEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/MetadataEvent.kt index 70ba45abd..62636751d 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/MetadataEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/MetadataEvent.kt @@ -123,7 +123,7 @@ class MetadataEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : Event(id, pubKey, createdAt, kind, tags, content, sig) { @@ -157,13 +157,13 @@ class MetadataEvent( createdAt: Long = TimeUtils.now(), onReady: (MetadataEvent) -> Unit ) { - val tags = mutableListOf>() + val tags = mutableListOf>() identities.forEach { - tags.add(listOf("i", it.platformIdentity(), it.proof)) + tags.add(arrayOf("i", it.platformIdentity(), it.proof)) } - signer.sign(createdAt, kind, tags, contactMetaData, onReady) + signer.sign(createdAt, kind, tags.toTypedArray(), contactMetaData, onReady) } } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/MuteListEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/MuteListEvent.kt index 626d8f212..eaede330f 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/MuteListEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/MuteListEvent.kt @@ -18,7 +18,7 @@ class MuteListEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : GeneralListEvent(id, pubKey, createdAt, kind, tags, content, sig) { @@ -61,10 +61,10 @@ class MuteListEvent( fun createListWithTag(key: String, tag: String, isPrivate: Boolean, signer: NostrSigner, createdAt: Long = TimeUtils.now(), onReady: (MuteListEvent) -> Unit) { if (isPrivate) { - encryptTags(listOf(listOf(key, tag)), signer) { encryptedTags -> + encryptTags(arrayOf(arrayOf(key, tag)), signer) { encryptedTags -> create( content = encryptedTags, - tags = emptyList(), + tags = emptyArray(), signer = signer, createdAt = createdAt, onReady = onReady @@ -73,7 +73,7 @@ class MuteListEvent( } else { create( content = "", - tags = listOf(listOf(key, tag)), + tags = arrayOf(arrayOf(key, tag)), signer = signer, createdAt = createdAt, onReady = onReady @@ -95,7 +95,7 @@ class MuteListEvent( encryptTags( privateTags = privateTags.plus( listPubKeyHex.map { - listOf("p", it) + arrayOf("p", it) } ), signer = signer @@ -114,7 +114,7 @@ class MuteListEvent( content = earlierVersion.content, tags = earlierVersion.tags.plus( listPubKeyHex.map { - listOf("p", it) + arrayOf("p", it) } ), signer = signer, @@ -138,7 +138,7 @@ class MuteListEvent( if (isPrivate) { earlierVersion.privateTagsOrEmpty(signer) { privateTags -> encryptTags( - privateTags = privateTags.plus(element = listOf(key, tag)), + privateTags = privateTags.plus(element = arrayOf(key, tag)), signer = signer ) { encryptedTags -> create( @@ -153,7 +153,7 @@ class MuteListEvent( } else { create( content = earlierVersion.content, - tags = earlierVersion.tags.plus(element = listOf(key, tag)), + tags = earlierVersion.tags.plus(element = arrayOf(key, tag)), signer = signer, createdAt = createdAt, onReady = onReady @@ -177,12 +177,12 @@ class MuteListEvent( if (isPrivate) { earlierVersion.privateTagsOrEmpty(signer) { privateTags -> encryptTags( - privateTags = privateTags.filter { it.size > 1 && !(it[0] == key && it[1] == tag) }, + privateTags = privateTags.filter { it.size > 1 && !(it[0] == key && it[1] == tag) }.toTypedArray(), signer = signer ) { encryptedTags -> create( content = encryptedTags, - tags = earlierVersion.tags.filter { it.size > 1 && !(it[0] == key && it[1] == tag) }, + tags = earlierVersion.tags.filter { it.size > 1 && !(it[0] == key && it[1] == tag) }.toTypedArray(), signer = signer, createdAt = createdAt, onReady = onReady @@ -192,7 +192,7 @@ class MuteListEvent( } else { create( content = earlierVersion.content, - tags = earlierVersion.tags.filter { it.size > 1 && !(it[0] == key && it[1] == tag) }, + tags = earlierVersion.tags.filter { it.size > 1 && !(it[0] == key && it[1] == tag) }.toTypedArray(), signer = signer, createdAt = createdAt, onReady = onReady @@ -204,7 +204,7 @@ class MuteListEvent( fun create( content: String, - tags: List>, + tags: Array>, signer: NostrSigner, createdAt: Long = TimeUtils.now(), onReady: (MuteListEvent) -> Unit diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/NNSEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/NNSEvent.kt index a51d7b94e..9f1066dd6 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/NNSEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/NNSEvent.kt @@ -13,7 +13,7 @@ class NNSEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) { @@ -29,7 +29,7 @@ class NNSEvent( createdAt: Long = TimeUtils.now(), onReady: (NNSEvent) -> Unit ) { - val tags = mutableListOf>() + val tags = emptyArray>() signer.sign(createdAt, kind, tags, "", onReady) } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/PeopleListEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/PeopleListEvent.kt index 6f2cd52e3..142ef05bd 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/PeopleListEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/PeopleListEvent.kt @@ -15,7 +15,7 @@ class PeopleListEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : GeneralListEvent(id, pubKey, createdAt, kind, tags, content, sig) { @@ -94,10 +94,10 @@ class PeopleListEvent( fun createListWithTag(name: String, key: String, tag: String, isPrivate: Boolean, signer: NostrSigner, createdAt: Long = TimeUtils.now(), onReady: (PeopleListEvent) -> Unit) { if (isPrivate) { - encryptTags(listOf(listOf(key, tag)), signer) { encryptedTags -> + encryptTags(arrayOf(arrayOf(key, tag)), signer) { encryptedTags -> create( content = encryptedTags, - tags = listOf(listOf("d", name)), + tags = arrayOf(arrayOf("d", name)), signer = signer, createdAt = createdAt, onReady = onReady @@ -106,7 +106,7 @@ class PeopleListEvent( } else { create( content = "", - tags = listOf(listOf("d", name), listOf(key, tag)), + tags = arrayOf(arrayOf("d", name), arrayOf(key, tag)), signer = signer, createdAt = createdAt, onReady = onReady @@ -128,7 +128,7 @@ class PeopleListEvent( encryptTags( privateTags = privateTags.plus( listPubKeyHex.map { - listOf("p", it) + arrayOf("p", it) } ), signer = signer @@ -147,7 +147,7 @@ class PeopleListEvent( content = earlierVersion.content, tags = earlierVersion.tags.plus( listPubKeyHex.map { - listOf("p", it) + arrayOf("p", it) } ), signer = signer, @@ -171,7 +171,7 @@ class PeopleListEvent( if (isPrivate) { earlierVersion.privateTagsOrEmpty(signer) { privateTags -> encryptTags( - privateTags = privateTags.plus(element = listOf(key, tag)), + privateTags = privateTags.plus(element = arrayOf(key, tag)), signer = signer ) { encryptedTags -> create( @@ -186,7 +186,7 @@ class PeopleListEvent( } else { create( content = earlierVersion.content, - tags = earlierVersion.tags.plus(element = listOf(key, tag)), + tags = earlierVersion.tags.plus(element = arrayOf(key, tag)), signer = signer, createdAt = createdAt, onReady = onReady @@ -210,12 +210,12 @@ class PeopleListEvent( if (isPrivate) { earlierVersion.privateTagsOrEmpty(signer) { privateTags -> encryptTags( - privateTags = privateTags.filter { it.size > 1 && !(it[0] == key && it[1] == tag) }, + privateTags = privateTags.filter { it.size > 1 && !(it[0] == key && it[1] == tag) }.toTypedArray(), signer = signer ) { encryptedTags -> create( content = encryptedTags, - tags = earlierVersion.tags.filter { it.size > 1 && !(it[0] == key && it[1] == tag) }, + tags = earlierVersion.tags.filter { it.size > 1 && !(it[0] == key && it[1] == tag) }.toTypedArray(), signer = signer, createdAt = createdAt, onReady = onReady @@ -225,7 +225,7 @@ class PeopleListEvent( } else { create( content = earlierVersion.content, - tags = earlierVersion.tags.filter { it.size > 1 && !(it[0] == key && it[1] == tag) }, + tags = earlierVersion.tags.filter { it.size > 1 && !(it[0] == key && it[1] == tag) }.toTypedArray(), signer = signer, createdAt = createdAt, onReady = onReady @@ -237,7 +237,7 @@ class PeopleListEvent( fun create( content: String, - tags: List>, + tags: Array>, signer: NostrSigner, createdAt: Long = TimeUtils.now(), onReady: (PeopleListEvent) -> Unit diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/PinListEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/PinListEvent.kt index 49daf8634..15616809a 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/PinListEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/PinListEvent.kt @@ -13,7 +13,7 @@ class PinListEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) { @@ -29,12 +29,12 @@ class PinListEvent( createdAt: Long = TimeUtils.now(), onReady: (PinListEvent) -> Unit ) { - val tags = mutableListOf>() + val tags = mutableListOf>() pins.forEach { - tags.add(listOf("pin", it)) + tags.add(arrayOf("pin", it)) } - signer.sign(createdAt, kind, tags, "", onReady) + signer.sign(createdAt, kind, tags.toTypedArray(), "", onReady) } } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/PollNoteEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/PollNoteEvent.kt index b8bccf6fe..981f80ff6 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/PollNoteEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/PollNoteEvent.kt @@ -19,7 +19,7 @@ class PollNoteEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, // ots: String?, TODO implement OTS: https://github.com/opentimestamps/java-opentimestamps content: String, sig: HexKey @@ -62,45 +62,45 @@ class PollNoteEvent( geohash: String? = null, onReady: (PollNoteEvent) -> Unit ) { - val tags = mutableListOf>() + val tags = mutableListOf>() replyTos?.forEach { - tags.add(listOf("e", it)) + tags.add(arrayOf("e", it)) } mentions?.forEach { - tags.add(listOf("p", it)) + tags.add(arrayOf("p", it)) } addresses?.forEach { - tags.add(listOf("a", it.toTag())) + tags.add(arrayOf("a", it.toTag())) } pollOptions.forEach { poll_op -> - tags.add(listOf(POLL_OPTION, poll_op.key.toString(), poll_op.value)) + tags.add(arrayOf(POLL_OPTION, poll_op.key.toString(), poll_op.value)) } valueMaximum?.let { - tags.add(listOf(VALUE_MAXIMUM, valueMaximum.toString())) + tags.add(arrayOf(VALUE_MAXIMUM, valueMaximum.toString())) } valueMinimum?.let { - tags.add(listOf(VALUE_MINIMUM, valueMinimum.toString())) + tags.add(arrayOf(VALUE_MINIMUM, valueMinimum.toString())) } consensusThreshold?.let { - tags.add(listOf(CONSENSUS_THRESHOLD, consensusThreshold.toString())) + tags.add(arrayOf(CONSENSUS_THRESHOLD, consensusThreshold.toString())) } closedAt?.let { - tags.add(listOf(CLOSED_AT, closedAt.toString())) + tags.add(arrayOf(CLOSED_AT, closedAt.toString())) } zapReceiver?.forEach { - tags.add(listOf("zap", it.lnAddressOrPubKeyHex, it.relay ?: "", it.weight.toString())) + tags.add(arrayOf("zap", it.lnAddressOrPubKeyHex, it.relay ?: "", it.weight.toString())) } if (markAsSensitive) { - tags.add(listOf("content-warning", "")) + tags.add(arrayOf("content-warning", "")) } zapRaiserAmount?.let { - tags.add(listOf("zapraiser", "$it")) + tags.add(arrayOf("zapraiser", "$it")) } geohash?.let { tags.addAll(geohashMipMap(it)) } - signer.sign(createdAt, kind, tags, msg, onReady) + signer.sign(createdAt, kind, tags.toTypedArray(), msg, onReady) } } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/PrivateDmEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/PrivateDmEvent.kt index b4dda2c42..bcd8f2fd4 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/PrivateDmEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/PrivateDmEvent.kt @@ -19,7 +19,7 @@ class PrivateDmEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : Event(id, pubKey, createdAt, kind, tags, content, sig), ChatroomKeyable { @@ -109,38 +109,38 @@ class PrivateDmEvent( onReady: (PrivateDmEvent) -> Unit ) { val message = if (advertiseNip18) { nip18Advertisement } else { "" } + msg - val tags = mutableListOf>() + val tags = mutableListOf>() publishedRecipientPubKey?.let { - tags.add(listOf("p", publishedRecipientPubKey)) + tags.add(arrayOf("p", publishedRecipientPubKey)) } replyTos?.forEach { - tags.add(listOf("e", it)) + tags.add(arrayOf("e", it)) } mentions?.forEach { - tags.add(listOf("p", it)) + tags.add(arrayOf("p", it)) } zapReceiver?.forEach { - tags.add(listOf("zap", it.lnAddressOrPubKeyHex, it.relay ?: "", it.weight.toString())) + tags.add(arrayOf("zap", it.lnAddressOrPubKeyHex, it.relay ?: "", it.weight.toString())) } if (markAsSensitive) { - tags.add(listOf("content-warning", "")) + tags.add(arrayOf("content-warning", "")) } zapRaiserAmount?.let { - tags.add(listOf("zapraiser", "$it")) + tags.add(arrayOf("zapraiser", "$it")) } geohash?.let { tags.addAll(geohashMipMap(it)) } signer.nip04Encrypt(message, recipientPubKey) { content -> - signer.sign(createdAt, kind, tags, content, onReady) + signer.sign(createdAt, kind, tags.toTypedArray(), content, onReady) } } } } -fun geohashMipMap(geohash: String): List> { +fun geohashMipMap(geohash: String): Array> { return geohash.indices.asSequence().map { - listOf("g", geohash.substring(0, it+1)) - }.toList().reversed() + arrayOf("g", geohash.substring(0, it+1)) + }.toList().reversed().toTypedArray() } \ No newline at end of file diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/ReactionEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/ReactionEvent.kt index 4aae2bcc7..964fdd116 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/ReactionEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/ReactionEvent.kt @@ -13,7 +13,7 @@ class ReactionEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : Event(id, pubKey, createdAt, kind, tags, content, sig) { @@ -33,25 +33,25 @@ class ReactionEvent( } fun create(content: String, originalNote: EventInterface, signer: NostrSigner, createdAt: Long = TimeUtils.now(), onReady: (ReactionEvent) -> Unit) { - var tags = listOf(listOf("e", originalNote.id()), listOf("p", originalNote.pubKey())) + var tags = listOf(arrayOf("e", originalNote.id()), arrayOf("p", originalNote.pubKey())) if (originalNote is AddressableEvent) { - tags = tags + listOf(listOf("a", originalNote.address().toTag())) + tags = tags + listOf(arrayOf("a", originalNote.address().toTag())) } - return signer.sign(createdAt, kind, tags, content, onReady) + return signer.sign(createdAt, kind, tags.toTypedArray(), content, onReady) } fun create(emojiUrl: EmojiUrl, originalNote: EventInterface, signer: NostrSigner, createdAt: Long = TimeUtils.now(), onReady: (ReactionEvent) -> Unit) { val content = ":${emojiUrl.code}:" - var tags = listOf( - listOf("e", originalNote.id()), - listOf("p", originalNote.pubKey()), - listOf("emoji", emojiUrl.code, emojiUrl.url) + var tags = arrayOf( + arrayOf("e", originalNote.id()), + arrayOf("p", originalNote.pubKey()), + arrayOf("emoji", emojiUrl.code, emojiUrl.url) ) if (originalNote is AddressableEvent) { - tags = tags + listOf(listOf("a", originalNote.address().toTag())) + tags += arrayOf(arrayOf("a", originalNote.address().toTag())) } signer.sign(createdAt, kind, tags, content, onReady) diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/RecommendRelayEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/RecommendRelayEvent.kt index 1f8d52f29..783502ee5 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/RecommendRelayEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/RecommendRelayEvent.kt @@ -13,7 +13,7 @@ class RecommendRelayEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : Event(id, pubKey, createdAt, kind, tags, content, sig) { @@ -30,8 +30,7 @@ class RecommendRelayEvent( onReady: (RecommendRelayEvent) -> Unit ) { val content = relay.toString() - val tags = listOf>() - signer.sign(createdAt, kind, tags, content, onReady) + signer.sign(createdAt, kind, emptyArray(), content, onReady) } } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/RelayAuthEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/RelayAuthEvent.kt index 4df5ea009..eaf88c323 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/RelayAuthEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/RelayAuthEvent.kt @@ -12,7 +12,7 @@ class RelayAuthEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : Event(id, pubKey, createdAt, kind, tags, content, sig) { @@ -30,9 +30,9 @@ class RelayAuthEvent( onReady: (RelayAuthEvent) -> Unit ) { val content = "" - val tags = listOf( - listOf("relay", relay), - listOf("challenge", challenge) + val tags = arrayOf( + arrayOf("relay", relay), + arrayOf("challenge", challenge) ) signer.sign(createdAt, kind, tags, content, onReady) } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/RelaySetEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/RelaySetEvent.kt index 3d9d6a159..ff830a6fd 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/RelaySetEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/RelaySetEvent.kt @@ -13,7 +13,7 @@ class RelaySetEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) { @@ -29,12 +29,12 @@ class RelaySetEvent( createdAt: Long = TimeUtils.now(), onReady: (RelaySetEvent) -> Unit ) { - val tags = mutableListOf>() + val tags = mutableListOf>() relays.forEach { - tags.add(listOf("r", it)) + tags.add(arrayOf("r", it)) } - signer.sign(createdAt, kind, tags, "", onReady) + signer.sign(createdAt, kind, tags.toTypedArray(), "", onReady) } } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/ReportEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/ReportEvent.kt index cb38759ec..86bfc211d 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/ReportEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/ReportEvent.kt @@ -17,7 +17,7 @@ class ReportEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : Event(id, pubKey, createdAt, kind, tags, content, sig) { @@ -63,13 +63,13 @@ class ReportEvent( createdAt: Long = TimeUtils.now(), onReady: (ReportEvent) -> Unit ) { - val reportPostTag = listOf("e", reportedPost.id(), type.name.lowercase()) - val reportAuthorTag = listOf("p", reportedPost.pubKey(), type.name.lowercase()) + val reportPostTag = arrayOf("e", reportedPost.id(), type.name.lowercase()) + val reportAuthorTag = arrayOf("p", reportedPost.pubKey(), type.name.lowercase()) - var tags: List> = listOf(reportPostTag, reportAuthorTag) + var tags: Array> = arrayOf(reportPostTag, reportAuthorTag) if (reportedPost is AddressableEvent) { - tags = tags + listOf(listOf("a", reportedPost.address().toTag())) + tags = tags + listOf(arrayOf("a", reportedPost.address().toTag())) } signer.sign(createdAt, kind, tags, content, onReady) @@ -84,9 +84,9 @@ class ReportEvent( ) { val content = "" - val reportAuthorTag = listOf("p", reportedUser, type.name.lowercase()) + val reportAuthorTag = arrayOf("p", reportedUser, type.name.lowercase()) - val tags: List> = listOf(reportAuthorTag) + val tags: Array> = arrayOf(reportAuthorTag) signer.sign(createdAt, kind, tags, content, onReady) } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/RepostEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/RepostEvent.kt index 3b522b494..b67a45f60 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/RepostEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/RepostEvent.kt @@ -13,7 +13,7 @@ class RepostEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : Event(id, pubKey, createdAt, kind, tags, content, sig) { @@ -38,13 +38,13 @@ class RepostEvent( ) { val content = boostedPost.toJson() - val replyToPost = listOf("e", boostedPost.id()) - val replyToAuthor = listOf("p", boostedPost.pubKey()) + val replyToPost = arrayOf("e", boostedPost.id()) + val replyToAuthor = arrayOf("p", boostedPost.pubKey()) - var tags: List> = listOf(replyToPost, replyToAuthor) + var tags: Array> = arrayOf(replyToPost, replyToAuthor) if (boostedPost is AddressableEvent) { - tags = tags + listOf(listOf("a", boostedPost.address().toTag())) + tags = tags + listOf(arrayOf("a", boostedPost.address().toTag())) } signer.sign(createdAt, kind, tags, content, onReady) diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/SealedGossipEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/SealedGossipEvent.kt index ba3f649fd..a4da19974 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/SealedGossipEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/SealedGossipEvent.kt @@ -19,7 +19,7 @@ class SealedGossipEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ): WrappedEvent(id, pubKey, createdAt, kind, tags, content, sig) { @@ -85,10 +85,9 @@ class SealedGossipEvent( onReady: (SealedGossipEvent) -> Unit ) { val msg = Gossip.toJson(gossip) - val tags = listOf>() signer.nip44Encrypt(msg, encryptTo) { content -> - signer.sign(createdAt, kind, tags, content, onReady) + signer.sign(createdAt, kind, emptyArray(), content, onReady) } } } @@ -101,14 +100,14 @@ class Gossip( @JsonProperty("created_at") val createdAt: Long?, val kind: Int?, - val tags: List>?, + val tags: Array>?, val content: String? ) { fun mergeWith(event: SealedGossipEvent): Event { val newPubKey = pubKey?.ifBlank { null } ?: event.pubKey val newCreatedAt = if (createdAt != null && createdAt > 1000) createdAt else event.createdAt val newKind = kind ?: -1 - val newTags = (tags ?: emptyList()).plus(event.tags) + val newTags = (tags ?: emptyArray()).plus(event.tags) val newContent = content ?: "" val newID = id?.ifBlank { null } ?: Event.generateId(newPubKey, newCreatedAt, newKind, newTags, newContent).toHexKey() val sig = "" 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 4cbe1953e..bc7c961b0 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/StatusEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/StatusEvent.kt @@ -14,7 +14,7 @@ class StatusEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) { @@ -30,12 +30,12 @@ class StatusEvent( createdAt: Long = TimeUtils.now(), onReady: (StatusEvent) -> Unit ) { - val tags = mutableListOf>() + val tags = mutableListOf>() - tags.add(listOf("d", type)) - expiration?.let { tags.add(listOf("expiration", it.toString())) } + tags.add(arrayOf("d", type)) + expiration?.let { tags.add(arrayOf("expiration", it.toString())) } - signer.sign(createdAt, kind, tags, msg, onReady) + signer.sign(createdAt, kind, tags.toTypedArray(), msg, onReady) } fun update( @@ -57,7 +57,7 @@ class StatusEvent( ) { val msg = "" val tags = event.tags.filter { it.size > 1 && it[0] == "d" } - signer.sign(createdAt, kind, tags, msg, onReady) + signer.sign(createdAt, kind, tags.toTypedArray(), msg, onReady) } } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/TextNoteEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/TextNoteEvent.kt index 7014d555d..ce699a73f 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/TextNoteEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/TextNoteEvent.kt @@ -16,7 +16,7 @@ class TextNoteEvent( id: HexKey, pubKey: HexKey, createdAt: Long, - tags: List>, + tags: Array>, content: String, sig: HexKey ) : BaseTextNoteEvent(id, pubKey, createdAt, kind, tags, content, sig) { @@ -43,61 +43,61 @@ class TextNoteEvent( createdAt: Long = TimeUtils.now(), onReady: (TextNoteEvent) -> Unit ) { - val tags = mutableListOf>() + val tags = mutableListOf>() replyTos?.forEach { if (it == root) { - tags.add(listOf("e", it, "", "root")) + tags.add(arrayOf("e", it, "", "root")) } else if (it == replyingTo) { - tags.add(listOf("e", it, "", "reply")) + tags.add(arrayOf("e", it, "", "reply")) } else if (it in directMentions) { - tags.add(listOf("e", it, "", "mention")) + tags.add(arrayOf("e", it, "", "mention")) } else { - tags.add(listOf("e", it)) + tags.add(arrayOf("e", it)) } } mentions?.forEach { if (it in directMentions) { - tags.add(listOf("p", it, "", "mention")) + tags.add(arrayOf("p", it, "", "mention")) } else { - tags.add(listOf("p", it)) + tags.add(arrayOf("p", it)) } } addresses?.forEach { val aTag = it.toTag() if (aTag == root) { - tags.add(listOf("a", aTag, "", "root")) + tags.add(arrayOf("a", aTag, "", "root")) } else if (aTag == replyingTo) { - tags.add(listOf("a", aTag, "", "reply")) + tags.add(arrayOf("a", aTag, "", "reply")) } else if (aTag in directMentions) { - tags.add(listOf("a", aTag, "", "mention")) + tags.add(arrayOf("a", aTag, "", "mention")) } else { - tags.add(listOf("a", aTag)) + tags.add(arrayOf("a", aTag)) } } findHashtags(msg).forEach { - tags.add(listOf("t", it)) - tags.add(listOf("t", it.lowercase())) + tags.add(arrayOf("t", it)) + tags.add(arrayOf("t", it.lowercase())) } extraTags?.forEach { - tags.add(listOf("t", it)) + tags.add(arrayOf("t", it)) } zapReceiver?.forEach { - tags.add(listOf("zap", it.lnAddressOrPubKeyHex, it.relay ?: "", it.weight.toString())) + tags.add(arrayOf("zap", it.lnAddressOrPubKeyHex, it.relay ?: "", it.weight.toString())) } findURLs(msg).forEach { - tags.add(listOf("r", it)) + tags.add(arrayOf("r", it)) } if (markAsSensitive) { - tags.add(listOf("content-warning", "")) + tags.add(arrayOf("content-warning", "")) } zapRaiserAmount?.let { - tags.add(listOf("zapraiser", "$it")) + tags.add(arrayOf("zapraiser", "$it")) } geohash?.let { tags.addAll(geohashMipMap(it)) } - signer.sign(createdAt, kind, tags, msg, onReady) + signer.sign(createdAt, kind, tags.toTypedArray(), msg, onReady) } } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/signers/NostrSigner.kt b/quartz/src/main/java/com/vitorpamplona/quartz/signers/NostrSigner.kt index e9ce32145..19fa451bc 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/signers/NostrSigner.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/signers/NostrSigner.kt @@ -11,7 +11,7 @@ import kotlinx.coroutines.withContext abstract class NostrSigner(val pubKey: HexKey) { - abstract fun sign(createdAt: Long, kind: Int, tags: List>, content: String, onReady: (T) -> Unit) + abstract fun sign(createdAt: Long, kind: Int, tags: Array>, content: String, onReady: (T) -> Unit) abstract fun nip04Encrypt(decryptedContent: String, toPublicKey: HexKey, onReady: (String)-> Unit) abstract fun nip04Decrypt(encryptedContent: String, fromPublicKey: HexKey, onReady: (String)-> Unit) diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/signers/NostrSignerExternal.kt b/quartz/src/main/java/com/vitorpamplona/quartz/signers/NostrSignerExternal.kt index 352539479..5e6b3eb76 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/signers/NostrSignerExternal.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/signers/NostrSignerExternal.kt @@ -17,7 +17,7 @@ class NostrSignerExternal( override fun sign( createdAt: Long, kind: Int, - tags: List>, + tags: Array>, content: String, onReady: (T) -> Unit ) { diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/signers/NostrSignerInternal.kt b/quartz/src/main/java/com/vitorpamplona/quartz/signers/NostrSignerInternal.kt index ea6a5805d..e21d333af 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/signers/NostrSignerInternal.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/signers/NostrSignerInternal.kt @@ -21,7 +21,7 @@ class NostrSignerInternal(val keyPair: KeyPair): NostrSigner(keyPair.pubKey.toHe override fun sign( createdAt: Long, kind: Int, - tags: List>, + tags: Array>, content: String, onReady: (T)-> Unit ) { @@ -37,7 +37,7 @@ class NostrSignerInternal(val keyPair: KeyPair): NostrSigner(keyPair.pubKey.toHe fun isUnsignedPrivateEvent( kind: Int, - tags: List>, + tags: Array>, ): Boolean { return kind == LnZapRequestEvent.kind && tags.any { t -> t.size > 1 && t[0] == "anon" && t[1].isBlank() } } @@ -45,7 +45,7 @@ class NostrSignerInternal(val keyPair: KeyPair): NostrSigner(keyPair.pubKey.toHe fun signNormal( createdAt: Long, kind: Int, - tags: List>, + tags: Array>, content: String, onReady: (T)-> Unit ) { @@ -123,7 +123,7 @@ class NostrSignerInternal(val keyPair: KeyPair): NostrSigner(keyPair.pubKey.toHe private fun signPrivateZap( createdAt: Long, kind: Int, - tags: List>, + tags: Array>, content: String, onReady: (T)-> Unit ) { @@ -138,7 +138,7 @@ class NostrSignerInternal(val keyPair: KeyPair): NostrSigner(keyPair.pubKey.toHe val encryptionPrivateKey = LnZapRequestEvent.createEncryptionPrivateKey(keyPair.privKey.toHexKey(), idToGeneratePrivateKey, createdAt) - val fullTagsNoAnon = tags.filter { t -> t.getOrNull(0) != "anon" } + val fullTagsNoAnon = tags.filter { t -> t.getOrNull(0) != "anon" }.toTypedArray() LnZapPrivateEvent.create(this, fullTagsNoAnon, content) { val noteJson = it.toJson() @@ -148,10 +148,10 @@ class NostrSignerInternal(val keyPair: KeyPair): NostrSigner(keyPair.pubKey.toHe userHex.hexToByteArray() ) - val newTags = tags.filter { t -> t.getOrNull(0) != "anon" } + listOf(listOf("anon", encryptedContent)) + val newTags = tags.filter { t -> t.getOrNull(0) != "anon" } + listOf(arrayOf("anon", encryptedContent)) val newContent = "" - NostrSignerInternal(KeyPair(encryptionPrivateKey)).signNormal(createdAt, kind, newTags, newContent, onReady) + NostrSignerInternal(KeyPair(encryptionPrivateKey)).signNormal(createdAt, kind, newTags.toTypedArray(), newContent, onReady) } }