From f5189698756d287bbcad71a34a4ca82b1a303aba Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Mon, 27 Feb 2023 13:39:55 -0500 Subject: [PATCH] Moves Preview and NIP05 verification to IO Threads --- .../amethyst/ui/components/UrlPreview.kt | 26 ++++++---- .../ui/note/NIP05VerificationDisplay.kt | 52 ++++++++++--------- 2 files changed, 43 insertions(+), 35 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/UrlPreview.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/UrlPreview.kt index 3bf1ef47c..8b15315a0 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/UrlPreview.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/UrlPreview.kt @@ -11,6 +11,8 @@ import androidx.compose.runtime.setValue import com.baha.url.preview.IUrlPreviewCallback import com.baha.url.preview.UrlInfoItem import com.vitorpamplona.amethyst.model.UrlCachedPreviewer +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext @Composable @@ -19,18 +21,20 @@ fun UrlPreview(url: String, urlText: String, showUrlIfError: Boolean = true) { // Doesn't use a viewModel because of viewModel reusing issues (too many UrlPreview are created). LaunchedEffect(url) { - UrlCachedPreviewer.previewInfo(url, object : IUrlPreviewCallback { - override fun onComplete(urlInfo: UrlInfoItem) { - if (urlInfo.allFetchComplete() && urlInfo.url == url) - urlPreviewState = UrlPreviewState.Loaded(urlInfo) - else - urlPreviewState = UrlPreviewState.Empty - } + withContext(Dispatchers.IO) { + UrlCachedPreviewer.previewInfo(url, object : IUrlPreviewCallback { + override fun onComplete(urlInfo: UrlInfoItem) { + if (urlInfo.allFetchComplete() && urlInfo.url == url) + urlPreviewState = UrlPreviewState.Loaded(urlInfo) + else + urlPreviewState = UrlPreviewState.Empty + } - override fun onFailed(throwable: Throwable) { - urlPreviewState = UrlPreviewState.Error("Error parsing preview for ${url}: ${throwable.message}") - } - }) + override fun onFailed(throwable: Throwable) { + urlPreviewState = UrlPreviewState.Error("Error parsing preview for ${url}: ${throwable.message}") + } + }) + } } Crossfade(targetState = urlPreviewState, animationSpec = tween(durationMillis = 100)) { state -> 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 98ea3a5b5..906dd516e 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 @@ -33,42 +33,46 @@ import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.amethyst.model.UserMetadata import com.vitorpamplona.amethyst.ui.theme.Nip05 import java.util.Date +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext @Composable fun nip05VerificationAsAState(user: UserMetadata, pubkeyHex: String): State { - var nip05Verified = remember { mutableStateOf(null) } + var nip05Verified = remember { mutableStateOf(null) } LaunchedEffect(key1 = user) { - user.nip05?.ifBlank { null }?.let { nip05 -> - val now = Date().time / 1000 - if ((user.nip05LastVerificationTime ?: 0) > (now - 60 * 60)) { // 1hour - nip05Verified.value = user.nip05Verified - } else { - Nip05Verifier().verifyNip05( - nip05, - onSuccess = { - // Marks user as verified - if (it == pubkeyHex) { - user.nip05Verified = true - user.nip05LastVerificationTime = now - nip05Verified.value = true - } else { - user.nip05Verified = false + 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 { + Nip05Verifier().verifyNip05( + nip05, + onSuccess = { + // Marks user as verified + if (it == pubkeyHex) { + user.nip05Verified = true + user.nip05LastVerificationTime = now + nip05Verified.value = true + } else { + user.nip05Verified = false + user.nip05LastVerificationTime = 0 + nip05Verified.value = false + } + }, + onError = { user.nip05LastVerificationTime = 0 + user.nip05Verified = false nip05Verified.value = false } - }, - onError = { - user.nip05LastVerificationTime = 0 - user.nip05Verified = false - nip05Verified.value = false - } - ) + ) + } } } } - return nip05Verified + return nip05Verified } @Composable