From 3aa370d746e6c089b29d476a464539ef12966047 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Tue, 11 Mar 2025 13:46:55 -0400 Subject: [PATCH] Fixes bug that the room changes after citing a user on NIP-17 --- .../privateDM/send/ChatNewMessageViewModel.kt | 8 ++++---- .../quartz/nip10Notes/content/NostrUris.kt | 2 ++ .../quartz/nip19Bech32/Nip19Parser.kt | 19 ++++++++++++++++--- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chats/privateDM/send/ChatNewMessageViewModel.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chats/privateDM/send/ChatNewMessageViewModel.kt index 4b65993ed..fc6aafef4 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chats/privateDM/send/ChatNewMessageViewModel.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chats/privateDM/send/ChatNewMessageViewModel.kt @@ -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) diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/nip10Notes/content/NostrUris.kt b/quartz/src/main/java/com/vitorpamplona/quartz/nip10Notes/content/NostrUris.kt index 384561087..b890406f2 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/nip10Notes/content/NostrUris.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/nip10Notes/content/NostrUris.kt @@ -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) diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/nip19Bech32/Nip19Parser.kt b/quartz/src/main/java/com/vitorpamplona/quartz/nip19Bech32/Nip19Parser.kt index 7d1cceff9..ff87aa3c2 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/nip19Bech32/Nip19Parser.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/nip19Bech32/Nip19Parser.kt @@ -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 { - val matcher2 = nip19regex.matcher(content) + fun parseAll( + content: String, + regex: Pattern, + ): List { + val matcher2 = regex.matcher(content) val returningList = mutableListOf() 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 = parseAll(content, nip19regex) + + fun parseAllEvents(content: String): List = parseAll(content, nip19regexEvents) } fun decodePublicKey(key: String): ByteArray =