Files
prism/src/preload/index.ts
T
2026-03-21 01:08:26 -04:00

33 lines
1.6 KiB
TypeScript

import { contextBridge, ipcRenderer } from 'electron'
// Expose Electron API to renderer
contextBridge.exposeInMainWorld('electronAPI', {
platform: process.platform,
minimize: () => ipcRenderer.send('window:minimize'),
close: () => ipcRenderer.send('window:close'),
toggleAlwaysOnTop: () => ipcRenderer.send('window:toggle-always-on-top'),
isAlwaysOnTop: () => ipcRenderer.invoke('window:is-always-on-top'),
getDesktopSources: () => ipcRenderer.invoke('audio:get-desktop-sources') as Promise<{ id: string; name: string }[]>,
expandSettings: (panelHeight: number) => ipcRenderer.send('window:expand-settings', panelHeight),
collapseSettings: (panelHeight: number) => ipcRenderer.send('window:collapse-settings', panelHeight),
onAlwaysOnTopChanged: (callback: (isOnTop: boolean) => void) => {
const handler = (_event: Electron.IpcRendererEvent, isOnTop: boolean): void => callback(isOnTop)
ipcRenderer.on('window:always-on-top-changed', handler)
return () => ipcRenderer.removeListener('window:always-on-top-changed', handler)
},
})
// Native DSP module — load if available, gracefully degrade if not
let visualizerDSP: unknown = null
try {
const isDev = process.env.NODE_ENV === 'development'
const modulePath = isDev
? require('path').join(__dirname, '../../native/build/Release/visualizer_dsp.node')
: require('path').join(process.resourcesPath!, 'native/visualizer_dsp.node')
visualizerDSP = require(modulePath)
} catch {
console.warn('Native DSP module not available — using JS fallback')
}
contextBridge.exposeInMainWorld('visualizerAPI', visualizerDSP)