fix(05-jamtrack): implement pickMyPackage logic for mixdown selection
The downloadJamTrack thunk was failing with "No mixdown package available" because it was trying to access mixdowns[0].packageId directly. Mixdowns have a packages array, and the correct package must be selected based on client capabilities (pickMyPackage logic from legacy implementation). Changes to downloadJamTrack thunk: - Get client sample rate via jamClient.GetSampleRate() - Find mixdown by mixdownId if provided, else use first mixdown - Implement pickMyPackage logic to find compatible package: * file_type === 'ogg' * encrypt_type === 'jkz' * sample_rate === clientSampleRate (44 or 48 kHz) - Extract packageId from selected package - Add detailed error messages for each failure case This matches the legacy JamTrackStore.pickMyPackage() behavior documented in .planning/codebase/JAMTRACK_LEGACY.md lines 126-130. Fixes "No mixdown package available" error during JamTrack playback. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
40cb7fe908
commit
8681b2d3bd
|
|
@ -59,15 +59,38 @@ export const downloadJamTrack = createAsyncThunk(
|
|||
progress: 0
|
||||
}));
|
||||
|
||||
// Get package ID (simplified - use first available package)
|
||||
// Real implementation would use pickMyPackage() logic from legacy
|
||||
const mixdowns = await jamClient.JamTrackGetMixdowns(jamTrack.id);
|
||||
const packageId = mixdowns && mixdowns.length > 0 ? mixdowns[0].packageId : null;
|
||||
// Get client sample rate for package selection (pickMyPackage logic)
|
||||
const sampleRate = await jamClient.GetSampleRate();
|
||||
|
||||
if (!packageId) {
|
||||
throw new Error('No mixdown package available');
|
||||
// Get mixdowns and find compatible package
|
||||
const mixdowns = await jamClient.JamTrackGetMixdowns(jamTrack.id);
|
||||
|
||||
if (!mixdowns || mixdowns.length === 0) {
|
||||
throw new Error('No mixdowns available for this JamTrack');
|
||||
}
|
||||
|
||||
// Find the first mixdown (use selected mixdownId if provided, else use first)
|
||||
const mixdown = mixdownId
|
||||
? mixdowns.find(m => m.id === mixdownId) || mixdowns[0]
|
||||
: mixdowns[0];
|
||||
|
||||
if (!mixdown || !mixdown.packages || mixdown.packages.length === 0) {
|
||||
throw new Error('Mixdown has no packages available');
|
||||
}
|
||||
|
||||
// pickMyPackage logic: find compatible package (ogg, jkz, matching sample rate)
|
||||
const compatiblePackage = mixdown.packages.find(pkg =>
|
||||
pkg.file_type === 'ogg' &&
|
||||
pkg.encrypt_type === 'jkz' &&
|
||||
pkg.sample_rate === sampleRate
|
||||
);
|
||||
|
||||
if (!compatiblePackage) {
|
||||
throw new Error(`No compatible package found for sample rate ${sampleRate}kHz`);
|
||||
}
|
||||
|
||||
const packageId = compatiblePackage.id;
|
||||
|
||||
// Set up global callbacks for native client
|
||||
window.jamTrackDownloadProgress = (percent) => {
|
||||
dispatch(setDownloadState({ progress: percent }));
|
||||
|
|
|
|||
Loading…
Reference in New Issue