init: AI Grading Assistant MVP
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
import { contextBridge, ipcRenderer } from 'electron'
|
||||
|
||||
contextBridge.exposeInMainWorld('electronAPI', {
|
||||
window: {
|
||||
dragMove: (deltaX: number, deltaY: number) => ipcRenderer.invoke('window:dragMove', { deltaX, deltaY }),
|
||||
dragEnd: (x: number, y: number) => ipcRenderer.invoke('window:dragEnd', { x, y })
|
||||
},
|
||||
|
||||
screenshot: {
|
||||
start: () => ipcRenderer.invoke('screenshot:start'),
|
||||
capture: (region: { x: number; y: number; width: number; height: number }) =>
|
||||
ipcRenderer.invoke('screenshot:capture', region),
|
||||
cancel: () => ipcRenderer.invoke('screenshot:cancel'),
|
||||
getLastImage: () => ipcRenderer.invoke('screenshot:getLastImage'),
|
||||
onCompleted: (callback: (base64: string) => void) => {
|
||||
const handler = (_event: any, base64: string) => callback(base64)
|
||||
ipcRenderer.on('screenshot:completed', handler)
|
||||
return () => ipcRenderer.removeListener('screenshot:completed', handler)
|
||||
}
|
||||
},
|
||||
|
||||
ai: {
|
||||
grade: (data: { imageBase64: string; rubric: string; apiConfig: { apiKey: string; baseUrl: string; model: string } }) =>
|
||||
ipcRenderer.invoke('ai:grade', data)
|
||||
},
|
||||
|
||||
settings: {
|
||||
get: () => ipcRenderer.invoke('settings:get'),
|
||||
set: (settings: Record<string, unknown>) => ipcRenderer.invoke('settings:set', settings),
|
||||
selectDirectory: () => ipcRenderer.invoke('settings:selectDirectory')
|
||||
},
|
||||
|
||||
history: {
|
||||
list: () => ipcRenderer.invoke('history:list'),
|
||||
delete: (id: number) => ipcRenderer.invoke('history:delete', id)
|
||||
},
|
||||
|
||||
grading: {
|
||||
submit: (data: {
|
||||
questionId: number
|
||||
imagePath: string
|
||||
aiScore: number
|
||||
teacherScore: number
|
||||
confidence: number
|
||||
studentAnswer?: string
|
||||
}) => ipcRenderer.invoke('grading:submit', data),
|
||||
storeData: (data: any) => ipcRenderer.invoke('grading:storeData', data),
|
||||
getData: () => ipcRenderer.invoke('grading:getData')
|
||||
},
|
||||
|
||||
rubric: {
|
||||
storeData: (data: any) => ipcRenderer.invoke('rubric:storeData', data),
|
||||
getData: () => ipcRenderer.invoke('rubric:getData')
|
||||
},
|
||||
|
||||
template: {
|
||||
list: () => ipcRenderer.invoke('template:list'),
|
||||
save: (data: { name: string; course: string }) => ipcRenderer.invoke('template:save', data)
|
||||
},
|
||||
|
||||
dialog: {
|
||||
open: (type: string, data?: any) => ipcRenderer.invoke('dialog:open', { type, data }),
|
||||
close: () => ipcRenderer.send('dialog:close'),
|
||||
getPayload: (type: string) => ipcRenderer.invoke('dialog:getPayload', type),
|
||||
openImage: () => ipcRenderer.invoke('dialog:openImage')
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user