Fixes bug that the room changes after citing a user on NIP-17

This commit is contained in:
Vitor Pamplona 2025-03-11 13:46:55 -04:00
parent 583855de4f
commit 3aa370d746
3 changed files with 22 additions and 7 deletions

View File

@ -44,14 +44,14 @@ import com.vitorpamplona.amethyst.ui.actions.mediaServers.DEFAULT_MEDIA_SERVERS
import com.vitorpamplona.amethyst.ui.actions.uploads.SelectedMedia
import com.vitorpamplona.amethyst.ui.components.Split
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
import com.vitorpamplona.amethyst.ui.screen.loggedIn.chats.privateDM.send.upload.ChatFileUploadState
import com.vitorpamplona.amethyst.ui.screen.loggedIn.chats.privateDM.send.upload.ChatFileUploader
import com.vitorpamplona.amethyst.ui.screen.loggedIn.chats.utils.ChatFileUploadState
import com.vitorpamplona.quartz.nip01Core.core.AddressableEvent
import com.vitorpamplona.quartz.nip01Core.tags.hashtags.hashtags
import com.vitorpamplona.quartz.nip01Core.tags.references.references
import com.vitorpamplona.quartz.nip04Dm.messages.PrivateDmEvent
import com.vitorpamplona.quartz.nip10Notes.content.findHashtags
import com.vitorpamplona.quartz.nip10Notes.content.findNostrUris
import com.vitorpamplona.quartz.nip10Notes.content.findNostrEventUris
import com.vitorpamplona.quartz.nip10Notes.content.findURLs
import com.vitorpamplona.quartz.nip14Subject.subject
import com.vitorpamplona.quartz.nip17Dm.base.BaseDMGroupEvent
@ -372,7 +372,7 @@ open class ChatNewMessageViewModel : ViewModel() {
ChatMessageEvent.build(message, room.users.map { LocalCache.getOrCreateUser(it).toPTag() }) {
hashtags(findHashtags(message))
references(findURLs(message))
quotes(findNostrUris(message))
quotes(findNostrEventUris(message))
emojis(emojis)
imetas(usedAttachments)
@ -381,7 +381,7 @@ open class ChatNewMessageViewModel : ViewModel() {
ChatMessageEvent.reply(message, replyHint) {
hashtags(findHashtags(message))
references(findURLs(message))
quotes(findNostrUris(message))
quotes(findNostrEventUris(message))
emojis(emojis)
imetas(usedAttachments)

View File

@ -23,3 +23,5 @@ package com.vitorpamplona.quartz.nip10Notes.content
import com.vitorpamplona.quartz.nip19Bech32.Nip19Parser
fun findNostrUris(content: String) = Nip19Parser.parseAll(content)
fun findNostrEventUris(content: String) = Nip19Parser.parseAllEvents(content)

View File

@ -53,6 +53,12 @@ object Nip19Parser {
Pattern.CASE_INSENSITIVE,
)
val nip19regexEvents: Pattern =
Pattern.compile(
"(nostr:)?@?(nevent1|naddr1|note1|nrelay1|nembed1)([qpzry9x8gf2tvdw0s3jn54khce6mua7l]+)([\\S]*)",
Pattern.CASE_INSENSITIVE,
)
@Immutable
data class ParseReturn(
val entity: Entity,
@ -130,8 +136,11 @@ object Nip19Parser {
null
}
fun parseAll(content: String): List<Entity> {
val matcher2 = nip19regex.matcher(content)
fun parseAll(
content: String,
regex: Pattern,
): List<Entity> {
val matcher2 = regex.matcher(content)
val returningList = mutableListOf<Entity>()
while (matcher2.find()) {
val type = matcher2.group(2) // npub1
@ -139,7 +148,7 @@ object Nip19Parser {
val additionalChars = matcher2.group(4) // additional chars
if (type != null) {
val parsed = Nip19Parser.parseComponents(type, key, additionalChars)?.entity
val parsed = parseComponents(type, key, additionalChars)?.entity
if (parsed != null) {
returningList.add(parsed)
@ -148,6 +157,10 @@ object Nip19Parser {
}
return returningList
}
fun parseAll(content: String): List<Entity> = parseAll(content, nip19regex)
fun parseAllEvents(content: String): List<Entity> = parseAll(content, nip19regexEvents)
}
fun decodePublicKey(key: String): ByteArray =