Files
AI-Grading-Assistant/electron/preload/preload.ts
T

68 lines
2.4 KiB
TypeScript

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')
}
})