fix (resume): based on resume episode restore season, range, dubbed

This commit is contained in:
Funny-Pen-7005 2023-12-10 10:29:03 +05:30 committed by coxju
parent 2a1876f54c
commit 9166fdf0dc
5 changed files with 38 additions and 3 deletions

View file

@ -1022,6 +1022,7 @@ class GeneratorPlayer : FullScreenPlayer() {
resumeMeta.id, resumeMeta.id,
resumeMeta.episode, resumeMeta.episode,
resumeMeta.season, resumeMeta.season,
resumeMeta.dubStatus,
isFromDownload = false isFromDownload = false
) )
} }

View file

@ -50,6 +50,7 @@ data class ResultEpisode(
val videoWatchState: VideoWatchState, val videoWatchState: VideoWatchState,
/** Sum of all previous season episode counts + episode */ /** Sum of all previous season episode counts + episode */
val totalEpisodeIndex: Int? = null, val totalEpisodeIndex: Int? = null,
val dubStatus: DubStatus? = null
) )
fun ResultEpisode.getRealPosition(): Long { fun ResultEpisode.getRealPosition(): Long {
@ -85,6 +86,7 @@ fun buildResultEpisode(
tvType: TvType, tvType: TvType,
parentId: Int, parentId: Int,
totalEpisodeIndex: Int? = null, totalEpisodeIndex: Int? = null,
dubStatus: DubStatus? = null,
): ResultEpisode { ): ResultEpisode {
val posDur = getViewPos(id) val posDur = getViewPos(id)
val videoWatchState = getVideoWatchState(id) ?: VideoWatchState.None val videoWatchState = getVideoWatchState(id) ?: VideoWatchState.None
@ -107,7 +109,8 @@ fun buildResultEpisode(
tvType, tvType,
parentId, parentId,
videoWatchState, videoWatchState,
totalEpisodeIndex totalEpisodeIndex,
dubStatus
) )
} }

View file

@ -2254,7 +2254,8 @@ class ResultViewModel2 : ViewModel() {
fillers.getOrDefault(episode, false), fillers.getOrDefault(episode, false),
loadResponse.type, loadResponse.type,
mainId, mainId,
totalIndex totalIndex,
ep.key
) )
val season = eps.seasonIndex ?: 0 val season = eps.seasonIndex ?: 0
@ -2303,7 +2304,8 @@ class ResultViewModel2 : ViewModel() {
null, null,
loadResponse.type, loadResponse.type,
mainId, mainId,
totalIndex totalIndex,
null
) )
val season = ep.seasonIndex ?: 0 val season = ep.seasonIndex ?: 0
@ -2335,6 +2337,7 @@ class ResultViewModel2 : ViewModel() {
null, null,
loadResponse.type, loadResponse.type,
mainId, mainId,
null,
null null
) )
) )
@ -2358,6 +2361,7 @@ class ResultViewModel2 : ViewModel() {
null, null,
loadResponse.type, loadResponse.type,
mainId, mainId,
null,
null null
) )
) )
@ -2381,6 +2385,7 @@ class ResultViewModel2 : ViewModel() {
null, null,
loadResponse.type, loadResponse.type,
mainId, mainId,
null,
null null
) )
) )
@ -2467,9 +2472,30 @@ class ResultViewModel2 : ViewModel() {
) )
} }
restoreSeasonAndRange(resume)
return ResumeWatchingStatus(progress = progress, isMovie = isMovie, result = episode) return ResumeWatchingStatus(progress = progress, isMovie = isMovie, result = episode)
} }
private fun restoreSeasonAndRange(resume: VideoDownloadHelper.ResumeWatching) {
// restore season based on resume details
resume.season?.apply {
changeSeason(this)
}
// restore dubStatus based on resume details
resume.dubStatus?.apply {
changeDubStatus(this)
}
// restore range based on resume details
currentRanges[currentIndex]?.first {
it.endEpisode >= (resume.episode ?: 0)
}?.apply {
changeRange(this)
}
}
private fun loadTrailers(loadResponse: LoadResponse) = ioSafe { private fun loadTrailers(loadResponse: LoadResponse) = ioSafe {
_trailers.postValue( _trailers.postValue(
getTrailers( getTrailers(

View file

@ -372,6 +372,7 @@ object DataStoreHelper {
null, null,
it.episode, it.episode,
it.season, it.season,
it.dubStatus,
it.isFromDownload, it.isFromDownload,
it.updateTime it.updateTime
) )
@ -386,6 +387,7 @@ object DataStoreHelper {
episodeId: Int?, episodeId: Int?,
episode: Int?, episode: Int?,
season: Int?, season: Int?,
dubStatus: DubStatus? = null,
isFromDownload: Boolean = false, isFromDownload: Boolean = false,
updateTime: Long? = null, updateTime: Long? = null,
) { ) {
@ -398,6 +400,7 @@ object DataStoreHelper {
episodeId, episodeId,
episode, episode,
season, season,
dubStatus,
updateTime ?: System.currentTimeMillis(), updateTime ?: System.currentTimeMillis(),
isFromDownload isFromDownload
) )

View file

@ -1,6 +1,7 @@
package com.lagradost.cloudstream3.utils package com.lagradost.cloudstream3.utils
import com.fasterxml.jackson.annotation.JsonProperty import com.fasterxml.jackson.annotation.JsonProperty
import com.lagradost.cloudstream3.DubStatus
import com.lagradost.cloudstream3.TvType import com.lagradost.cloudstream3.TvType
object VideoDownloadHelper { object VideoDownloadHelper {
data class DownloadEpisodeCached( data class DownloadEpisodeCached(
@ -30,6 +31,7 @@ object VideoDownloadHelper {
@JsonProperty("episodeId") val episodeId: Int?, @JsonProperty("episodeId") val episodeId: Int?,
@JsonProperty("episode") val episode: Int?, @JsonProperty("episode") val episode: Int?,
@JsonProperty("season") val season: Int?, @JsonProperty("season") val season: Int?,
@JsonProperty("dubStatus") val dubStatus: DubStatus?,
@JsonProperty("updateTime") val updateTime: Long, @JsonProperty("updateTime") val updateTime: Long,
@JsonProperty("isFromDownload") val isFromDownload: Boolean, @JsonProperty("isFromDownload") val isFromDownload: Boolean,
) )