Better parse multiple imetas with multiple urls into appropriate properties
This commit is contained in:
@@ -89,10 +89,7 @@ object Nip19Parser {
|
|||||||
if (uri == null) return null
|
if (uri == null) return null
|
||||||
|
|
||||||
try {
|
try {
|
||||||
val matcher = nip19PlusNip46regex.find(uri)
|
val matcher = nip19PlusNip46regex.find(uri) ?: return null
|
||||||
if (matcher == null) {
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
|
|
||||||
val type = matcher.groups[3]?.value ?: matcher.groups[5]?.value // npub1
|
val type = matcher.groups[3]?.value ?: matcher.groups[5]?.value // npub1
|
||||||
val key = matcher.groups[4]?.value ?: matcher.groups[6]?.value // bech32
|
val key = matcher.groups[4]?.value ?: matcher.groups[6]?.value // bech32
|
||||||
|
|||||||
@@ -42,18 +42,14 @@ class IMetaTag(
|
|||||||
const val TAG_NAME = "imeta"
|
const val TAG_NAME = "imeta"
|
||||||
const val ANCHOR_PROPERTY = "url"
|
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.has(1)) { return null }
|
||||||
ensure(tag[0] == TAG_NAME) { return null }
|
ensure(tag[0] == TAG_NAME) { return null }
|
||||||
ensure(tag[1].isNotEmpty()) { return null }
|
ensure(tag[1].isNotEmpty()) { return null }
|
||||||
|
|
||||||
val allTags = parseIMeta(tag)
|
val allTags = parseIMeta(tag)
|
||||||
val url = allTags[ANCHOR_PROPERTY]?.firstOrNull()
|
return allTags[ANCHOR_PROPERTY]?.map {
|
||||||
|
IMetaTag(it, allTags.minus(ANCHOR_PROPERTY))
|
||||||
return if (url != null) {
|
|
||||||
IMetaTag(url, allTags.minus(ANCHOR_PROPERTY))
|
|
||||||
} else {
|
|
||||||
null
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,6 @@ package com.vitorpamplona.quartz.nip92IMeta
|
|||||||
|
|
||||||
import com.vitorpamplona.quartz.nip01Core.core.TagArray
|
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 }
|
fun TagArray.imetasByUrl() = this.imetas().associateBy { it.url }
|
||||||
|
|||||||
Reference in New Issue
Block a user