From 209cefcf22044ebef6ef263fba1724c1cd53068a Mon Sep 17 00:00:00 2001 From: Nuwan Date: Tue, 13 Jan 2026 23:39:32 +0530 Subject: [PATCH] feat(02-01): add state for position in milliseconds Add currentPositionMs and durationMs state variables to track playback position in numeric form for slider calculations, separate from formatted string display values. Update initialization and polling useEffects to maintain both numeric and formatted values. Reset position on stop. Co-Authored-By: Claude Sonnet 4.5 --- .../client/JKSessionBackingTrackPlayer.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/jam-ui/src/components/client/JKSessionBackingTrackPlayer.js b/jam-ui/src/components/client/JKSessionBackingTrackPlayer.js index 4bc0c89ae..5fa15c5d9 100644 --- a/jam-ui/src/components/client/JKSessionBackingTrackPlayer.js +++ b/jam-ui/src/components/client/JKSessionBackingTrackPlayer.js @@ -19,6 +19,8 @@ const JKSessionBackingTrackPlayer = ({ const [volume, setVolume] = useState(100); const [currentTime, setCurrentTime] = useState('0:00'); const [duration, setDuration] = useState('0:00'); + const [currentPositionMs, setCurrentPositionMs] = useState(0); + const [durationMs, setDurationMs] = useState(0); const volumeRef = useRef(null); @@ -35,14 +37,17 @@ const JKSessionBackingTrackPlayer = ({ // Initialize player state when opened setIsPlaying(false); setCurrentTime('0:00'); + setCurrentPositionMs(0); // Fetch and set duration immediately when track loads try { - const durationMs = jamClient.SessionGetTracksPlayDurationMs(); - setDuration(formatTime(durationMs)); + const durationInMs = jamClient.SessionGetTracksPlayDurationMs(); + setDurationMs(durationInMs); + setDuration(formatTime(durationInMs)); } catch (error) { console.error('Error fetching track duration:', error); setDuration('0:00'); + setDurationMs(0); } } }, [isOpen, backingTrack, jamClient]); @@ -58,11 +63,13 @@ const JKSessionBackingTrackPlayer = ({ if (!jamClient) return; const positionMs = jamClient.SessionCurrrentPlayPosMs(); - const durationMs = jamClient.SessionGetTracksPlayDurationMs(); + const durationInMs = jamClient.SessionGetTracksPlayDurationMs(); const trackIsPlaying = jamClient.isSessionTrackPlaying(); + setCurrentPositionMs(positionMs); setCurrentTime(formatTime(positionMs)); - setDuration(formatTime(durationMs)); + setDurationMs(durationInMs); + setDuration(formatTime(durationInMs)); // Sync playing state if changed if (trackIsPlaying !== isPlaying) { @@ -103,6 +110,7 @@ const JKSessionBackingTrackPlayer = ({ await jamClient.SessionStopPlay(); setIsPlaying(false); setCurrentTime('0:00'); + setCurrentPositionMs(0); } catch (error) { console.error('Error stopping playback:', error); }