MCPcopy Create free account
hub / github.com/HisMax/RedInk / useGenerationRestore

Function useGenerationRestore

frontend/src/composables/useGenerationRestore.ts:9–78  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

7} from '../api'
8
9export function useGenerationRestore() {
10 const store = useGeneratorStore()
11
12 function hasGeneratedImages(record: HistoryDetail): boolean {
13 return !!record.images?.task_id && (record.images.generated || []).some(Boolean)
14 }
15
16 function hydrateFromHistory(record: HistoryDetail) {
17 const taskId = record.images.task_id
18 const generated = record.images.generated || []
19 const pages = record.outline.pages || []
20 const doneCount = pages.reduce((count, page, idx) => {
21 const filename = generated[page.index] || generated[idx]
22 return filename ? count + 1 : count
23 }, 0)
24
25 store.setTopic(record.title)
26 store.setOutline(record.outline.raw, pages)
27 store.setRecordId(record.id)
28 store.taskId = taskId
29 store.images = pages.map((page, idx) => {
30 const filename = generated[page.index] || generated[idx] || ''
31 return {
32 index: page.index,
33 url: filename && taskId ? getImageUrl(taskId, filename) : '',
34 status: filename ? 'done' : 'error',
35 retryable: !filename
36 }
37 })
38 store.progress.total = pages.length
39 store.progress.current = doneCount
40 store.progress.status = doneCount >= pages.length ? 'done' : 'error'
41 store.stage = doneCount >= pages.length ? 'result' : 'generating'
42 }
43
44 async function restoreFromHistory(): Promise<boolean> {
45 if (!store.recordId) return false
46
47 const res = await getHistory(store.recordId)
48 if (!res.success || !res.record) return false
49
50 if (!hasGeneratedImages(res.record)) return false
51
52 hydrateFromHistory(res.record)
53 return true
54 }
55
56 async function ensureRecord() {
57 if (store.recordId) return
58
59 console.warn('警告: recordId 不存在,尝试创建历史记录作为兜底')
60 try {
61 const result = await createHistory(store.topic, {
62 raw: store.outline.raw,
63 pages: store.outline.pages
64 })
65 if (result.success && result.record_id) {
66 store.setRecordId(result.record_id)

Callers 1

useGenerationRunnerFunction · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected