fix: pause/resume now manually updates file status in cache

Root cause: backend pause updates monitor_jobs table, but frontend
displays status from videos table (via get_files API). These are separate.

Fix:
- ctxPause: manually sets file.status = 'paused' in filesCache + fileStatusCache
- batchPause: same manual cache update for each file
- ctxResume/batchResume: calls loadFiles() to refresh from backend
- Added console.log debug for troubleshooting
- Fixed i18n: removed duplicate emoji from translation strings
This commit is contained in:
2026-10-18 21:38:47 +08:00
parent 67e806037f
commit a64e200ca5

View File

@@ -2276,22 +2276,31 @@ async function ctxUnregister(f: any) {
// Pause / Resume functions // Pause / Resume functions
async function ctxPause(f: any) { async function ctxPause(f: any) {
closeContextMenu() closeContextMenu()
if (!f?.file_uuid) return if (!f?.file_uuid) { console.error('[ctxPause] no file_uuid'); return }
try { try {
const base = getApiBase() const base = getApiBase()
const res = await fetch(`${base}/api/v1/jobs/${f.file_uuid}/pause`, { method: 'POST' }) const url = `${base}/api/v1/jobs/${f.file_uuid}/pause`
console.log('[ctxPause] calling:', url)
const res = await fetch(url, { method: 'POST' })
console.log('[ctxPause] response status:', res.status)
if (res.ok) { if (res.ok) {
pausedFileUuids.value = new Set(pausedFileUuids.value).add(f.file_uuid) pausedFileUuids.value = new Set(pausedFileUuids.value).add(f.file_uuid)
// Manually update file status in cache (backend pause only updates monitor_jobs, not videos table)
const file = filesCache.value.find((x: any) => x.file_uuid === f.file_uuid)
if (file) {
file.status = 'paused'
fileStatusCache.value[f.file_uuid] = 'paused'
}
actionMsg.value = `⏸ Paused: ${f.file_name}` actionMsg.value = `⏸ Paused: ${f.file_name}`
await loadFiles() console.log('[ctxPause] success, status updated to paused')
await loadPausedFiles()
} else { } else {
const err = await res.json().catch(() => ({})) const err = await res.json().catch(() => ({}))
actionMsg.value = `Pause failed: ${err.error || res.statusText}` actionMsg.value = `Pause failed: ${err.error || res.statusText}`
console.error('[ctxPause] failed:', err)
} }
} catch (e: any) { } catch (e: any) {
actionMsg.value = `Pause error: ${e.message}` actionMsg.value = `Pause error: ${e.message}`
console.error('[ctxPause]', e) console.error('[ctxPause] error:', e)
} }
setTimeout(() => { actionMsg.value = '' }, 5000) setTimeout(() => { actionMsg.value = '' }, 5000)
} }
@@ -2333,6 +2342,12 @@ async function batchPause() {
try { try {
const res = await fetch(`${base}/api/v1/jobs/${f.file_uuid}/pause`, { method: 'POST' }) const res = await fetch(`${base}/api/v1/jobs/${f.file_uuid}/pause`, { method: 'POST' })
if (res.ok) { if (res.ok) {
// Manually update status in cache
const file = filesCache.value.find((x: any) => x.file_uuid === f.file_uuid)
if (file) {
file.status = 'paused'
fileStatusCache.value[f.file_uuid] = 'paused'
}
successCount++ successCount++
} else { } else {
failCount++ failCount++
@@ -2345,9 +2360,10 @@ async function batchPause() {
await Promise.all(filesToPause.map(f => limit(() => pauseFile(f)))) await Promise.all(filesToPause.map(f => limit(() => pauseFile(f))))
// Update paused set for reactivity
pausedFileUuids.value = new Set(pausedFileUuids.value)
if (successCount > 0) { if (successCount > 0) {
await loadFiles()
await loadPausedFiles()
actionMsg.value = `⏸ Paused ${successCount} files${failCount > 0 ? `, ${failCount} failed` : ''}` actionMsg.value = `⏸ Paused ${successCount} files${failCount > 0 ? `, ${failCount} failed` : ''}`
} else { } else {
actionMsg.value = `Failed to pause all ${failCount} files` actionMsg.value = `Failed to pause all ${failCount} files`