electronipchecker/src/main/preload.ts

58 lines
2.5 KiB
TypeScript

import { contextBridge, ipcRenderer } from 'electron'
import { IPC_CHANNELS } from '../shared/types'
import type { Channel, AppSettings, BurnVote, NotificationType } from '../shared/types'
// Expose protected methods to renderer
contextBridge.exposeInMainWorld('electron', {
// Window controls
minimize: () => ipcRenderer.send('window:minimize'),
maximize: () => ipcRenderer.send('window:maximize'),
close: () => ipcRenderer.send('window:close'),
// IP Service
getIpInfo: () => ipcRenderer.invoke(IPC_CHANNELS.GET_IP_INFO),
// Channel Management
parseM3u8: (url: string) => ipcRenderer.invoke(IPC_CHANNELS.PARSE_M3U8, url),
getChannels: () => ipcRenderer.invoke(IPC_CHANNELS.GET_CHANNELS),
updateChannel: (channel: Channel) => ipcRenderer.invoke(IPC_CHANNELS.UPDATE_CHANNEL, channel),
setChannelMonitored: (channelId: string, monitored: boolean) =>
ipcRenderer.invoke(IPC_CHANNELS.SET_MONITORED, channelId, monitored),
// Monitoring
startMonitoring: () => ipcRenderer.invoke(IPC_CHANNELS.START_MONITORING),
stopMonitoring: () => ipcRenderer.invoke(IPC_CHANNELS.STOP_MONITORING),
getMonitoringStatus: () => ipcRenderer.invoke(IPC_CHANNELS.GET_MONITORING_STATUS),
onMonitoringUpdate: (callback: (result: unknown) => void) => {
const handler = (_event: Electron.IpcRendererEvent, result: unknown) => callback(result)
ipcRenderer.on(IPC_CHANNELS.MONITORING_UPDATE, handler)
return () => ipcRenderer.removeListener(IPC_CHANNELS.MONITORING_UPDATE, handler)
},
// Ping
pingHost: (host: string) => ipcRenderer.invoke(IPC_CHANNELS.PING_HOST, host),
// Notifications
sendNotification: (title: string, body: string, type?: NotificationType) =>
ipcRenderer.invoke(IPC_CHANNELS.SEND_NOTIFICATION, title, body, type),
testNotification: (type: NotificationType) =>
ipcRenderer.invoke(IPC_CHANNELS.TEST_NOTIFICATION, type),
// Panel API
panelRegister: (config: unknown) => ipcRenderer.invoke(IPC_CHANNELS.PANEL_REGISTER, config),
panelGetIps: () => ipcRenderer.invoke(IPC_CHANNELS.PANEL_GET_IPS),
panelSendVote: (vote: BurnVote) => ipcRenderer.invoke(IPC_CHANNELS.PANEL_SEND_VOTE, vote),
// Settings
getSettings: () => ipcRenderer.invoke(IPC_CHANNELS.GET_SETTINGS),
saveSettings: (settings: AppSettings) => ipcRenderer.invoke(IPC_CHANNELS.SAVE_SETTINGS, settings),
// Error Log
getErrorLog: () => ipcRenderer.invoke('errorlog:get'),
clearErrorLog: () => ipcRenderer.invoke('errorlog:clear'),
// App Info
getAppInfo: () => ipcRenderer.invoke('app:info'),
})