From 93282b71aee4030a5b6532cc5583260c08b2253e Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Mon, 22 May 2023 15:07:47 -0400 Subject: [PATCH] Optimizes NIP-05 procedures --- .../ui/note/NIP05VerificationDisplay.kt | 51 ++++++++++++------- 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NIP05VerificationDisplay.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NIP05VerificationDisplay.kt index 31dc03ec1..defb4810d 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NIP05VerificationDisplay.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NIP05VerificationDisplay.kt @@ -39,33 +39,48 @@ import java.util.Date @Composable fun nip05VerificationAsAState(user: UserMetadata, pubkeyHex: String): State { - var nip05Verified = remember { mutableStateOf(null) } + val nip05Verified = remember(user) { + // starts with null if must verify or already filled in if verified in the last hour + val default = if ((user.nip05LastVerificationTime ?: 0) > (Date().time / 1000 - 60 * 60)) { // 1hour + user.nip05Verified + } else { + null + } + + mutableStateOf(default) + } LaunchedEffect(key1 = user) { - withContext(Dispatchers.IO) { - user.nip05?.ifBlank { null }?.let { nip05 -> - val now = Date().time / 1000 - if ((user.nip05LastVerificationTime ?: 0) > (now - 60 * 60)) { // 1hour - nip05Verified.value = user.nip05Verified - } else { + if (nip05Verified.value == null) { + withContext(Dispatchers.IO) { + user.nip05?.ifBlank { null }?.let { nip05 -> Nip05Verifier().verifyNip05( nip05, onSuccess = { // Marks user as verified if (it == pubkeyHex) { user.nip05Verified = true - user.nip05LastVerificationTime = now - nip05Verified.value = true + user.nip05LastVerificationTime = Date().time / 1000 + + if (nip05Verified.value != true) { + nip05Verified.value = true + } } else { user.nip05Verified = false user.nip05LastVerificationTime = 0 - nip05Verified.value = false + + if (nip05Verified.value != false) { + nip05Verified.value = false + } } }, onError = { user.nip05LastVerificationTime = 0 user.nip05Verified = false - nip05Verified.value = false + + if (nip05Verified.value != false) { + nip05Verified.value = false + } } ) } @@ -90,16 +105,14 @@ fun ObserveDisplayNip05Status(baseNote: Note, columnModifier: Modifier = Modifie @Composable fun ObserveDisplayNip05Status(baseUser: User, columnModifier: Modifier = Modifier) { val userState by baseUser.live().metadata.observeAsState() - val user = userState?.user ?: return + val user = remember(userState) { userState?.user } ?: return + val parts = remember(userState) { userState?.user?.nip05()?.split("@") } ?: return - user.nip05()?.let { nip05 -> - val parts = nip05.split("@") - if (parts.size == 2) { - val nip05Verified by nip05VerificationAsAState(user.info!!, user.pubkeyHex) + if (parts.size == 2) { + val nip05Verified by nip05VerificationAsAState(user.info!!, user.pubkeyHex) - Column(modifier = columnModifier) { - DisplayNIP05(parts[0], parts[1], nip05Verified) - } + Column(modifier = columnModifier) { + DisplayNIP05(parts[0], parts[1], nip05Verified) } } }