From c9370f8d02686a828cbb4dbe3a908f230a05eee8 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Thu, 13 Nov 2025 10:45:28 -0500 Subject: [PATCH] Better parse multiple imetas with multiple urls into appropriate properties --- .../vitorpamplona/quartz/nip19Bech32/Nip19Parser.kt | 5 +---- .../com/vitorpamplona/quartz/nip92IMeta/IMetaTag.kt | 10 +++------- .../com/vitorpamplona/quartz/nip92IMeta/TagArrayExt.kt | 2 +- 3 files changed, 5 insertions(+), 12 deletions(-) diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip19Bech32/Nip19Parser.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip19Bech32/Nip19Parser.kt index fdea6b724..4310d65b9 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip19Bech32/Nip19Parser.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip19Bech32/Nip19Parser.kt @@ -89,10 +89,7 @@ object Nip19Parser { if (uri == null) return null try { - val matcher = nip19PlusNip46regex.find(uri) - if (matcher == null) { - return null - } + val matcher = nip19PlusNip46regex.find(uri) ?: return null val type = matcher.groups[3]?.value ?: matcher.groups[5]?.value // npub1 val key = matcher.groups[4]?.value ?: matcher.groups[6]?.value // bech32 diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip92IMeta/IMetaTag.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip92IMeta/IMetaTag.kt index 237b11d6b..dc8884856 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip92IMeta/IMetaTag.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip92IMeta/IMetaTag.kt @@ -42,18 +42,14 @@ class IMetaTag( const val TAG_NAME = "imeta" const val ANCHOR_PROPERTY = "url" - fun parse(tag: Array): IMetaTag? { + fun parse(tag: Array): List? { ensure(tag.has(1)) { return null } ensure(tag[0] == TAG_NAME) { return null } ensure(tag[1].isNotEmpty()) { return null } val allTags = parseIMeta(tag) - val url = allTags[ANCHOR_PROPERTY]?.firstOrNull() - - return if (url != null) { - IMetaTag(url, allTags.minus(ANCHOR_PROPERTY)) - } else { - null + return allTags[ANCHOR_PROPERTY]?.map { + IMetaTag(it, allTags.minus(ANCHOR_PROPERTY)) } } diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip92IMeta/TagArrayExt.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip92IMeta/TagArrayExt.kt index eaee8e5c3..8166224ad 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip92IMeta/TagArrayExt.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip92IMeta/TagArrayExt.kt @@ -22,6 +22,6 @@ package com.vitorpamplona.quartz.nip92IMeta import com.vitorpamplona.quartz.nip01Core.core.TagArray -fun TagArray.imetas() = this.mapNotNull(IMetaTag::parse) +fun TagArray.imetas() = this.mapNotNull(IMetaTag::parse).flatten() fun TagArray.imetasByUrl() = this.imetas().associateBy { it.url }