2026-04-30 21:18:31 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* Command: confirm — 人工确认分镜图
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
const { loadManifest, saveManifest } = require('./pipeline-utils')
|
|
|
|
|
|
|
|
|
|
|
|
function confirmManifest(options) {
|
2026-05-02 00:14:40 +08:00
|
|
|
|
const { manifest: manifestPath, all, items: itemsStr } = options
|
2026-04-30 21:18:31 +08:00
|
|
|
|
|
|
|
|
|
|
if (!manifestPath) {
|
|
|
|
|
|
console.error('用法: pipeline.js confirm --manifest <path> --all')
|
2026-05-02 00:14:40 +08:00
|
|
|
|
console.error(' pipeline.js confirm --manifest <path> --items 1,3,5')
|
2026-04-30 21:18:31 +08:00
|
|
|
|
process.exit(1)
|
|
|
|
|
|
}
|
2026-05-02 00:14:40 +08:00
|
|
|
|
if (!all && !itemsStr) {
|
|
|
|
|
|
console.error('错误: 必须指定 --all 或 --items <id列表>')
|
2026-04-30 21:18:31 +08:00
|
|
|
|
process.exit(1)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const manifest = loadManifest(manifestPath)
|
2026-05-02 00:14:40 +08:00
|
|
|
|
const targetIds = itemsStr
|
|
|
|
|
|
? new Set(itemsStr.split(',').map(s => parseInt(s.trim(), 10)).filter(n => !isNaN(n)))
|
|
|
|
|
|
: null
|
2026-04-30 21:18:31 +08:00
|
|
|
|
|
|
|
|
|
|
let count = 0
|
|
|
|
|
|
for (const item of manifest.items) {
|
2026-05-02 00:14:40 +08:00
|
|
|
|
if (targetIds && !targetIds.has(item.id)) continue
|
2026-04-30 21:18:31 +08:00
|
|
|
|
if (item.file && item.status === 'done' && !item.confirmed) {
|
|
|
|
|
|
item.confirmed = true
|
|
|
|
|
|
count++
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
saveManifest(manifestPath, manifest)
|
|
|
|
|
|
|
|
|
|
|
|
const total = manifest.items.length
|
|
|
|
|
|
const confirmed = manifest.items.filter(it => it.confirmed).length
|
2026-05-02 00:14:40 +08:00
|
|
|
|
const scope = targetIds ? `${Array.from(targetIds).join(',')}` : '全部'
|
|
|
|
|
|
console.log(`已确认: ${count} items(范围: ${scope},共 ${confirmed}/${total} 已确认)`)
|
2026-04-30 21:18:31 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
module.exports = { confirmManifest }
|