mirror of
https://github.com/tapframe/NuvioStreaming.git
synced 2026-05-04 17:29:07 +00:00
fix: update videoID handling in cw
This commit is contained in:
parent
21aed96e3d
commit
47ed75d951
7 changed files with 31 additions and 22 deletions
|
|
@ -845,8 +845,7 @@ private fun MainAppContent(
|
|||
}
|
||||
}
|
||||
val shouldResolveEpisodeVideoId =
|
||||
route.type == "series" &&
|
||||
route.parentMetaId != null &&
|
||||
route.parentMetaId != null &&
|
||||
route.seasonNumber != null &&
|
||||
route.episodeNumber != null
|
||||
var effectiveVideoId by rememberSaveable(
|
||||
|
|
|
|||
|
|
@ -459,7 +459,7 @@ fun MetaDetailsScreen(
|
|||
fallbackVideoId = video.id,
|
||||
)
|
||||
val streamVideoId = video.id.takeIf { it.isNotBlank() } ?: playbackVideoId
|
||||
val savedProgress = watchProgressUiState.byVideoId[playbackVideoId]
|
||||
val savedProgress = watchProgressUiState.byVideoId[streamVideoId]
|
||||
?.takeUnless { it.isCompleted }
|
||||
onPlay?.invoke(
|
||||
meta.type,
|
||||
|
|
@ -488,7 +488,7 @@ fun MetaDetailsScreen(
|
|||
fallbackVideoId = video.id,
|
||||
)
|
||||
val streamVideoId = video.id.takeIf { it.isNotBlank() } ?: playbackVideoId
|
||||
val savedProgress = watchProgressUiState.byVideoId[playbackVideoId]
|
||||
val savedProgress = watchProgressUiState.byVideoId[streamVideoId]
|
||||
?.takeUnless { it.isCompleted }
|
||||
onPlayManually?.invoke(
|
||||
meta.type,
|
||||
|
|
|
|||
|
|
@ -255,7 +255,7 @@ fun PlayerScreen(
|
|||
contentType = contentType ?: parentMetaType,
|
||||
parentMetaId = parentMetaId,
|
||||
parentMetaType = parentMetaType,
|
||||
videoId = buildPlaybackVideoId(
|
||||
videoId = activeVideoId?.takeIf { it.isNotBlank() } ?: buildPlaybackVideoId(
|
||||
parentMetaId = parentMetaId,
|
||||
seasonNumber = activeSeasonNumber,
|
||||
episodeNumber = activeEpisodeNumber,
|
||||
|
|
@ -567,7 +567,9 @@ fun PlayerScreen(
|
|||
episodeNumber = episode.episode,
|
||||
fallbackVideoId = epVideoId,
|
||||
)
|
||||
val epEntry = WatchProgressRepository.progressForVideo(epResumeVideoId)
|
||||
val epEntry = WatchProgressRepository.progressForVideo(
|
||||
epVideoId.takeIf { it.isNotBlank() } ?: epResumeVideoId,
|
||||
)
|
||||
?.takeIf { !it.isCompleted }
|
||||
val epResumeFraction = epEntry?.progressPercent
|
||||
?.takeIf { it > 0f }
|
||||
|
|
|
|||
|
|
@ -107,22 +107,10 @@ fun StreamsScreen(
|
|||
}.collectAsStateWithLifecycle()
|
||||
val isEpisode = seasonNumber != null && episodeNumber != null
|
||||
var preferredFilterApplied by remember(videoId) { mutableStateOf(false) }
|
||||
val legacyEpisodeVideoId = remember(type, parentMetaId, seasonNumber, episodeNumber, videoId) {
|
||||
if (type == "series" && seasonNumber != null && episodeNumber != null) {
|
||||
buildPlaybackVideoId(
|
||||
parentMetaId = parentMetaId,
|
||||
seasonNumber = seasonNumber,
|
||||
episodeNumber = episodeNumber,
|
||||
).takeIf { it != videoId }
|
||||
} else {
|
||||
null
|
||||
}
|
||||
}
|
||||
val storedProgress = if (startFromBeginning) {
|
||||
null
|
||||
} else {
|
||||
watchProgressUiState.byVideoId[videoId]
|
||||
?: legacyEpisodeVideoId?.let { legacyId -> watchProgressUiState.byVideoId[legacyId] }
|
||||
}
|
||||
val storedProgressFraction = storedProgress?.progressPercent
|
||||
?.takeIf { it > 0f }
|
||||
|
|
|
|||
|
|
@ -244,7 +244,7 @@ internal fun WatchProgressEntry.toUpNextContinueWatchingItem(
|
|||
return ContinueWatchingItem(
|
||||
parentMetaId = parentMetaId,
|
||||
parentMetaType = parentMetaType,
|
||||
videoId = buildPlaybackVideoId(
|
||||
videoId = nextEpisode.id.takeIf { it.isNotBlank() } ?: buildPlaybackVideoId(
|
||||
parentMetaId = parentMetaId,
|
||||
seasonNumber = nextEpisode.season,
|
||||
episodeNumber = nextEpisode.episode,
|
||||
|
|
|
|||
|
|
@ -288,10 +288,10 @@ object WatchProgressRepository {
|
|||
fun progressForVideo(videoId: String): WatchProgressEntry? {
|
||||
ensureLoaded()
|
||||
return if (shouldUseTraktProgress()) {
|
||||
TraktProgressRepository.uiState.value.entries.firstOrNull { it.videoId == videoId }
|
||||
TraktProgressRepository.uiState.value.entries
|
||||
} else {
|
||||
entriesByVideoId[videoId]
|
||||
}
|
||||
entriesByVideoId.values.toList()
|
||||
}.firstOrNull { it.videoId == videoId }
|
||||
}
|
||||
|
||||
fun resumeEntryForSeries(metaId: String): WatchProgressEntry? {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.nuvio.app.features.watchprogress
|
||||
|
||||
import com.nuvio.app.features.details.MetaVideo
|
||||
import kotlin.test.Test
|
||||
import kotlin.test.assertEquals
|
||||
import kotlin.test.assertFalse
|
||||
|
|
@ -144,6 +145,25 @@ class WatchProgressRulesTest {
|
|||
assertEquals("movie", buildPlaybackVideoId(parentMetaId = "movie", seasonNumber = null, episodeNumber = null, fallbackVideoId = null))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `up next continue watching uses actual episode id when available`() {
|
||||
val item = entry(
|
||||
videoId = "kitsu:244:1",
|
||||
parentMetaId = "kitsu:244",
|
||||
seasonNumber = 1,
|
||||
episodeNumber = 1,
|
||||
).toUpNextContinueWatchingItem(
|
||||
MetaVideo(
|
||||
id = "kitsu:244:2",
|
||||
title = "Episode 2",
|
||||
season = 1,
|
||||
episode = 2,
|
||||
),
|
||||
)
|
||||
|
||||
assertEquals("kitsu:244:2", item.videoId)
|
||||
}
|
||||
|
||||
private fun entry(
|
||||
videoId: String,
|
||||
parentMetaId: String = videoId.substringBefore(':'),
|
||||
|
|
|
|||
Loading…
Reference in a new issue