diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/RichTextViewer.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/RichTextViewer.kt index b86990d5c..832a68f95 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/RichTextViewer.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/RichTextViewer.kt @@ -20,7 +20,6 @@ */ package com.vitorpamplona.amethyst.ui.components -import android.util.Base64 import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.clickable @@ -71,7 +70,6 @@ import androidx.lifecycle.viewmodel.compose.viewModel import coil.compose.AsyncImagePainter import coil.compose.SubcomposeAsyncImage import coil.compose.SubcomposeAsyncImageContent -import coil.request.ImageRequest import com.vitorpamplona.amethyst.commons.compose.produceCachedState import com.vitorpamplona.amethyst.commons.richtext.Base64Segment import com.vitorpamplona.amethyst.commons.richtext.BechSegment @@ -86,7 +84,6 @@ import com.vitorpamplona.amethyst.commons.richtext.InvoiceSegment import com.vitorpamplona.amethyst.commons.richtext.LinkSegment import com.vitorpamplona.amethyst.commons.richtext.PhoneSegment import com.vitorpamplona.amethyst.commons.richtext.RegularTextSegment -import com.vitorpamplona.amethyst.commons.richtext.RichTextParser import com.vitorpamplona.amethyst.commons.richtext.RichTextViewerState import com.vitorpamplona.amethyst.commons.richtext.SchemelessUrlSegment import com.vitorpamplona.amethyst.commons.richtext.Segment @@ -455,34 +452,18 @@ private fun RenderWordWithPreview( fun ImageFromBase64(base64String: String) { val context = LocalContext.current - var base64String2 = base64String.removePrefix("data:image/jpeg;base64,") - RichTextParser.imageExtensions.forEach { - base64String2 = base64String2.removePrefix("data:image/$it;base64,") - } - - val imageBytes = runCatching { Base64.decode(base64String2, Base64.DEFAULT) }.getOrNull() - - if (imageBytes == null) { - BlankNote() - } else { - val request = - ImageRequest.Builder(context) - .data(imageBytes) - .build() - - SubcomposeAsyncImage( - model = request, - contentDescription = null, - contentScale = ContentScale.FillWidth, - modifier = Modifier.fillMaxWidth(), - ) { - when (painter.state) { - is AsyncImagePainter.State.Success -> { - SubcomposeAsyncImageContent() - } - - else -> BlankNote() + SubcomposeAsyncImage( + model = Base64Requester.imageRequest(context, base64String), + contentDescription = null, + contentScale = ContentScale.FillWidth, + modifier = Modifier.fillMaxWidth(), + ) { + when (painter.state) { + is AsyncImagePainter.State.Success -> { + SubcomposeAsyncImageContent() } + + else -> BlankNote() } } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/RobohashAsyncImage.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/RobohashAsyncImage.kt index 1970fee3c..a1de28941 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/RobohashAsyncImage.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/RobohashAsyncImage.kt @@ -48,6 +48,7 @@ import coil.fetch.FetchResult import coil.fetch.Fetcher import coil.request.ImageRequest import coil.request.Options +import com.vitorpamplona.amethyst.commons.richtext.RichTextParser import com.vitorpamplona.amethyst.commons.robohash.CachedRobohash import com.vitorpamplona.amethyst.service.checkNotInMainThread import com.vitorpamplona.amethyst.ui.theme.isLight @@ -182,7 +183,10 @@ class Base64Fetcher( override suspend fun fetch(): FetchResult { checkNotInMainThread() - val base64String = data.toString().removePrefix("data:image/jpeg;base64,") + var base64String = data.toString().removePrefix("data:image/jpeg;base64,") + RichTextParser.imageExtensions.forEach { + base64String = base64String.removePrefix("data:image/$it;base64,") + } val byteArray = Base64.getDecoder().decode(base64String) val bitmap = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.size)