diff --git a/src/preload/index.ts b/src/preload/index.ts new file mode 100644 index 0000000..3f64011 --- /dev/null +++ b/src/preload/index.ts @@ -0,0 +1,44 @@ +import { contextBridge, ipcRenderer } from 'electron' + +contextBridge.exposeInMainWorld('electronAPI', { + // 窗口控制 + minimizeWindow: () => ipcRenderer.send('window-minimize'), + maximizeWindow: () => ipcRenderer.send('window-maximize'), + closeWindow: () => ipcRenderer.send('window-close'), + isMaximized: () => ipcRenderer.invoke('window-is-maximized'), + + // qzplayer Control + qzplayer: { + load: (url: string) => ipcRenderer.invoke('qzplayer-load', url), + play: () => ipcRenderer.invoke('qzplayer-play'), + pause: () => ipcRenderer.invoke('qzplayer-pause'), + togglePause: () => ipcRenderer.invoke('qzplayer-toggle-pause'), + stop: () => ipcRenderer.invoke('qzplayer-stop'), + setVolume: (vol: number) => ipcRenderer.invoke('qzplayer-set-volume', vol), + seek: (time: number) => ipcRenderer.invoke('qzplayer-seek', time), + onEvent: (callback: (event: any, data: any) => void) => ipcRenderer.on('qzplayer-event', callback) + }, + + // Plugin System + plugin: { + call: (pluginId: string, method: string, args: any[]) => ipcRenderer.invoke('plugin:call', pluginId, method, args), + search: (pluginId: string, query: string, page: number, limit: number) => ipcRenderer.invoke('plugin:call', pluginId, 'search', [query, page, limit]), + getLyric: (pluginId: string, id: string) => ipcRenderer.invoke('plugin:call', pluginId, 'getLyric', [id]), + }, + + // Cache Control + getCacheInfo: () => ipcRenderer.invoke('cache:getInfo'), + setCachePersist: (persist: boolean) => ipcRenderer.invoke('cache:setPersist', persist), + openCacheFolder: () => ipcRenderer.invoke('cache:openFolder'), + clearCache: () => ipcRenderer.invoke('cache:clear'), + + // Settings + settings: { + getAll: () => ipcRenderer.invoke('settings:getAll'), + set: (settings: any) => ipcRenderer.invoke('settings:set', settings), + getTheme: () => ipcRenderer.invoke('settings:getTheme'), + setTheme: (theme: 'dark' | 'light') => ipcRenderer.invoke('settings:setTheme', theme), + getAccentColor: () => ipcRenderer.invoke('settings:getAccentColor'), + setAccentColor: (color: string) => ipcRenderer.invoke('settings:setAccentColor', color) + } +}) \ No newline at end of file diff --git a/src/renderer/src/components/PlayerBar.vue b/src/renderer/src/components/PlayerBar.vue index af7cee6..10b5d1e 100644 --- a/src/renderer/src/components/PlayerBar.vue +++ b/src/renderer/src/components/PlayerBar.vue @@ -190,6 +190,7 @@ const formatTime = (seconds2: number) => {