Fixes bug with rendering of markdown with user citations.
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package com.vitorpamplona.amethyst.service.nip19
|
package com.vitorpamplona.amethyst.service.nip19
|
||||||
|
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
|
import androidx.compose.runtime.Immutable
|
||||||
import com.vitorpamplona.amethyst.model.hexToByteArray
|
import com.vitorpamplona.amethyst.model.hexToByteArray
|
||||||
import com.vitorpamplona.amethyst.model.toHexKey
|
import com.vitorpamplona.amethyst.model.toHexKey
|
||||||
import nostr.postr.Bech32
|
import nostr.postr.Bech32
|
||||||
@@ -15,6 +16,7 @@ object Nip19 {
|
|||||||
|
|
||||||
val nip19regex = Pattern.compile("(nostr:)?@?(nsec1|npub1|nevent1|naddr1|note1|nprofile1|nrelay1)([qpzry9x8gf2tvdw0s3jn54khce6mua7l]+)([\\S]*)", Pattern.CASE_INSENSITIVE)
|
val nip19regex = Pattern.compile("(nostr:)?@?(nsec1|npub1|nevent1|naddr1|note1|nprofile1|nrelay1)([qpzry9x8gf2tvdw0s3jn54khce6mua7l]+)([\\S]*)", Pattern.CASE_INSENSITIVE)
|
||||||
|
|
||||||
|
@Immutable
|
||||||
data class Return(
|
data class Return(
|
||||||
val type: Type,
|
val type: Type,
|
||||||
val hex: String,
|
val hex: String,
|
||||||
|
|||||||
@@ -365,40 +365,8 @@ private fun RenderContentAsMarkdown(content: String, backgroundColor: Color, tag
|
|||||||
}
|
}
|
||||||
|
|
||||||
nip19References.forEach {
|
nip19References.forEach {
|
||||||
var baseUser by remember(it) { mutableStateOf<User?>(null) }
|
ObserveNIP19(it) {
|
||||||
var baseNote by remember(it) { mutableStateOf<Note?>(null) }
|
refresh++
|
||||||
|
|
||||||
LaunchedEffect(key1 = it.hex) {
|
|
||||||
withContext(Dispatchers.IO) {
|
|
||||||
if (it.type == Nip19.Type.NOTE || it.type == Nip19.Type.EVENT || it.type == Nip19.Type.ADDRESS) {
|
|
||||||
LocalCache.checkGetOrCreateNote(it.hex)?.let { note ->
|
|
||||||
baseNote = note
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (it.type == Nip19.Type.USER) {
|
|
||||||
LocalCache.checkGetOrCreateUser(it.hex)?.let { user ->
|
|
||||||
baseUser = user
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
baseNote?.let {
|
|
||||||
val noteState by it.live().metadata.observeAsState()
|
|
||||||
if (noteState?.note?.event != null) {
|
|
||||||
LaunchedEffect(key1 = noteState) {
|
|
||||||
refresh++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
baseUser?.let {
|
|
||||||
val userState by it.live().metadata.observeAsState()
|
|
||||||
if (userState?.user?.info != null) {
|
|
||||||
LaunchedEffect(key1 = userState) {
|
|
||||||
refresh++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -423,6 +391,49 @@ private fun RenderContentAsMarkdown(content: String, backgroundColor: Color, tag
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
private fun ObserveNIP19(
|
||||||
|
it: Nip19.Return,
|
||||||
|
onRefresh: () -> Unit
|
||||||
|
) {
|
||||||
|
var baseUser by remember(it) { mutableStateOf<User?>(null) }
|
||||||
|
var baseNote by remember(it) { mutableStateOf<Note?>(null) }
|
||||||
|
|
||||||
|
LaunchedEffect(key1 = it.hex) {
|
||||||
|
withContext(Dispatchers.IO) {
|
||||||
|
if (it.type == Nip19.Type.NOTE || it.type == Nip19.Type.EVENT || it.type == Nip19.Type.ADDRESS) {
|
||||||
|
LocalCache.checkGetOrCreateNote(it.hex)?.let { note ->
|
||||||
|
baseNote = note
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (it.type == Nip19.Type.USER) {
|
||||||
|
LocalCache.checkGetOrCreateUser(it.hex)?.let { user ->
|
||||||
|
baseUser = user
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
baseNote?.let { note ->
|
||||||
|
val noteState by note.live().metadata.observeAsState()
|
||||||
|
if (noteState?.note?.event != null) {
|
||||||
|
LaunchedEffect(key1 = noteState) {
|
||||||
|
onRefresh()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
baseUser?.let { user ->
|
||||||
|
val userState by user.live().metadata.observeAsState()
|
||||||
|
if (userState?.user?.info != null) {
|
||||||
|
LaunchedEffect(key1 = userState) {
|
||||||
|
onRefresh()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun getDisplayNameAndNIP19FromTag(tag: String, tags: List<List<String>>): Pair<String, String>? {
|
private fun getDisplayNameAndNIP19FromTag(tag: String, tags: List<List<String>>): Pair<String, String>? {
|
||||||
val matcher = tagIndex.matcher(tag)
|
val matcher = tagIndex.matcher(tag)
|
||||||
val (index, suffix) = try {
|
val (index, suffix) = try {
|
||||||
|
|||||||
Reference in New Issue
Block a user