From b91af8c9fabdedaaa39610e0f86d5652a5a8611b Mon Sep 17 00:00:00 2001 From: Pas <74743263+Pasithea0@users.noreply.github.com> Date: Thu, 22 May 2025 21:42:33 -0600 Subject: [PATCH] sync watchparty playback speed --- src/hooks/useWatchPartySync.ts | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/hooks/useWatchPartySync.ts b/src/hooks/useWatchPartySync.ts index ebf11adc..cbe08cba 100644 --- a/src/hooks/useWatchPartySync.ts +++ b/src/hooks/useWatchPartySync.ts @@ -17,6 +17,7 @@ interface RoomUser { isPaused: boolean; time: number; duration: number; + playbackRate: number; }; content: { title: string; @@ -79,6 +80,9 @@ export function useWatchPartySync( const display = usePlayerStore((s) => s.display); const currentTime = usePlayerStore((s) => s.progress.time); const isPlaying = usePlayerStore((s) => s.mediaPlaying.isPlaying); + const currentPlaybackRate = usePlayerStore( + (s) => s.mediaPlaying.playbackRate, + ); // Get watch party state const { roomCode, isHost, enabled, enableAsGuest } = useWatchPartyStore(); @@ -165,6 +169,10 @@ export function useWatchPartySync( const predictedHostTime = getPredictedHostTime(); const difference = currentTime - predictedHostTime; + // Handle playback rate sync + const needsPlaybackRateSync = + hostUser.player.playbackRate !== currentPlaybackRate; + // Handle time sync const activeThreshold = isPlaying ? 2 : 5; const needsTimeSync = Math.abs(difference) > activeThreshold; @@ -180,11 +188,22 @@ export function useWatchPartySync( Math.abs(hostUser.player.time - state.previousHostTime) > 5; // Sync if needed - if ((needsTimeSync || needsPlayStateSync || needsJumpSync) && !isSyncing) { + if ( + (needsTimeSync || + needsPlayStateSync || + needsJumpSync || + needsPlaybackRateSync) && + !isSyncing + ) { state.syncInProgress = true; setIsSyncing(true); - // Sync time first + // Sync playback rate first if needed + if (needsPlaybackRateSync) { + display.setPlaybackRate(hostUser.player.playbackRate); + } + + // Sync time display.setTime(predictedHostTime); // Then sync play state after a short delay @@ -210,6 +229,7 @@ export function useWatchPartySync( hostUser, isHost, currentTime, + currentPlaybackRate, display, isSyncing, getPredictedHostTime, @@ -242,6 +262,7 @@ export function useWatchPartySync( isPaused: latestStatus.player.isPaused, time: latestStatus.player.time, duration: latestStatus.player.duration, + playbackRate: latestStatus.player.playbackRate, }, content: { title: latestStatus.content.title,