diff --git a/src/views/LibraryView.vue b/src/views/LibraryView.vue index 6ee326e..adc11cd 100644 --- a/src/views/LibraryView.vue +++ b/src/views/LibraryView.vue @@ -1899,54 +1899,57 @@ async function batchDeepScan() { actionMsg.value = `Starting: ${immediateCount} immediate, ${queueTotal} queuing...` - const tasks = filesToProcess.map((f) => { - return limit(async () => { - const fileUuid = f.file_uuid - if (!fileUuid) { + async function processFile(f: any) { + const fileUuid = f.file_uuid + if (!fileUuid) { + failCount++ + return + } + + processing++ + const queueCount = Math.max(0, filesToProcess.length - successCount - failCount - processing) + + if (queueCount > 0) { + actionMsg.value = `Processing ${successCount + 1}/${filesToProcess.length} (${queueCount} queuing)...` + } else { + actionMsg.value = `Processing ${successCount + 1}/${filesToProcess.length}...` + } + + try { + const file = filesCache.value.find((x: any) => x.file_uuid === fileUuid) + if (!file) { failCount++ + processing-- return } - processing++ - const queueCount = Math.max(0, filesToProcess.length - successCount - failCount - processing) + const result: any = await apiCall('re_scan_file', { + fileUuid: fileUuid, + autoPipeline: true + }) - if (queueCount > 0) { - actionMsg.value = `Processing ${successCount + 1}/${filesToProcess.length} (${queueCount} queuing)...` + if (result.success) { + successCount++ + if (file) { + file.status = 'scanning' + fileStatusCache.value[fileUuid] = 'scanning' + await syncFileStatus(fileUuid) + } + + // 等待 2 秒,确保后端开始处理并释放资源 + await new Promise(resolve => setTimeout(resolve, 2000)) } else { - actionMsg.value = `Processing ${successCount + 1}/${filesToProcess.length}...` - } - - try { - const file = filesCache.value.find((x: any) => x.file_uuid === fileUuid) - if (!file) { - failCount++ - processing-- - return - } - - const result: any = await apiCall('re_scan_file', { - fileUuid: fileUuid, - autoPipeline: true - }) - - if (result.success) { - successCount++ - if (file) { - file.status = 'scanning' - fileStatusCache.value[fileUuid] = 'scanning' - await syncFileStatus(fileUuid) - } - } else { - failCount++ - } - } catch (e: any) { failCount++ - console.error('[batchDeepScan] Failed:', f.file_name, e) - } finally { - processing-- } - }) - }) + } catch (e: any) { + failCount++ + console.error('[batchDeepScan] Failed:', f.file_name, e) + } finally { + processing-- + } + } + + const tasks = filesToProcess.map((f) => limit(() => processFile(f))) await Promise.all(tasks)