| | import { useState, useEffect, useRef, useCallback } from 'react' |
| |
|
| | export function useProcessingProgress(sessionId) { |
| | const [progress, setProgress] = useState({}) |
| | const wsRef = useRef(null) |
| |
|
| | useEffect(() => { |
| | if (!sessionId) return |
| |
|
| | |
| | const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:' |
| | const wsUrl = `${protocol}//${window.location.host}/api/ws/${sessionId}` |
| |
|
| | const ws = new WebSocket(wsUrl) |
| | wsRef.current = ws |
| |
|
| | ws.onopen = () => { |
| | console.log('WebSocket connected for session:', sessionId) |
| | } |
| |
|
| | ws.onmessage = (event) => { |
| | try { |
| | const data = JSON.parse(event.data) |
| |
|
| | if (data.type === 'progress') { |
| | setProgress(prev => ({ |
| | ...prev, |
| | [data.stem]: data.status |
| | })) |
| | } else if (data.type === 'complete') { |
| | console.log('Processing complete in', data.total_time, 'seconds') |
| | } |
| | } catch (err) { |
| | console.error('WebSocket message error:', err) |
| | } |
| | } |
| |
|
| | ws.onerror = (error) => { |
| | console.error('WebSocket error:', error) |
| | } |
| |
|
| | ws.onclose = () => { |
| | console.log('WebSocket disconnected') |
| | } |
| |
|
| | |
| | return () => { |
| | if (ws.readyState === WebSocket.OPEN) { |
| | ws.close() |
| | } |
| | } |
| | }, [sessionId]) |
| |
|
| | const resetProgress = useCallback(() => { |
| | setProgress({}) |
| | }, []) |
| |
|
| | return { progress, resetProgress } |
| | } |
| |
|