CoolFace
Apppublic

Garima1030/mediaforensics-platform

sourceHugging Faceupdated 3mo agoView on Hugging Face
0likes
useAnalysis.js77 linesDownload Raw Back to hooks
1import { useState, useRef, useCallback } from "react"2import { api } from "../api/client"3 4export function useAnalysis() {5  const [jobId,    setJobId]    = useState(null)6  const [status,   setStatus]   = useState("idle")   // idle | uploading | pending | processing | completed | failed7  const [progress, setProgress] = useState(0)8  const [result,   setResult]   = useState(null)9  const [error,    setError]    = useState(null)10  const pollRef = useRef(null)11 12  const stopPolling = () => {13    if (pollRef.current) {14      clearInterval(pollRef.current)15      pollRef.current = null16    }17  }18 19  const pollForResult = useCallback((id) => {20    pollRef.current = setInterval(async () => {21      try {22        const res = await api.getResult(id)23        const job = res.data24 25        setProgress(job.progress_pct || 0)26        setStatus(job.status)27 28        if (job.status === "completed") {29          setResult(job)30          stopPolling()31        } else if (job.status === "failed") {32          setError(job.error_message || "Analysis failed")33          stopPolling()34        }35      } catch (e) {36        setError("Could not reach server")37        stopPolling()38      }39    }, 2000)40  }, [])41 42  const analyze = useCallback(async (file) => {43    try {44      setStatus("uploading")45      setError(null)46      setResult(null)47      setProgress(0)48      stopPolling()49 50      const formData = new FormData()51      formData.append("file", file)52 53      const res = await api.analyze(formData)54      const { job_id } = res.data55 56      setJobId(job_id)57      setStatus("pending")58      pollForResult(job_id)59 60    } catch (e) {61      setError(e.response?.data?.detail || "Upload failed")62      setStatus("failed")63    }64  }, [pollForResult])65 66  const reset = useCallback(() => {67    stopPolling()68    setJobId(null)69    setStatus("idle")70    setProgress(0)71    setResult(null)72    setError(null)73  }, [])74 75  return { jobId, status, progress, result, error, analyze, reset }76}77