feat(05-04): fetch and organize mixdowns in player initialization

- Add JamTrackGetMixdowns API call during player initialization
- Organize mixdowns into master/customMixes/stems hierarchy
- Store availableMixdowns in Redux (activeSessionSlice)
- Set default mixdown selection (prefer master, fallback to first)
- Set activeMixdown in Redux for UI display
- Non-fatal error handling (can play without explicit selection)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Nuwan 2026-01-15 00:59:11 +05:30
parent db192bdbc3
commit 7014107152
1 changed files with 35 additions and 0 deletions

View File

@ -7,6 +7,7 @@ import {
setJamTrackState
} from '../../store/features/mediaSlice';
import { setOpenJamTrack, clearOpenJamTrack } from '../../store/features/sessionUISlice';
import { setAvailableMixdowns, setActiveMixdown } from '../../store/features/activeSessionSlice';
const JKSessionJamTrackPlayer = ({
isOpen,
@ -65,6 +66,40 @@ const JKSessionJamTrackPlayer = ({
console.log('[JamTrack] Not synchronized, will download');
}
// Fetch available mixdowns
try {
const mixdowns = await jamClient.JamTrackGetMixdowns(jamTrack.id);
if (mixdowns && mixdowns.length > 0) {
// Organize into hierarchy: master, custom mixes, stems
const organized = {
master: mixdowns.find(m => m.type === 'master') || null,
customMixes: mixdowns.filter(m => m.type === 'custom' || m.type === 'custom-mix'),
stems: mixdowns.filter(m => m.type === 'stem')
};
dispatch(setAvailableMixdowns(mixdowns));
// Set initial mixdown if not already selected
if (!selectedMixdownId) {
const defaultMixdown = organized.master || (mixdowns[0] || null);
if (defaultMixdown) {
setSelectedMixdownId(defaultMixdown.id);
dispatch(setActiveMixdown(defaultMixdown));
}
} else {
// Find and set the initially selected mixdown
const mixdown = mixdowns.find(m => m.id === selectedMixdownId);
if (mixdown) {
dispatch(setActiveMixdown(mixdown));
}
}
}
} catch (err) {
console.error('[JamTrack] Failed to fetch mixdowns:', err);
// Non-fatal - can still play default mixdown
}
// Set open in Redux
dispatch(setOpenJamTrack(jamTrack.id));