mirror of
https://github.com/JefferyHcool/BiliNote.git
synced 2026-06-26 02:01:38 +08:00
- 新增自定义异常类 BizException、NoteError 和 ProviderError - 优化了模型管理相关的逻辑,包括加载、删除和测试连接等功能 - 改进了 Douyin 下载器的错误处理 - 调整了任务重试逻辑和笔记生成的异常处理- 更新了相关组件和页面以适应新的异常处理机制
60 lines
2.0 KiB
TypeScript
60 lines
2.0 KiB
TypeScript
import { useEffect, useRef } from 'react'
|
|
import { useTaskStore } from '@/store/taskStore'
|
|
import { get_task_status } from '@/services/note.ts'
|
|
import toast from 'react-hot-toast'
|
|
|
|
export const useTaskPolling = (interval = 3000) => {
|
|
const tasks = useTaskStore(state => state.tasks)
|
|
const updateTaskContent = useTaskStore(state => state.updateTaskContent)
|
|
const updateTaskStatus = useTaskStore(state => state.updateTaskStatus)
|
|
const removeTask = useTaskStore(state => state.removeTask)
|
|
|
|
const tasksRef = useRef(tasks)
|
|
|
|
// 每次 tasks 更新,把最新的 tasks 同步进去
|
|
useEffect(() => {
|
|
tasksRef.current = tasks
|
|
}, [tasks])
|
|
|
|
useEffect(() => {
|
|
const timer = setInterval(async () => {
|
|
const pendingTasks = tasksRef.current.filter(
|
|
task => task.status != 'SUCCESS' && task.status != 'FAILED'
|
|
)
|
|
|
|
for (const task of pendingTasks) {
|
|
try {
|
|
console.log('🔄 正在轮询任务:', task.id)
|
|
const res = await get_task_status(task.id)
|
|
const { status } = res
|
|
|
|
if (status && status !== task.status) {
|
|
if (status === 'SUCCESS') {
|
|
const { markdown, transcript, audio_meta } = res.result
|
|
toast.success('笔记生成成功')
|
|
updateTaskContent(task.id, {
|
|
status,
|
|
markdown,
|
|
transcript,
|
|
audioMeta: audio_meta,
|
|
})
|
|
} else if (status === 'FAILED') {
|
|
updateTaskContent(task.id, { status })
|
|
console.warn(`⚠️ 任务 ${task.id} 失败`)
|
|
} else {
|
|
updateTaskContent(task.id, { status })
|
|
}
|
|
}
|
|
} catch (e) {
|
|
console.error('❌ 任务轮询失败:', e)
|
|
// toast.error(`生成失败 ${e.message || e}`)
|
|
updateTaskContent(task.id, { status: 'FAILED' })
|
|
// removeTask(task.id)
|
|
}
|
|
}
|
|
}, interval)
|
|
|
|
return () => clearInterval(timer)
|
|
}, [interval])
|
|
}
|