mirror of
https://github.com/timeshiftsauce/CeruMusic.git
synced 2025-11-25 03:15:07 +08:00
107 lines
2.9 KiB
TypeScript
107 lines
2.9 KiB
TypeScript
import InitPluginService from './plugins'
|
||
import '../services/musicSdk/index'
|
||
import aiEvents from '../events/ai'
|
||
import { app, powerSaveBlocker } from 'electron'
|
||
import path from 'node:path'
|
||
import { type BrowserWindow, ipcMain } from 'electron'
|
||
export default function InitEventServices(mainWindow: BrowserWindow) {
|
||
InitPluginService()
|
||
aiEvents(mainWindow)
|
||
basisEvent(mainWindow)
|
||
}
|
||
|
||
function basisEvent(mainWindow: BrowserWindow) {
|
||
let psbId: number | null = null
|
||
// 复用主进程创建的托盘
|
||
let tray: any = (global as any).__ceru_tray__ || null
|
||
let isQuitting = false
|
||
// 托盘菜单与图标由主进程统一创建,这里不再重复创建
|
||
// 播放/暂停由主进程托盘菜单触发 'music-control' 事件
|
||
|
||
// 应用退出前的清理
|
||
app.on('before-quit', () => {
|
||
isQuitting = true
|
||
})
|
||
|
||
// 窗口控制 IPC 处理
|
||
ipcMain.on('window-minimize', () => {
|
||
mainWindow.minimize()
|
||
})
|
||
|
||
ipcMain.on('window-maximize', () => {
|
||
if (mainWindow.isMaximized()) {
|
||
mainWindow.unmaximize()
|
||
} else {
|
||
mainWindow.maximize()
|
||
}
|
||
})
|
||
|
||
ipcMain.on('window-close', () => {
|
||
mainWindow.close()
|
||
})
|
||
|
||
// Mini 模式 IPC 处理 - 最小化到系统托盘
|
||
ipcMain.on('window-mini-mode', (_, isMini) => {
|
||
if (mainWindow) {
|
||
if (isMini) {
|
||
// 进入 Mini 模式:隐藏窗口到系统托盘
|
||
mainWindow.hide()
|
||
// 显示托盘通知(可选)
|
||
tray = (global as any).__ceru_tray__ || tray
|
||
if (tray && tray.displayBalloon) {
|
||
tray.displayBalloon({
|
||
title: '澜音 Music',
|
||
content: '已最小化到系统托盘啦,点击托盘图标可重新打开~'
|
||
})
|
||
}
|
||
} else {
|
||
// 退出 Mini 模式:显示窗口
|
||
mainWindow.show()
|
||
mainWindow.focus()
|
||
}
|
||
}
|
||
})
|
||
|
||
// 全屏模式 IPC 处理
|
||
ipcMain.on('window-toggle-fullscreen', () => {
|
||
const isFullScreen = mainWindow.isFullScreen()
|
||
mainWindow.setFullScreen(!isFullScreen)
|
||
})
|
||
// 阻止窗口关闭,改为隐藏到系统托盘
|
||
mainWindow.on('close', (event) => {
|
||
if (!isQuitting) {
|
||
event.preventDefault()
|
||
mainWindow?.hide()
|
||
|
||
// 显示托盘通知
|
||
tray = (global as any).__ceru_tray__ || tray
|
||
if (tray && tray.displayBalloon) {
|
||
tray.displayBalloon({
|
||
title: 'Ceru Music',
|
||
content: '已最小化到系统托盘啦,点击托盘图标可重新打开~'
|
||
})
|
||
}
|
||
}
|
||
})
|
||
// 阻止系统息屏 IPC(开启/关闭)
|
||
ipcMain.handle('power-save-blocker:start', () => {
|
||
if (psbId == null) {
|
||
psbId = powerSaveBlocker.start('prevent-display-sleep')
|
||
}
|
||
return psbId
|
||
})
|
||
|
||
ipcMain.handle('power-save-blocker:stop', () => {
|
||
if (psbId != null && powerSaveBlocker.isStarted(psbId)) {
|
||
powerSaveBlocker.stop(psbId)
|
||
}
|
||
psbId = null
|
||
return true
|
||
})
|
||
|
||
// 获取应用版本号
|
||
ipcMain.handle('get-app-version', () => {
|
||
return app.getVersion()
|
||
})
|
||
}
|