diff --git a/composeApp/build.gradle.kts b/composeApp/build.gradle.kts index 6326f282f..1744b6b22 100644 --- a/composeApp/build.gradle.kts +++ b/composeApp/build.gradle.kts @@ -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") } diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/App.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/App.kt index 0a8583013..74179d8f1 100644 --- a/composeApp/src/commonMain/kotlin/com/nuvio/app/App.kt +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/App.kt @@ -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() diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/home/HomeScreen.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/home/HomeScreen.kt index 2f6b9bb8c..bcbc4ebfe 100644 --- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/home/HomeScreen.kt +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/home/HomeScreen.kt @@ -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), diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/home/components/HomeContinueWatchingSection.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/home/components/HomeContinueWatchingSection.kt index b19437c8b..292afb191 100644 --- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/home/components/HomeContinueWatchingSection.kt +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/home/components/HomeContinueWatchingSection.kt @@ -290,7 +290,11 @@ private fun HomeContinueWatchingSectionContent( key(dataSourceKey) { val disintegration = remember { ScopedDisintegrationTracker( - 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) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 391e4cc82..3c8c1c38c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -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" }