Stabilize in progress items and add coil cache control

This commit is contained in:
skoruppa 2026-08-04 09:21:58 +02:00
parent ae5c8f74ca
commit 989580e589
5 changed files with 20 additions and 3 deletions

View file

@ -434,6 +434,9 @@ kotlin {
implementation("io.coil-kt.coil3:coil-network-ktor3:${libs.versions.coil.get()}") {
exclude(group = "org.jetbrains.skiko", module = "skiko")
}
implementation("io.coil-kt.coil3:coil-network-cache-control:${libs.versions.coil.get()}") {
exclude(group = "org.jetbrains.skiko", module = "skiko")
}
implementation("io.coil-kt.coil3:coil-svg:${libs.versions.coil.get()}") {
exclude(group = "org.jetbrains.skiko", module = "skiko")
}

View file

@ -446,6 +446,11 @@ fun App(
.memoryCachePolicy(CachePolicy.ENABLED)
.components {
add(SvgDecoder.Factory())
add(
coil3.network.ktor3.KtorNetworkFetcherFactory(
cacheStrategy = { coil3.network.cachecontrol.CacheControlCacheStrategy() },
)
)
}
.configurePlatformImageLoader()
.build()

View file

@ -1796,12 +1796,16 @@ private fun ContinueWatchingItem.withFallbackMetadata(
hasPlaceholderHomeTitle() && fallbackTitle != null -> fallbackTitle
else -> title
},
subtitle = subtitle.takeIf { it.isNotBlank() }
?: fallback?.subtitle?.takeIf { it.isNotBlank() }.orEmpty(),
subtitle = when {
subtitle.isBlank() -> fallback?.subtitle?.takeIf { it.isNotBlank() }.orEmpty()
fallback?.subtitle.isNullOrBlank() -> subtitle
else -> fallback.subtitle
},
imageUrl = imageUrl.orNonBlank(fallback?.imageUrl),
logo = logo.orNonBlank(fallback?.logo),
poster = poster.orNonBlank(fallback?.poster),
background = background.orNonBlank(fallback?.background),
videoId = fallback?.videoId?.takeIf { it.isNotBlank() } ?: videoId,
episodeTitle = episodeTitle.orNonBlank(fallback?.episodeTitle),
episodeThumbnail = episodeThumbnail.orNonBlank(fallback?.episodeThumbnail),
pauseDescription = pauseDescription.orNonBlank(fallback?.pauseDescription),

View file

@ -290,7 +290,11 @@ private fun HomeContinueWatchingSectionContent(
key(dataSourceKey) {
val disintegration = remember {
ScopedDisintegrationTracker<WatchProgressSource, String, ContinueWatchingItem>(
itemKey = ContinueWatchingItem::videoId,
itemKey = { item ->
val season = item.seasonNumber ?: -1
val episode = item.episodeNumber ?: -1
"${item.parentMetaId}:$season:$episode"
},
)
}
val displayEntries = disintegration.sync(dataSourceKey, items)

View file

@ -59,6 +59,7 @@ compottie = { module = "io.github.alexzhirkevich:compottie", version.ref = "comp
coil-compose = { module = "io.coil-kt.coil3:coil-compose", version.ref = "coil" }
coil-gif = { module = "io.coil-kt.coil3:coil-gif", version.ref = "coil" }
coil-network-ktor3 = { module = "io.coil-kt.coil3:coil-network-ktor3", version.ref = "coil" }
coil-network-cache-control = { module = "io.coil-kt.coil3:coil-network-cache-control", version.ref = "coil" }
coil-svg = { module = "io.coil-kt.coil3:coil-svg", version.ref = "coil" }
kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinx-serialization" }
kotlinx-atomicfu = { module = "org.jetbrains.kotlinx:atomicfu", version.ref = "atomicfu" }