From 5bc00f9ffb0b77391d22ffb4d3eb7200a94b2476 Mon Sep 17 00:00:00 2001 From: tapframe <85391825+tapframe@users.noreply.github.com> Date: Tue, 12 May 2026 18:34:00 +0530 Subject: [PATCH 1/3] chore: update coil version --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d260a9e5..597dd1f1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -13,7 +13,7 @@ androidx-lifecycle = "2.11.0-alpha03" androidx-work = "2.10.3" androidx-testExt = "1.3.0" composeMultiplatform = "1.11.0-beta03" -coil = "3.4.0" +coil = "3.5.0-beta01" kermit = "2.0.5" junit = "4.13.2" kotlin = "2.3.0" From 8678660705711e69a360edddf22020fc367a1e06 Mon Sep 17 00:00:00 2001 From: tapframe <85391825+tapframe@users.noreply.github.com> Date: Tue, 12 May 2026 23:27:53 +0530 Subject: [PATCH 2/3] fix: remove duplicate episode title in horizontal cw card --- .../home/components/HomeContinueWatchingSection.kt | 14 -------------- 1 file changed, 14 deletions(-) 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 9bf4d92a..6b953b4e 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 @@ -355,8 +355,6 @@ private fun ContinueWatchingWideCard( .padding(layout.wideContentPadding), verticalArrangement = Arrangement.SpaceBetween, ) { - val isEpisodeCard = item.seasonNumber != null && item.episodeNumber != null - val hasEpisodeTitle = !item.episodeTitle.isNullOrBlank() val wideMetaLine = localizedContinueWatchingSubtitle(item) Column(verticalArrangement = Arrangement.spacedBy(6.dp)) { Row( @@ -389,18 +387,6 @@ private fun ContinueWatchingWideCard( maxLines = 1, overflow = TextOverflow.Ellipsis, ) - if (hasEpisodeTitle) { - Text( - text = item.episodeTitle.orEmpty(), - style = MaterialTheme.typography.bodySmall.copy( - fontSize = layout.wideMetaSize, - fontWeight = FontWeight.Medium, - ), - color = MaterialTheme.colorScheme.onSurfaceVariant, - maxLines = 1, - overflow = TextOverflow.Ellipsis, - ) - } } if (item.progressFraction > 0f) { From 81d643b49b6bd792eb89e6af99df6cb30689f156 Mon Sep 17 00:00:00 2001 From: tapframe <85391825+tapframe@users.noreply.github.com> Date: Tue, 12 May 2026 23:33:39 +0530 Subject: [PATCH 3/3] fix: update continue watching metadata --- .../components/HomeContinueWatchingSection.kt | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) 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 6b953b4e..c7f6e0f6 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 @@ -38,7 +38,6 @@ import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import coil3.compose.AsyncImage -import com.nuvio.app.core.ui.localizedContinueWatchingSubtitle import com.nuvio.app.core.ui.NuvioProgressBar import com.nuvio.app.core.ui.NuvioShelfSection import com.nuvio.app.core.ui.posterCardClickable @@ -51,6 +50,19 @@ import org.jetbrains.compose.resources.stringResource private fun continueWatchingProgressPercent(progressFraction: Float): Int = (progressFraction * 100f).roundToInt().coerceIn(1, 99) +@Composable +private fun localizedContinueWatchingMetaLine(item: ContinueWatchingItem): String = + when { + item.seasonNumber != null && item.episodeNumber != null && item.isNextUp -> + stringResource(Res.string.continue_watching_up_next_episode, item.seasonNumber, item.episodeNumber) + item.seasonNumber != null && item.episodeNumber != null -> + stringResource(Res.string.compose_player_episode_code_full, item.seasonNumber, item.episodeNumber) + item.isNextUp -> + stringResource(Res.string.continue_watching_up_next) + else -> + stringResource(Res.string.media_movie) + } + private fun ContinueWatchingItem.continueWatchingArtworkUrl( useEpisodeThumbnails: Boolean, ): String? = when { @@ -355,7 +367,8 @@ private fun ContinueWatchingWideCard( .padding(layout.wideContentPadding), verticalArrangement = Arrangement.SpaceBetween, ) { - val wideMetaLine = localizedContinueWatchingSubtitle(item) + val wideMetaLine = localizedContinueWatchingMetaLine(item) + val episodeTitle = item.episodeTitle?.trim()?.takeIf { it.isNotBlank() } Column(verticalArrangement = Arrangement.spacedBy(6.dp)) { Row( modifier = Modifier.fillMaxWidth(), @@ -387,6 +400,18 @@ private fun ContinueWatchingWideCard( maxLines = 1, overflow = TextOverflow.Ellipsis, ) + if (episodeTitle != null) { + Text( + text = episodeTitle, + style = MaterialTheme.typography.bodySmall.copy( + fontSize = layout.wideMetaSize, + fontWeight = FontWeight.Medium, + ), + color = MaterialTheme.colorScheme.onSurfaceVariant, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + ) + } } if (item.progressFraction > 0f) {