diff --git a/electron/main/ipc.ts b/electron/main/ipc.ts index 654d0f1..928a56d 100644 --- a/electron/main/ipc.ts +++ b/electron/main/ipc.ts @@ -314,6 +314,12 @@ export function setupIpc(win: BrowserWindow): void { return { questions, currentIndex: 0 } }) + // --- Rubric next question index (persisted between grading cycles) --- + let rubricNextIndex = 0 + ipcMain.handle('rubric:getNextIndex', () => rubricNextIndex) + ipcMain.handle('rubric:setNextIndex', (_event, idx: number) => { rubricNextIndex = idx }) + ipcMain.handle('rubric:resetNextIndex', () => { rubricNextIndex = 0 }) + // --- Grading data bridge (toolbar → result window) --- ipcMain.handle('grading:storeData', (_event, data: any) => { gradingPayload = data diff --git a/electron/preload/preload.ts b/electron/preload/preload.ts index cb1e781..d199853 100644 --- a/electron/preload/preload.ts +++ b/electron/preload/preload.ts @@ -52,7 +52,10 @@ contextBridge.exposeInMainWorld('electronAPI', { storeData: (data: any) => ipcRenderer.invoke('rubric:storeData', data), getData: () => ipcRenderer.invoke('rubric:getData'), exportJson: () => ipcRenderer.invoke('rubric:exportJson'), - importJson: () => ipcRenderer.invoke('rubric:importJson') + importJson: () => ipcRenderer.invoke('rubric:importJson'), + getNextIndex: () => ipcRenderer.invoke('rubric:getNextIndex'), + setNextIndex: (idx: number) => ipcRenderer.invoke('rubric:setNextIndex', idx), + resetNextIndex: () => ipcRenderer.invoke('rubric:resetNextIndex') }, template: { diff --git a/src/components/FloatingToolbar.vue b/src/components/FloatingToolbar.vue index 5f1acb0..7a3eccf 100644 --- a/src/components/FloatingToolbar.vue +++ b/src/components/FloatingToolbar.vue @@ -118,12 +118,13 @@ async function startGrading() { const questions = rubricData?.questions?.length ? JSON.parse(JSON.stringify(rubricData.questions)) : [{ questionTitle: '', maxScore: 100, referenceAnswer: '', rubric: '' }] + const nextIdx = Math.min(await window.electronAPI?.rubric.getNextIndex() ?? 0, questions.length - 1) gradingStore.setQuestions(questions) - gradingStore.setCurrentQuestionIndex(0) + gradingStore.setCurrentQuestionIndex(nextIdx) appStore.isGrading = true try { - const result = await gradeQuestion(0) + const result = await gradeQuestion(nextIdx) if (!result) return gradingStore.setResult(result) @@ -133,7 +134,7 @@ async function startGrading() { result, image: gradingStore.currentImage, questions, - currentQuestionIndex: 0 + currentQuestionIndex: nextIdx }) await window.electronAPI.dialog.open('result') } diff --git a/src/components/ResultDrawer.vue b/src/components/ResultDrawer.vue index 955196a..b3e6c7e 100644 --- a/src/components/ResultDrawer.vue +++ b/src/components/ResultDrawer.vue @@ -9,9 +9,9 @@