diff --git a/Yattee/Services/Player/PlayerService.swift b/Yattee/Services/Player/PlayerService.swift index 96fb07a7..7933010a 100644 --- a/Yattee/Services/Player/PlayerService.swift +++ b/Yattee/Services/Player/PlayerService.swift @@ -3126,6 +3126,15 @@ extension PlayerService: PlayerBackendDelegate { saveProgressAsCompleted() delegate?.playerServiceDidFinishPlaying(self) + // Repeat one: restart immediately - no countdown, independent of queue contents + // and the auto-play-next setting (that setting governs advancing to the next video) + if state.queueMode == .repeatOne { + Task { + await playNext() + } + return + } + // Auto-play immediately if player is not visible (no point showing countdown) // UI (ExpandedPlayerSheet) will handle countdown when player is visible let autoPlayEnabled = settingsManager?.queueAutoPlayNext ?? true diff --git a/Yattee/Views/Player/ExpandedPlayerSheet.swift b/Yattee/Views/Player/ExpandedPlayerSheet.swift index 9f45899b..80432a2c 100644 --- a/Yattee/Views/Player/ExpandedPlayerSheet.swift +++ b/Yattee/Views/Player/ExpandedPlayerSheet.swift @@ -134,7 +134,8 @@ struct ExpandedPlayerSheet: View { var isAutoPlayEnabled: Bool { (appEnvironment?.settingsManager.queueEnabled ?? true) && - (appEnvironment?.settingsManager.queueAutoPlayNext ?? true) + (appEnvironment?.settingsManager.queueAutoPlayNext ?? true) && + playerState?.queueMode != .repeatOne } var autoPlayCountdownDuration: Int { diff --git a/Yattee/Views/Player/tvOS/TVPlayerView.swift b/Yattee/Views/Player/tvOS/TVPlayerView.swift index 120c6652..1d24693c 100644 --- a/Yattee/Views/Player/tvOS/TVPlayerView.swift +++ b/Yattee/Views/Player/tvOS/TVPlayerView.swift @@ -1046,6 +1046,11 @@ struct TVPlayerView: View { controlsVisible = false } + // Repeat one: PlayerService restarts the video itself - no countdown, no replay controls + if playerState?.queueMode == .repeatOne { + return + } + // Check if autoplay is enabled and there's a next video let autoPlayEnabled = appEnvironment?.settingsManager.queueAutoPlayNext ?? true let hasNextVideo = playerState?.hasNext ?? false