From e9a331dbd57eca42e8018b822bf2a98d72985df4 Mon Sep 17 00:00:00 2001 From: tapframe Date: Tue, 25 Nov 2025 01:44:34 +0530 Subject: [PATCH] ksplayer pause fix --- ios/KSPlayerView.swift | 17 ++++++++++++++++- src/components/player/KSPlayerCore.tsx | 15 +++++---------- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/ios/KSPlayerView.swift b/ios/KSPlayerView.swift index cda64d5..53c58dc 100644 --- a/ios/KSPlayerView.swift +++ b/ios/KSPlayerView.swift @@ -457,9 +457,24 @@ class KSPlayerView: UIView { return } - playerView.seek(time: time) { success in + // Capture the current paused state before seeking + let wasPaused = isPaused + print("KSPlayerView: Seeking to \(time), paused state before seek: \(wasPaused)") + + playerView.seek(time: time) { [weak self] success in + guard let self = self else { return } + if success { print("KSPlayerView: Seek successful to \(time)") + + // Restore the paused state after seeking + // KSPlayer's seek may resume playback, so we need to re-apply the paused state + if wasPaused { + DispatchQueue.main.async { + self.playerView.pause() + print("KSPlayerView: Restored paused state after seek") + } + } } else { print("KSPlayerView: Seek failed to \(time)") } diff --git a/src/components/player/KSPlayerCore.tsx b/src/components/player/KSPlayerCore.tsx index d9cbf1b..95a73ee 100644 --- a/src/components/player/KSPlayerCore.tsx +++ b/src/components/player/KSPlayerCore.tsx @@ -849,6 +849,8 @@ const KSPlayerCore: React.FC = () => { const onPaused = () => { if (isMounted.current) { setPaused(true); + // Reset the wasPlayingBeforeDrag ref so that seeking while paused doesn't resume playback + wasPlayingBeforeDragRef.current = false; // IMMEDIATE: Send immediate pause update to Trakt when user pauses if (duration > 0) { @@ -919,8 +921,9 @@ const KSPlayerCore: React.FC = () => { if (duration > 0) { const seekTime = Math.min(value, duration - END_EPSILON); seekToTime(seekTime); - // If the video was playing before the drag, ensure we remain in playing state after the seek - if (wasPlayingBeforeDragRef.current) { + // Only resume playback if the video was playing before the drag AND is not currently paused + // This ensures that if the user paused during or before the drag, it stays paused + if (wasPlayingBeforeDragRef.current && !paused) { setTimeout(() => { if (isMounted.current) { setPaused(false); @@ -988,14 +991,6 @@ const KSPlayerCore: React.FC = () => { completeOpeningAnimation(); } - // If time is advancing right after seek and we previously intended to play, - // ensure paused state is false to keep UI in sync - if (wasPlayingBeforeDragRef.current && paused && !isDragging) { - setPaused(false); - // Reset the intent once corrected - wasPlayingBeforeDragRef.current = false; - } - // Periodic check for disabled audio track (every 3 seconds, max 3 attempts) const now = Date.now(); if (now - lastAudioTrackCheck > 3000 && !paused && duration > 0 && audioTrackFallbackAttempts < 3) {