-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpreload.js
More file actions
45 lines (43 loc) · 2.82 KB
/
Copy pathpreload.js
File metadata and controls
45 lines (43 loc) · 2.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/**
* ╔══════════════════════════════════════════════════════════════════╗
* ║ AETHER — Preload Script (Context Bridge) ║
* ╠══════════════════════════════════════════════════════════════════╣
* ║ Exposes safe IPC methods to the renderer process. ║
* ║ contextIsolation: true — no direct Node access in renderer. ║
* ╚══════════════════════════════════════════════════════════════════╝
*
* DEVNOTES:
* - Window controls (min/max/close) use one-way IPC (send)
* - isMaximized uses two-way IPC (invoke) for return value
* - scanSheepFolder uses IPC invoke to main process (avoids sandbox issues)
* - All paths are normalized to forward slashes for cross-platform compat
*/
const { contextBridge, ipcRenderer } = require('electron');
contextBridge.exposeInMainWorld('electronAPI', {
minimize: () => ipcRenderer.send('window-minimize'),
maximize: () => ipcRenderer.send('window-maximize'),
close: () => ipcRenderer.send('window-close'),
isMaximized: () => ipcRenderer.invoke('window-is-maximized'),
onWindowState: (callback) => {
ipcRenderer.on('window-state', (_event, state) => callback(state));
},
// Electric Sheep: scan a folder for video files (via main process IPC)
scanSheepFolder: (folderPath) => ipcRenderer.invoke('scan-sheep-folder', folderPath),
// Native folder picker dialog
openFolderDialog: (title) => ipcRenderer.invoke('open-folder-dialog', title),
// Native file picker dialog (multi-select)
openFilesDialog: (title, extensions) => ipcRenderer.invoke('open-files-dialog', title, extensions),
// Wallpaper Engine: scan workshop folder for video wallpapers
scanWallpaperEngine: () => ipcRenderer.invoke('scan-wallpaper-engine'),
// Discord Rich Presence
connectDiscord: (appId) => ipcRenderer.invoke('connect-discord', appId),
setDiscordPresence: (trackData) => ipcRenderer.invoke('set-discord-presence', trackData),
clearDiscordPresence: () => ipcRenderer.invoke('clear-discord-presence'),
// Stem Isolation: check for pre-computed stems
checkStems: (opts) => ipcRenderer.invoke('check-stems', opts),
getStemPath: (opts) => ipcRenderer.invoke('get-stem-path', opts),
// Media key events from main process
onMediaKey: (callback) => ipcRenderer.on('media-key', (_event, action) => callback(action)),
// Mini Player — resize window + toggle always-on-top
setMiniPlayer: (active) => ipcRenderer.invoke('mini-player-toggle', active),
});