fix(26): pass jamServer to loadJamTrack and improve error handling
- Add jamServer to useMediaActions by creating object from subscribe/unsubscribe - Pass jamServer to loadJamTrackThunk so it can subscribe to packaging progress - Improve error handling to extract message from Response objects (not just Error) - Fixes "Failed to start packaging: undefined" error Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
e4300aecb4
commit
3d847ece7f
|
|
@ -1,4 +1,4 @@
|
||||||
import { useCallback } from 'react';
|
import { useCallback, useMemo } from 'react';
|
||||||
import { useDispatch, useSelector } from 'react-redux';
|
import { useDispatch, useSelector } from 'react-redux';
|
||||||
import {
|
import {
|
||||||
openBackingTrack as openBackingTrackThunk,
|
openBackingTrack as openBackingTrackThunk,
|
||||||
|
|
@ -32,7 +32,13 @@ import { syncTracksToServer } from '../services/trackSyncService';
|
||||||
const useMediaActions = () => {
|
const useMediaActions = () => {
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
const sessionId = useSelector(selectSessionId);
|
const sessionId = useSelector(selectSessionId);
|
||||||
const { jamClient } = useJamServerContext();
|
const { jamClient, subscribe, unsubscribe } = useJamServerContext();
|
||||||
|
|
||||||
|
// Create jamServer object with subscribe/unsubscribe for thunks
|
||||||
|
const jamServer = useMemo(() => ({
|
||||||
|
subscribe,
|
||||||
|
unsubscribe
|
||||||
|
}), [subscribe, unsubscribe]);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Open a backing track file
|
* Open a backing track file
|
||||||
|
|
@ -144,7 +150,7 @@ const useMediaActions = () => {
|
||||||
*/
|
*/
|
||||||
const loadJamTrack = useCallback(async (jamTrack) => {
|
const loadJamTrack = useCallback(async (jamTrack) => {
|
||||||
try {
|
try {
|
||||||
await dispatch(loadJamTrackThunk({ jamTrack, jamClient })).unwrap();
|
await dispatch(loadJamTrackThunk({ jamTrack, jamClient, jamServer })).unwrap();
|
||||||
|
|
||||||
// Update media summary
|
// Update media summary
|
||||||
dispatch(updateMediaSummary({
|
dispatch(updateMediaSummary({
|
||||||
|
|
@ -161,7 +167,7 @@ const useMediaActions = () => {
|
||||||
console.error('Error loading jam track:', error);
|
console.error('Error loading jam track:', error);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}, [dispatch, jamClient, sessionId]);
|
}, [dispatch, jamClient, jamServer, sessionId]);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stop and close the currently playing JamTrack
|
* Stop and close the currently playing JamTrack
|
||||||
|
|
|
||||||
|
|
@ -148,7 +148,9 @@ export const downloadJamTrack = createAsyncThunk(
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error('[JamTrack] Failed to enqueue mixdown:', err);
|
console.error('[JamTrack] Failed to enqueue mixdown:', err);
|
||||||
throw new Error(`Failed to start packaging: ${err.message}`);
|
// Handle both Error objects and Response objects (from apiFetch)
|
||||||
|
const errorMessage = err?.message || err?.statusText || `HTTP ${err?.status}` || 'Unknown error';
|
||||||
|
throw new Error(`Failed to start packaging: ${errorMessage}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Subscribe to WebSocket notifications for packaging progress
|
// Subscribe to WebSocket notifications for packaging progress
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue