mirror of
https://github.com/tapframe/NuvioStreaming.git
synced 2026-07-30 08:09:21 +00:00
fix: restore unaired next up episodes
This commit is contained in:
parent
0112e33897
commit
de4e269879
3 changed files with 67 additions and 1 deletions
|
|
@ -48,8 +48,15 @@ internal fun shouldSurfaceNextEpisode(
|
|||
showUnairedNextUp: Boolean,
|
||||
available: Boolean = true,
|
||||
): Boolean {
|
||||
if (!available) return false
|
||||
val isSeasonRollover = normalizeSeasonNumber(candidateSeasonNumber) != normalizeSeasonNumber(watchedSeasonNumber)
|
||||
if (!available) {
|
||||
val daysUntilRelease = daysUntilExplicitRelease(
|
||||
todayIsoDate = todayIsoDate,
|
||||
releasedDate = releasedDate,
|
||||
) ?: return false
|
||||
if (!showUnairedNextUp || daysUntilRelease <= 0) return false
|
||||
return !isSeasonRollover || daysUntilRelease <= UpcomingNextSeasonWindowDays
|
||||
}
|
||||
if (!isSeasonRollover) {
|
||||
if (showUnairedNextUp) return true
|
||||
return isReleasedBy(todayIsoDate = todayIsoDate, releasedDate = releasedDate)
|
||||
|
|
|
|||
|
|
@ -141,6 +141,26 @@ class SeriesContinuityTest {
|
|||
assertNull(nextEpisode)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun nextReleasedEpisodeAfter_surfaces_dated_unavailable_upcoming_episode_when_enabled() {
|
||||
val episodes = listOf(
|
||||
WatchingReleasedEpisode(videoId = "s1e1", seasonNumber = 1, episodeNumber = 1, title = "Episode 1", releasedDate = "2026-07-01"),
|
||||
WatchingReleasedEpisode(videoId = "s1e2", seasonNumber = 1, episodeNumber = 2, title = "Episode 2", releasedDate = "2026-07-12", available = false),
|
||||
)
|
||||
|
||||
val nextEpisode = nextReleasedEpisodeAfter(
|
||||
content = show,
|
||||
episodes = episodes,
|
||||
seasonNumber = 1,
|
||||
episodeNumber = 1,
|
||||
todayIsoDate = "2026-07-05",
|
||||
showUnairedNextUp = true,
|
||||
)
|
||||
|
||||
assertNotNull(nextEpisode)
|
||||
assertEquals("s1e2", nextEpisode.videoId)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun decideSeriesPrimaryAction_falls_back_to_specials_when_no_main_season() {
|
||||
val specialsOnly = listOf(
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package com.nuvio.app.features.watching.domain
|
|||
|
||||
import kotlin.test.Test
|
||||
import kotlin.test.assertEquals
|
||||
import kotlin.test.assertFalse
|
||||
import kotlin.test.assertNotNull
|
||||
import kotlin.test.assertTrue
|
||||
|
||||
|
|
@ -49,6 +50,44 @@ class WatchingPoliciesTest {
|
|||
assertTrue(result)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun shouldSurfaceNextEpisode_allows_dated_unavailable_upcoming_episode_only_when_enabled() {
|
||||
assertTrue(
|
||||
shouldSurfaceNextEpisode(
|
||||
watchedSeasonNumber = 1,
|
||||
candidateSeasonNumber = 1,
|
||||
todayIsoDate = "2026-07-05",
|
||||
releasedDate = "2026-07-12",
|
||||
showUnairedNextUp = true,
|
||||
available = false,
|
||||
),
|
||||
)
|
||||
assertFalse(
|
||||
shouldSurfaceNextEpisode(
|
||||
watchedSeasonNumber = 1,
|
||||
candidateSeasonNumber = 1,
|
||||
todayIsoDate = "2026-07-05",
|
||||
releasedDate = "2026-07-12",
|
||||
showUnairedNextUp = false,
|
||||
available = false,
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun shouldSurfaceNextEpisode_keeps_unavailable_phantom_episode_hidden() {
|
||||
assertFalse(
|
||||
shouldSurfaceNextEpisode(
|
||||
watchedSeasonNumber = 1,
|
||||
candidateSeasonNumber = 3,
|
||||
todayIsoDate = "2026-07-05",
|
||||
releasedDate = null,
|
||||
showUnairedNextUp = true,
|
||||
available = false,
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun latestCompletedSeriesEpisode_prefers_newer_manual_watch_marker() {
|
||||
val latestCompleted = latestCompletedSeriesEpisode(
|
||||
|
|
|
|||
Loading…
Reference in a new issue