diff --git a/frontend/src/hooks/useRecorder.ts b/frontend/src/hooks/useRecorder.ts index e239a9e..31025d0 100644 --- a/frontend/src/hooks/useRecorder.ts +++ b/frontend/src/hooks/useRecorder.ts @@ -13,18 +13,13 @@ export function useRecorder() { try { const response = await fetch(`${API_BASE}/ports/${portIndex}/start`, { method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, + headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(config), }); - - if (!response.ok) { - throw new Error(`Failed to start recording: ${response.statusText}`); - } + if (!response.ok) throw new Error(`Failed to start recording: ${response.statusText}`); } catch (err) { - const errorMessage = err instanceof Error ? err.message : 'Unknown error'; - setError(errorMessage); + const msg = err instanceof Error ? err.message : 'Unknown error'; + setError(msg); throw err; } finally { setLoading(false); @@ -37,23 +32,19 @@ export function useRecorder() { try { const response = await fetch(`${API_BASE}/ports/${portIndex}/stop`, { method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, + headers: { 'Content-Type': 'application/json' }, }); - - if (!response.ok) { - throw new Error(`Failed to stop recording: ${response.statusText}`); - } + if (!response.ok) throw new Error(`Failed to stop recording: ${response.statusText}`); } catch (err) { - const errorMessage = err instanceof Error ? err.message : 'Unknown error'; - setError(errorMessage); + const msg = err instanceof Error ? err.message : 'Unknown error'; + setError(msg); throw err; } finally { setLoading(false); } }; + /** Global SCTE35 inject (hits all SRT outputs) */ const injectSCTE35 = async ( eventId: number, durationSeconds: number, @@ -64,30 +55,55 @@ export function useRecorder() { try { const response = await fetch(`${API_BASE}/scte35/inject`, { method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, + headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ event_id: eventId, duration_seconds: durationSeconds, webhook_url: webhookUrl || null, }), }); - - if (!response.ok) { - throw new Error(`Failed to inject SCTE35 marker: ${response.statusText}`); - } - - const data: SCTE35Marker = await response.json(); - return data; + if (!response.ok) throw new Error(`Failed to inject SCTE35: ${response.statusText}`); + return await response.json() as SCTE35Marker; } catch (err) { - const errorMessage = err instanceof Error ? err.message : 'Unknown error'; - setError(errorMessage); + const msg = err instanceof Error ? err.message : 'Unknown error'; + setError(msg); throw err; } finally { setLoading(false); } }; - return { startRecording, stopRecording, injectSCTE35, loading, error }; + /** Per-port SCTE35 inject — targets a specific port's SRT output(s) */ + const injectSCTE35ForPort = async ( + portIndex: number, + eventId: number, + durationSeconds: number, + srtDestinationUrl?: string, + webhookUrl?: string + ): Promise => { + setLoading(true); + setError(null); + try { + const response = await fetch(`${API_BASE}/ports/${portIndex}/scte35/inject`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + event_id: eventId, + duration_seconds: durationSeconds, + webhook_url: webhookUrl || null, + srt_destination_url: srtDestinationUrl || null, + }), + }); + if (!response.ok) throw new Error(`Failed to inject SCTE35 on port ${portIndex}: ${response.statusText}`); + return await response.json() as SCTE35Marker; + } catch (err) { + const msg = err instanceof Error ? err.message : 'Unknown error'; + setError(msg); + throw err; + } finally { + setLoading(false); + } + }; + + return { startRecording, stopRecording, injectSCTE35, injectSCTE35ForPort, loading, error }; }