Better parse multiple imetas with multiple urls into appropriate properties

This commit is contained in:
Vitor Pamplona
2025-11-13 10:45:28 -05:00
parent f186b78ca9
commit c9370f8d02
3 changed files with 5 additions and 12 deletions
@@ -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
@@ -42,18 +42,14 @@ class IMetaTag(
const val TAG_NAME = "imeta"
const val ANCHOR_PROPERTY = "url"
fun parse(tag: Array<String>): IMetaTag? {
fun parse(tag: Array<String>): List<IMetaTag>? {
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))
}
}
@@ -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 }