Use Base64Requester
This commit is contained in:
@@ -20,7 +20,6 @@
|
|||||||
*/
|
*/
|
||||||
package com.vitorpamplona.amethyst.ui.components
|
package com.vitorpamplona.amethyst.ui.components
|
||||||
|
|
||||||
import android.util.Base64
|
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.border
|
import androidx.compose.foundation.border
|
||||||
import androidx.compose.foundation.clickable
|
import androidx.compose.foundation.clickable
|
||||||
@@ -71,7 +70,6 @@ import androidx.lifecycle.viewmodel.compose.viewModel
|
|||||||
import coil.compose.AsyncImagePainter
|
import coil.compose.AsyncImagePainter
|
||||||
import coil.compose.SubcomposeAsyncImage
|
import coil.compose.SubcomposeAsyncImage
|
||||||
import coil.compose.SubcomposeAsyncImageContent
|
import coil.compose.SubcomposeAsyncImageContent
|
||||||
import coil.request.ImageRequest
|
|
||||||
import com.vitorpamplona.amethyst.commons.compose.produceCachedState
|
import com.vitorpamplona.amethyst.commons.compose.produceCachedState
|
||||||
import com.vitorpamplona.amethyst.commons.richtext.Base64Segment
|
import com.vitorpamplona.amethyst.commons.richtext.Base64Segment
|
||||||
import com.vitorpamplona.amethyst.commons.richtext.BechSegment
|
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.LinkSegment
|
||||||
import com.vitorpamplona.amethyst.commons.richtext.PhoneSegment
|
import com.vitorpamplona.amethyst.commons.richtext.PhoneSegment
|
||||||
import com.vitorpamplona.amethyst.commons.richtext.RegularTextSegment
|
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.RichTextViewerState
|
||||||
import com.vitorpamplona.amethyst.commons.richtext.SchemelessUrlSegment
|
import com.vitorpamplona.amethyst.commons.richtext.SchemelessUrlSegment
|
||||||
import com.vitorpamplona.amethyst.commons.richtext.Segment
|
import com.vitorpamplona.amethyst.commons.richtext.Segment
|
||||||
@@ -455,34 +452,18 @@ private fun RenderWordWithPreview(
|
|||||||
fun ImageFromBase64(base64String: String) {
|
fun ImageFromBase64(base64String: String) {
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
|
|
||||||
var base64String2 = base64String.removePrefix("data:image/jpeg;base64,")
|
SubcomposeAsyncImage(
|
||||||
RichTextParser.imageExtensions.forEach {
|
model = Base64Requester.imageRequest(context, base64String),
|
||||||
base64String2 = base64String2.removePrefix("data:image/$it;base64,")
|
contentDescription = null,
|
||||||
}
|
contentScale = ContentScale.FillWidth,
|
||||||
|
modifier = Modifier.fillMaxWidth(),
|
||||||
val imageBytes = runCatching { Base64.decode(base64String2, Base64.DEFAULT) }.getOrNull()
|
) {
|
||||||
|
when (painter.state) {
|
||||||
if (imageBytes == null) {
|
is AsyncImagePainter.State.Success -> {
|
||||||
BlankNote()
|
SubcomposeAsyncImageContent()
|
||||||
} 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()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else -> BlankNote()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-1
@@ -48,6 +48,7 @@ import coil.fetch.FetchResult
|
|||||||
import coil.fetch.Fetcher
|
import coil.fetch.Fetcher
|
||||||
import coil.request.ImageRequest
|
import coil.request.ImageRequest
|
||||||
import coil.request.Options
|
import coil.request.Options
|
||||||
|
import com.vitorpamplona.amethyst.commons.richtext.RichTextParser
|
||||||
import com.vitorpamplona.amethyst.commons.robohash.CachedRobohash
|
import com.vitorpamplona.amethyst.commons.robohash.CachedRobohash
|
||||||
import com.vitorpamplona.amethyst.service.checkNotInMainThread
|
import com.vitorpamplona.amethyst.service.checkNotInMainThread
|
||||||
import com.vitorpamplona.amethyst.ui.theme.isLight
|
import com.vitorpamplona.amethyst.ui.theme.isLight
|
||||||
@@ -182,7 +183,10 @@ class Base64Fetcher(
|
|||||||
override suspend fun fetch(): FetchResult {
|
override suspend fun fetch(): FetchResult {
|
||||||
checkNotInMainThread()
|
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 byteArray = Base64.getDecoder().decode(base64String)
|
||||||
val bitmap = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.size)
|
val bitmap = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.size)
|
||||||
|
|||||||
Reference in New Issue
Block a user