From a64e200ca5b9b88d27a5d0c6d4582a116bac2d4f Mon Sep 17 00:00:00 2001 From: Momentry Studio Date: Sun, 18 Oct 2026 21:38:47 +0800 Subject: [PATCH] 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 --- src/views/LibraryView.vue | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/src/views/LibraryView.vue b/src/views/LibraryView.vue index 33dfca3..7e7ac5e 100644 --- a/src/views/LibraryView.vue +++ b/src/views/LibraryView.vue @@ -2276,22 +2276,31 @@ async function ctxUnregister(f: any) { // Pause / Resume functions async function ctxPause(f: any) { closeContextMenu() - if (!f?.file_uuid) return + if (!f?.file_uuid) { console.error('[ctxPause] no file_uuid'); return } try { 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) { 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}` - await loadFiles() - await loadPausedFiles() + console.log('[ctxPause] success, status updated to paused') } else { const err = await res.json().catch(() => ({})) actionMsg.value = `Pause failed: ${err.error || res.statusText}` + console.error('[ctxPause] failed:', err) } } catch (e: any) { actionMsg.value = `Pause error: ${e.message}` - console.error('[ctxPause]', e) + console.error('[ctxPause] error:', e) } setTimeout(() => { actionMsg.value = '' }, 5000) } @@ -2333,6 +2342,12 @@ async function batchPause() { try { const res = await fetch(`${base}/api/v1/jobs/${f.file_uuid}/pause`, { method: 'POST' }) 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++ } else { failCount++ @@ -2345,9 +2360,10 @@ async function batchPause() { await Promise.all(filesToPause.map(f => limit(() => pauseFile(f)))) + // Update paused set for reactivity + pausedFileUuids.value = new Set(pausedFileUuids.value) + if (successCount > 0) { - await loadFiles() - await loadPausedFiles() actionMsg.value = `⏸ Paused ${successCount} files${failCount > 0 ? `, ${failCount} failed` : ''}` } else { actionMsg.value = `Failed to pause all ${failCount} files`