From fe2cb7da662cdaf4f687d49764723529e7a14edc Mon Sep 17 00:00:00 2001 From: davotoula Date: Wed, 6 May 2026 17:28:36 +0200 Subject: [PATCH] Centralise the NIP-05 wildcard check (`name != "_"`) on the data class itself. --- .../amethyst/ui/note/NIP05VerificationDisplay.kt | 4 ++-- .../userSuggestions/ShowUserSuggestionList.kt | 2 +- .../loggedIn/relays/nip86/RelayManagementScreen.kt | 2 +- .../quartz/nip05DnsIdentifiers/Nip05Id.kt | 6 ++++++ .../quartz/nip05DnsIdentifiers/Nip05Test.kt | 14 ++++++++++++++ 5 files changed, 24 insertions(+), 4 deletions(-) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/NIP05VerificationDisplay.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/NIP05VerificationDisplay.kt index 817fd27d0..b33793d13 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/NIP05VerificationDisplay.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/NIP05VerificationDisplay.kt @@ -378,7 +378,7 @@ fun ObserveAndDisplayNIP05( ) { val uri = LocalUriHandler.current - if (nip05State.nip05.name != "_") { + if (nip05State.nip05.hasLocalPart()) { Text( text = remember(nip05State) { AnnotatedString(nip05State.nip05.name) }, fontSize = Font14SP, @@ -407,7 +407,7 @@ fun DisplayNIP05( ) { val uri = LocalUriHandler.current - if (nip05State.nip05.name != "_") { + if (nip05State.nip05.hasLocalPart()) { Text( text = remember(nip05State) { AnnotatedString(nip05State.nip05.name) }, fontSize = Font14SP, diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/creators/userSuggestions/ShowUserSuggestionList.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/creators/userSuggestions/ShowUserSuggestionList.kt index 1dbf06030..cfa7304b6 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/creators/userSuggestions/ShowUserSuggestionList.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/creators/userSuggestions/ShowUserSuggestionList.kt @@ -188,7 +188,7 @@ private fun NonClickableObserveAndDisplayNIP05( nip05State: Nip05State.Exists, accountViewModel: AccountViewModel, ) { - if (nip05State.nip05.name != "_") { + if (nip05State.nip05.hasLocalPart()) { Text( text = remember(nip05State) { AnnotatedString(nip05State.nip05.name) }, fontSize = Font14SP, diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/nip86/RelayManagementScreen.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/nip86/RelayManagementScreen.kt index 531a9d5c3..79a87fffb 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/nip86/RelayManagementScreen.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/relays/nip86/RelayManagementScreen.kt @@ -490,7 +490,7 @@ private fun PubkeyNip05Row( when (val nip05State = nip05StateMetadata) { is Nip05State.Exists -> { - if (nip05State.nip05.name != "_") { + if (nip05State.nip05.hasLocalPart()) { Text( text = remember(nip05State) { AnnotatedString(nip05State.nip05.name) }, fontSize = Font14SP, diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip05DnsIdentifiers/Nip05Id.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip05DnsIdentifiers/Nip05Id.kt index f329a18c5..537210e8f 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip05DnsIdentifiers/Nip05Id.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip05DnsIdentifiers/Nip05Id.kt @@ -36,6 +36,12 @@ data class Nip05Id( */ fun toDisplayValue(): String = if (name == "_") domain else assemble(name, domain) + /** + * False when [name] is the NIP-05 wildcard `"_"`; use to gate rendering of + * the local part when name and domain are shown as separate widgets. + */ + fun hasLocalPart(): Boolean = name != "_" + fun toUserUrl(): String = userUrl(name, domain) fun toDomainUrl(): String = domainUrl(domain) diff --git a/quartz/src/commonTest/kotlin/com/vitorpamplona/quartz/nip05DnsIdentifiers/Nip05Test.kt b/quartz/src/commonTest/kotlin/com/vitorpamplona/quartz/nip05DnsIdentifiers/Nip05Test.kt index 28996c662..238522513 100644 --- a/quartz/src/commonTest/kotlin/com/vitorpamplona/quartz/nip05DnsIdentifiers/Nip05Test.kt +++ b/quartz/src/commonTest/kotlin/com/vitorpamplona/quartz/nip05DnsIdentifiers/Nip05Test.kt @@ -123,6 +123,20 @@ class Nip05Test { assertEquals("example.com", nip05.toDisplayValue()) } + @Test + fun `hasLocalPart is true for regular name`() { + val nip05 = Nip05Id.parse("alice@example.com") + assertNotNull(nip05) + assertEquals(true, nip05.hasLocalPart()) + } + + @Test + fun `hasLocalPart is false for underscore name`() { + val nip05 = Nip05Id.parse("_@example.com") + assertNotNull(nip05) + assertEquals(false, nip05.hasLocalPart()) + } + @Test fun `test json parsing with relays`() { val parsedNip05 = Nip05Id.parse("bob@test.com")