refactor: add backdropImageUrl to MediaUiModel for improved image handling

This commit is contained in:
2026-04-19 20:14:19 +02:00
parent a0086c6f62
commit 2c5585417a
2 changed files with 47 additions and 13 deletions

View File

@@ -45,7 +45,7 @@ internal fun TvFocusedItemHero(
.background(scheme.background) .background(scheme.background)
) { ) {
Crossfade( Crossfade(
targetState = item.primaryImageUrl, targetState = item.backdropImageUrl,
animationSpec = tween(durationMillis = TvHomeHeroAnimationMillis), animationSpec = tween(durationMillis = TvHomeHeroAnimationMillis),
label = "tv-home-hero-background" label = "tv-home-hero-background"
) { imageUrl -> ) { imageUrl ->

View File

@@ -13,6 +13,7 @@ sealed interface MediaUiModel {
val secondaryText: String val secondaryText: String
val description: String val description: String
val primaryImageUrl: String val primaryImageUrl: String
val backdropImageUrl: String
val progress: Float? val progress: Float?
get() = null get() = null
val watched: Boolean val watched: Boolean
@@ -24,7 +25,21 @@ class MovieUiModel: MediaUiModel {
override val primaryText: String override val primaryText: String
override val secondaryText: String override val secondaryText: String
override val description: String override val description: String
private val prefixImageUrl: String
override val primaryImageUrl: String override val primaryImageUrl: String
get() {
return ImageUrlBuilder.finishImageUrl(
prefixImageUrl = prefixImageUrl,
artworkKind = ArtworkKind.PRIMARY
)
}
override val backdropImageUrl: String
get() {
return ImageUrlBuilder.finishImageUrl(
prefixImageUrl = prefixImageUrl,
artworkKind = ArtworkKind.BACKDROP
)
}
override val progress: Float? override val progress: Float?
constructor(movie: Movie) { constructor(movie: Movie) {
@@ -32,10 +47,7 @@ class MovieUiModel: MediaUiModel {
primaryText = movie.title primaryText = movie.title
secondaryText = movie.year secondaryText = movie.year
description = movie.synopsis description = movie.synopsis
primaryImageUrl = ImageUrlBuilder.finishImageUrl( prefixImageUrl = movie.imageUrlPrefix
prefixImageUrl = movie.imageUrlPrefix,
artworkKind = ArtworkKind.PRIMARY
)
progress = (movie.progress?.toFloat() ?: 0f) / 100f progress = (movie.progress?.toFloat() ?: 0f) / 100f
} }
@@ -68,17 +80,28 @@ class SeriesUiModel : MediaUiModel {
override val primaryText: String override val primaryText: String
override val secondaryText: String override val secondaryText: String
override val description: String override val description: String
private val prefixImageUrl: String
override val primaryImageUrl: String override val primaryImageUrl: String
get() {
return ImageUrlBuilder.finishImageUrl(
prefixImageUrl = prefixImageUrl,
artworkKind = ArtworkKind.PRIMARY
)
}
override val backdropImageUrl: String
get() {
return ImageUrlBuilder.finishImageUrl(
prefixImageUrl = prefixImageUrl,
artworkKind = ArtworkKind.BACKDROP
)
}
constructor(series: Series) { constructor(series: Series) {
id = series.id id = series.id
primaryText = series.name primaryText = series.name
secondaryText = "${series.seasonCount} seasons" secondaryText = "${series.seasonCount} seasons"
description = series.synopsis description = series.synopsis
primaryImageUrl = ImageUrlBuilder.finishImageUrl( prefixImageUrl = series.imageUrlPrefix
prefixImageUrl = series.imageUrlPrefix,
artworkKind = ArtworkKind.PRIMARY
)
} }
} }
@@ -87,7 +110,21 @@ class EpisodeUiModel : MediaUiModel {
override val primaryText: String override val primaryText: String
override val secondaryText: String override val secondaryText: String
override val description: String override val description: String
private val prefixImageUrl: String
override val primaryImageUrl: String override val primaryImageUrl: String
get() {
return ImageUrlBuilder.finishImageUrl(
prefixImageUrl = prefixImageUrl,
artworkKind = ArtworkKind.PRIMARY
)
}
override val backdropImageUrl: String
get() {
return ImageUrlBuilder.finishImageUrl(
prefixImageUrl = prefixImageUrl,
artworkKind = ArtworkKind.PRIMARY
)
}
override val progress: Float? override val progress: Float?
val seriesId: UUID val seriesId: UUID
val seasonId: UUID val seasonId: UUID
@@ -97,10 +134,7 @@ class EpisodeUiModel : MediaUiModel {
primaryText = episode.title primaryText = episode.title
secondaryText = episode.releaseDate secondaryText = episode.releaseDate
description = episode.synopsis description = episode.synopsis
primaryImageUrl = ImageUrlBuilder.finishImageUrl( prefixImageUrl = episode.imageUrlPrefix
prefixImageUrl = episode.imageUrlPrefix,
artworkKind = ArtworkKind.PRIMARY
)
progress = (episode.progress?.toFloat() ?: 0f) / 100f progress = (episode.progress?.toFloat() ?: 0f) / 100f
seriesId = episode.seriesId seriesId = episode.seriesId
seasonId = episode.seasonId seasonId = episode.seasonId