mirror of
https://github.com/oxyroid/M3UAndroid.git
synced 2025-08-06 14:59:48 +08:00
fix: continue watching rewinder cannot rewind the position next time.
This commit is contained in:
@ -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
|
||||
|
@ -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)
|
||||
|
Reference in New Issue
Block a user