refactor: update image handling in Episode dto to use imageUrlPrefix and JellyfinImageHelper

This commit is contained in:
2026-04-01 22:49:37 +02:00
parent 98850087ff
commit 680df51ce7
20 changed files with 52 additions and 35 deletions

View File

@@ -101,7 +101,7 @@ class EpisodeScreenContentTest {
progress = progress,
watched = false,
format = "4K",
heroImageUrl = "https://images.unsplash.com/photo-1500530855697-b586d89ba3ee",
imageUrlPrefix = "https://images.unsplash.com/photo-1500530855697-b586d89ba3ee",
cast = listOf(
CastMember("Adam Scott", "Mark Scout", null)
)

View File

@@ -117,7 +117,7 @@ class SeriesScreenContentTest {
progress = 18.0,
watched = false,
format = "4K",
heroImageUrl = "https://images.unsplash.com/photo-1500530855697-b586d89ba3ee",
imageUrlPrefix = "https://images.unsplash.com/photo-1500530855697-b586d89ba3ee",
cast = emptyList()
),
Episode(
@@ -133,7 +133,7 @@ class SeriesScreenContentTest {
progress = null,
watched = false,
format = "4K",
heroImageUrl = "https://images.unsplash.com/photo-1500530855697-b586d89ba3ee",
imageUrlPrefix = "https://images.unsplash.com/photo-1500530855697-b586d89ba3ee",
cast = emptyList()
)
)

View File

@@ -19,12 +19,14 @@ import hu.bbara.purefin.common.ui.components.MediaDetailOverviewSection
import hu.bbara.purefin.common.ui.components.MediaDetailPlaybackSection
import hu.bbara.purefin.common.ui.components.MediaDetailSectionTitle
import hu.bbara.purefin.common.ui.components.TvMediaDetailScaffold
import hu.bbara.purefin.core.data.image.JellyfinImageHelper
import hu.bbara.purefin.core.data.navigation.EpisodeDto
import hu.bbara.purefin.core.data.navigation.LocalNavigationBackStack
import hu.bbara.purefin.core.data.navigation.LocalNavigationManager
import hu.bbara.purefin.core.data.navigation.Route
import hu.bbara.purefin.core.model.Episode
import hu.bbara.purefin.feature.shared.content.episode.EpisodeScreenViewModel
import org.jellyfin.sdk.model.api.ImageType
@Composable
fun EpisodeScreen(
@@ -91,7 +93,7 @@ internal fun EpisodeScreenContent(
}
TvMediaDetailScaffold(
heroImageUrl = episode.heroImageUrl,
heroImageUrl = JellyfinImageHelper.finishImageUrl(episode.imageUrlPrefix, ImageType.PRIMARY),
resetScrollKey = episode.id,
modifier = modifier,
topBar = {

View File

@@ -60,11 +60,13 @@ import hu.bbara.purefin.common.ui.components.MediaProgressBar
import hu.bbara.purefin.common.ui.components.MediaResumeButton
import hu.bbara.purefin.common.ui.components.PurefinAsyncImage
import hu.bbara.purefin.common.ui.components.WatchStateIndicator
import hu.bbara.purefin.core.data.image.JellyfinImageHelper
import hu.bbara.purefin.core.model.CastMember
import hu.bbara.purefin.core.model.Episode
import hu.bbara.purefin.core.model.Season
import hu.bbara.purefin.core.model.Series
import hu.bbara.purefin.feature.shared.content.series.SeriesViewModel
import org.jellyfin.sdk.model.api.ImageType
internal const val SeriesPlayButtonTag = "series-play-button"
internal const val SeriesFirstSeasonTabTag = "series-first-season-tab"
@@ -310,7 +312,7 @@ private fun EpisodeCard(
)
) {
PurefinAsyncImage(
model = episode.heroImageUrl,
model = JellyfinImageHelper.finishImageUrl(episode.imageUrlPrefix, ImageType.PRIMARY),
contentDescription = null,
modifier = Modifier.fillMaxSize(),
contentScale = ContentScale.Crop

View File

@@ -93,7 +93,10 @@ fun TvContinueWatchingCard(
prefixImageUrl = item.movie?.imageUrlPrefix,
imageType = ImageType.PRIMARY
)
BaseItemKind.EPISODE -> item.episode?.heroImageUrl
BaseItemKind.EPISODE -> JellyfinImageHelper.finishImageUrl(
prefixImageUrl = item.episode?.imageUrlPrefix,
imageType = ImageType.PRIMARY
)
else -> null
}
@@ -216,7 +219,7 @@ fun TvNextUpCard(
var isFocused by remember { mutableStateOf(false) }
val scale by animateFloatAsState(targetValue = if (isFocused) 1.07f else 1.0f, label = "scale")
val imageUrl = item.episode.heroImageUrl
val imageUrl = JellyfinImageHelper.finishImageUrl(item.episode.imageUrlPrefix, ImageType.PRIMARY)
val cardWidth = 280.dp