Moves Preview and NIP05 verification to IO Threads

This commit is contained in:
Vitor Pamplona
2023-02-27 13:39:55 -05:00
parent 1a7ecca89a
commit f518969875
2 changed files with 43 additions and 35 deletions
@@ -11,6 +11,8 @@ import androidx.compose.runtime.setValue
import com.baha.url.preview.IUrlPreviewCallback import com.baha.url.preview.IUrlPreviewCallback
import com.baha.url.preview.UrlInfoItem import com.baha.url.preview.UrlInfoItem
import com.vitorpamplona.amethyst.model.UrlCachedPreviewer import com.vitorpamplona.amethyst.model.UrlCachedPreviewer
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
@Composable @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). // Doesn't use a viewModel because of viewModel reusing issues (too many UrlPreview are created).
LaunchedEffect(url) { LaunchedEffect(url) {
UrlCachedPreviewer.previewInfo(url, object : IUrlPreviewCallback { withContext(Dispatchers.IO) {
override fun onComplete(urlInfo: UrlInfoItem) { UrlCachedPreviewer.previewInfo(url, object : IUrlPreviewCallback {
if (urlInfo.allFetchComplete() && urlInfo.url == url) override fun onComplete(urlInfo: UrlInfoItem) {
urlPreviewState = UrlPreviewState.Loaded(urlInfo) if (urlInfo.allFetchComplete() && urlInfo.url == url)
else urlPreviewState = UrlPreviewState.Loaded(urlInfo)
urlPreviewState = UrlPreviewState.Empty else
} urlPreviewState = UrlPreviewState.Empty
}
override fun onFailed(throwable: Throwable) { override fun onFailed(throwable: Throwable) {
urlPreviewState = UrlPreviewState.Error("Error parsing preview for ${url}: ${throwable.message}") urlPreviewState = UrlPreviewState.Error("Error parsing preview for ${url}: ${throwable.message}")
} }
}) })
}
} }
Crossfade(targetState = urlPreviewState, animationSpec = tween(durationMillis = 100)) { state -> Crossfade(targetState = urlPreviewState, animationSpec = tween(durationMillis = 100)) { state ->
@@ -33,42 +33,46 @@ import com.vitorpamplona.amethyst.model.User
import com.vitorpamplona.amethyst.model.UserMetadata import com.vitorpamplona.amethyst.model.UserMetadata
import com.vitorpamplona.amethyst.ui.theme.Nip05 import com.vitorpamplona.amethyst.ui.theme.Nip05
import java.util.Date import java.util.Date
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
@Composable @Composable
fun nip05VerificationAsAState(user: UserMetadata, pubkeyHex: String): State<Boolean?> { fun nip05VerificationAsAState(user: UserMetadata, pubkeyHex: String): State<Boolean?> {
var nip05Verified = remember { mutableStateOf<Boolean?>(null) } var nip05Verified = remember { mutableStateOf<Boolean?>(null) }
LaunchedEffect(key1 = user) { LaunchedEffect(key1 = user) {
user.nip05?.ifBlank { null }?.let { nip05 -> withContext(Dispatchers.IO) {
val now = Date().time / 1000 user.nip05?.ifBlank { null }?.let { nip05 ->
if ((user.nip05LastVerificationTime ?: 0) > (now - 60 * 60)) { // 1hour val now = Date().time / 1000
nip05Verified.value = user.nip05Verified if ((user.nip05LastVerificationTime ?: 0) > (now - 60 * 60)) { // 1hour
} else { nip05Verified.value = user.nip05Verified
Nip05Verifier().verifyNip05( } else {
nip05, Nip05Verifier().verifyNip05(
onSuccess = { nip05,
// Marks user as verified onSuccess = {
if (it == pubkeyHex) { // Marks user as verified
user.nip05Verified = true if (it == pubkeyHex) {
user.nip05LastVerificationTime = now user.nip05Verified = true
nip05Verified.value = true user.nip05LastVerificationTime = now
} else { nip05Verified.value = true
user.nip05Verified = false } else {
user.nip05Verified = false
user.nip05LastVerificationTime = 0
nip05Verified.value = false
}
},
onError = {
user.nip05LastVerificationTime = 0 user.nip05LastVerificationTime = 0
user.nip05Verified = false
nip05Verified.value = false nip05Verified.value = false
} }
}, )
onError = { }
user.nip05LastVerificationTime = 0
user.nip05Verified = false
nip05Verified.value = false
}
)
} }
} }
} }
return nip05Verified return nip05Verified
} }
@Composable @Composable