mirror of
https://github.com/Suwayomi/TachideskJUI.git
synced 2025-12-10 06:42:05 +01:00
Add error image when a image fails to load
This commit is contained in:
@@ -8,24 +8,36 @@ package ca.gosyer.jui.uicore.image
|
||||
|
||||
import androidx.compose.animation.core.FiniteAnimationSpec
|
||||
import androidx.compose.animation.core.tween
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.material.Icon
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.BrokenImage
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.ColorFilter
|
||||
import androidx.compose.ui.graphics.DefaultAlpha
|
||||
import androidx.compose.ui.graphics.painter.Painter
|
||||
import androidx.compose.ui.layout.ContentScale
|
||||
import ca.gosyer.jui.uicore.components.ErrorScreen
|
||||
import androidx.compose.ui.unit.dp
|
||||
import ca.gosyer.jui.uicore.components.LoadingScreen
|
||||
import io.kamel.core.Resource
|
||||
import org.lighthousegames.logging.logging
|
||||
import io.kamel.image.KamelImage as BaseKamelImage
|
||||
|
||||
private val log = logging()
|
||||
|
||||
@Composable
|
||||
fun KamelImage(
|
||||
resource: Resource<Painter>,
|
||||
contentDescription: String?,
|
||||
modifier: Modifier = Modifier,
|
||||
errorModifier: Modifier = modifier,
|
||||
alignment: Alignment = Alignment.Center,
|
||||
contentScale: ContentScale = ContentScale.Fit,
|
||||
alpha: Float = DefaultAlpha,
|
||||
@@ -34,7 +46,21 @@ fun KamelImage(
|
||||
LoadingScreen(progress = it, modifier = modifier then Modifier.fillMaxSize())
|
||||
},
|
||||
onFailure: @Composable (Throwable) -> Unit = {
|
||||
ErrorScreen(it.message, modifier = modifier then Modifier.fillMaxSize())
|
||||
LaunchedEffect(it) {
|
||||
log.warn(it) { "Error loading image" }
|
||||
}
|
||||
Box(
|
||||
modifier = errorModifier then Modifier.fillMaxSize()
|
||||
.background(Color(0x1F888888)),
|
||||
contentAlignment = Alignment.Center
|
||||
) {
|
||||
Icon(
|
||||
Icons.Rounded.BrokenImage,
|
||||
contentDescription = null,
|
||||
tint = Color(0x1F888888),
|
||||
modifier = Modifier.size(24.dp)
|
||||
)
|
||||
}
|
||||
},
|
||||
crossfade: Boolean = true,
|
||||
animationSpec: FiniteAnimationSpec<Float> = tween()
|
||||
|
||||
Reference in New Issue
Block a user