fix: continue watching rewinder cannot rewind the position next time.

This commit is contained in:
oxy-macmini
2025-03-30 20:55:35 +08:00
parent 65607b1753
commit 44b356c668
4 changed files with 17 additions and 14 deletions

View File

@ -6,7 +6,7 @@ import kotlin.time.Duration.Companion.seconds
internal interface ContinueWatchingCondition<P: Player> {
fun isStoringSupported(player: P): Boolean
fun isRestoringSupported(player: P): Boolean
fun isResettingSupported(player: P): Boolean
fun isResettingSupported(player: P, ignorePositionCondition: Boolean = false): Boolean
companion object {
@Suppress("UNCHECKED_CAST")
inline fun <reified P: Player> getInstance(): ContinueWatchingCondition<P> =
@ -29,8 +29,9 @@ internal object CommonContinueWatchingCondition: ContinueWatchingCondition<Playe
return true
}
override fun isResettingSupported(player: Player): Boolean {
override fun isResettingSupported(player: Player, ignorePositionCondition: Boolean): Boolean {
if (!isPlayerSupported(player)) return true
if (ignorePositionCondition) return true
val duration = player.contentDuration.toFloat()
val position = player.contentPosition
if (duration <= 15.seconds.inWholeMilliseconds) return true

View File

@ -678,7 +678,7 @@ class PlayerManagerImpl @Inject constructor(
override suspend fun onRewind(channelUrl: String) {
cwPositionObserver.emit(-1L)
resetContinueWatching(channelUrl)
resetContinueWatching(channelUrl, ignorePositionCondition = true)
val currentPlayer = player.value ?: return
if (currentPlayer.isCommandAvailable(Player.COMMAND_SEEK_TO_DEFAULT_POSITION)) {
currentPlayer.seekToDefaultPosition()
@ -760,12 +760,12 @@ class PlayerManagerImpl @Inject constructor(
}
}
private suspend fun resetContinueWatching(channelUrl: String) {
logger.post { "resetContinueWatching, channelUrl=$channelUrl" }
private suspend fun resetContinueWatching(channelUrl: String, ignorePositionCondition: Boolean = false) {
logger.post { "resetContinueWatching, channelUrl=$channelUrl, ignorePositionCondition=$ignorePositionCondition" }
val channelPreference = getChannelPreference(channelUrl)
val player = this@PlayerManagerImpl.player.value
withContext(mainDispatcher) {
if (player != null && continueWatchingCondition.isResettingSupported(player)) {
if (player != null && continueWatchingCondition.isResettingSupported(player, ignorePositionCondition)) {
updateChannelPreference(
channelUrl,
channelPreference?.copy(cwPosition = -1L) ?: ChannelPreference(cwPosition = -1L)