Files
AlgerMusicPlayer/src/main/index.ts

199 lines
5.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { electronApp, optimizer } from '@electron-toolkit/utils';
import { app, ipcMain, nativeImage, session } from 'electron';
import { join } from 'path';
import type { Language } from '../i18n/main';
import i18n from '../i18n/main';
import { loadLyricWindow } from './lyric';
import { initializeCacheManager } from './modules/cache';
import { initializeConfig } from './modules/config';
import { initializeFileManager } from './modules/fileManager';
import { initializeFonts } from './modules/fonts';
import { initializeLocalMusicScanner } from './modules/localMusicScanner';
import { initializeLoginWindow } from './modules/loginWindow';
import { initLxMusicHttp } from './modules/lxMusicHttp';
import { initializeOtherApi } from './modules/otherApi';
import { initializeRemoteControl } from './modules/remoteControl';
import { initializeShortcuts } from './modules/shortcuts';
import { initializeTray, updateCurrentSong, updatePlayState, updateTrayMenu } from './modules/tray';
import { setupUpdateHandlers } from './modules/update';
import { createMainWindow, initializeWindowManager, setAppQuitting } from './modules/window';
import { initWindowSizeManager } from './modules/window-size';
import { startMusicApi } from './server';
// 导入所有图标
const iconPath = join(__dirname, '../../resources');
const icon = nativeImage.createFromPath(
process.platform === 'darwin' ? join(iconPath, 'icon.icns') : join(iconPath, 'icon.png')
);
let mainWindow: Electron.BrowserWindow;
// 初始化应用
function initialize(configStore: any) {
// 使用已初始化的配置存储
const store = configStore;
// 设置初始语言
const savedLanguage = store.get('set.language') as Language;
if (savedLanguage) {
i18n.global.locale = savedLanguage;
}
// 初始化文件管理
initializeFileManager();
// 初始化歌词缓存管理
initializeCacheManager();
// 初始化其他 API (搜索建议等)
initializeOtherApi();
// 初始化窗口管理
initializeWindowManager();
// 初始化字体管理
initializeFonts();
// 初始化登录窗口
initializeLoginWindow();
// 初始化本地音乐扫描模块
initializeLocalMusicScanner();
// 创建主窗口
mainWindow = createMainWindow(icon);
// 初始化托盘
initializeTray(iconPath, mainWindow);
// 启动音乐API
startMusicApi();
// 初始化落雪音乐 HTTP 请求处理
initLxMusicHttp();
// 加载歌词窗口
loadLyricWindow(ipcMain, mainWindow);
// 初始化快捷键
initializeShortcuts(mainWindow);
// 初始化远程控制服务
initializeRemoteControl(mainWindow);
// 初始化更新处理程序
setupUpdateHandlers(mainWindow);
}
// 检查是否为第一个实例
const isSingleInstance = app.requestSingleInstanceLock();
if (!isSingleInstance) {
app.quit();
} else {
// 在应用准备就绪前初始化GPU加速设置
// 必须在 app.ready 之前调用 disableHardwareAcceleration
try {
// 初始化配置管理以获取GPU加速设置
const store = initializeConfig();
const enableGpuAcceleration = store.get('set.enableGpuAcceleration', true) as boolean;
if (!enableGpuAcceleration) {
console.log('GPU加速已禁用');
app.disableHardwareAcceleration();
} else {
console.log('GPU加速已启用');
}
} catch (error) {
console.error('GPU加速设置初始化失败:', error);
// 如果配置读取失败默认启用GPU加速
}
// 当第二个实例启动时,将焦点转移到第一个实例的窗口
app.on('second-instance', () => {
if (mainWindow) {
if (mainWindow.isMinimized()) {
mainWindow.restore();
}
mainWindow.show();
mainWindow.focus();
}
});
// 应用程序准备就绪时的处理
app.whenReady().then(() => {
// 设置应用ID
electronApp.setAppUserModelId('com.alger.music');
// 监听窗口创建事件
app.on('browser-window-created', (_, window) => {
optimizer.watchWindowShortcuts(window);
});
// 初始化窗口大小管理器
initWindowSizeManager();
// 设置媒体设备权限 - 允许枚举音频输出设备
session.defaultSession.setPermissionRequestHandler((_webContents, permission, callback) => {
if (permission === ('media' as any) || permission === ('audioCapture' as any)) {
callback(true);
return;
}
callback(true);
});
session.defaultSession.setPermissionCheckHandler(() => {
return true;
});
// 重新初始化配置管理以获取完整的配置存储
const store = initializeConfig();
// 初始化应用
initialize(store);
// macOS 激活应用时的处理
app.on('activate', () => {
if (mainWindow === null) initialize(store);
});
});
// 监听语言切换
ipcMain.on('change-language', (_, locale: Language) => {
// 更新主进程的语言设置
i18n.global.locale = locale;
// 更新托盘菜单
updateTrayMenu(mainWindow);
// 通知所有窗口语言已更改
mainWindow?.webContents.send('language-changed', locale);
});
// 监听播放状态变化
ipcMain.on('update-play-state', (_, playing: boolean) => {
updatePlayState(playing);
});
// 监听当前歌曲变化
ipcMain.on('update-current-song', (_, song: any) => {
updateCurrentSong(song);
});
// 所有窗口关闭时的处理
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit();
}
});
// 应用即将退出时的处理
app.on('before-quit', () => {
// 设置退出标志
setAppQuitting(true);
});
// 重启应用
ipcMain.on('restart', () => {
app.relaunch();
app.exit(0);
});
// 获取系统架构信息
ipcMain.on('get-arch', (event) => {
event.returnValue = process.arch;
});
}