mirror of
https://github.com/algerkong/AlgerMusicPlayer.git
synced 2026-04-23 23:57:22 +08:00
@@ -8,6 +8,7 @@ import { loadLyricWindow } from './lyric';
|
||||
import { initializeConfig } from './modules/config';
|
||||
import { initializeFileManager } from './modules/fileManager';
|
||||
import { initializeFonts } from './modules/fonts';
|
||||
import { initializeLoginWindow } from './modules/loginWindow';
|
||||
import { initializeRemoteControl } from './modules/remoteControl';
|
||||
import { initializeShortcuts, registerShortcuts } from './modules/shortcuts';
|
||||
import { initializeTray, updateCurrentSong, updatePlayState, updateTrayMenu } from './modules/tray';
|
||||
@@ -41,6 +42,8 @@ function initialize() {
|
||||
initializeWindowManager();
|
||||
// 初始化字体管理
|
||||
initializeFonts();
|
||||
// 初始化登录窗口
|
||||
initializeLoginWindow();
|
||||
|
||||
// 创建主窗口
|
||||
mainWindow = createMainWindow(icon);
|
||||
|
||||
@@ -0,0 +1,104 @@
|
||||
import { BrowserWindow, ipcMain, session } from 'electron';
|
||||
import { join } from 'path';
|
||||
|
||||
import i18n from '../../i18n/main';
|
||||
|
||||
let loginWindow: BrowserWindow | null = null;
|
||||
|
||||
const loginUrl = 'https://music.163.com/#/login/';
|
||||
const loginTitle = i18n.global.t('login.qrTitle');
|
||||
|
||||
/**
|
||||
* 打开登录窗口获取Cookie
|
||||
*/
|
||||
const openLoginWindow = async (mainWin: BrowserWindow) => {
|
||||
let loginTimer: NodeJS.Timeout;
|
||||
|
||||
// 如果登录窗口已存在,则聚焦并返回
|
||||
if (loginWindow && !loginWindow.isDestroyed()) {
|
||||
loginWindow.focus();
|
||||
return;
|
||||
}
|
||||
|
||||
const loginSession = session.fromPartition('persist:login');
|
||||
|
||||
// 清除 Cookie
|
||||
await loginSession.clearStorageData({
|
||||
storages: ['cookies', 'localstorage'],
|
||||
});
|
||||
|
||||
loginWindow = new BrowserWindow({
|
||||
parent: mainWin,
|
||||
title: loginTitle,
|
||||
width: 1280,
|
||||
height: 800,
|
||||
center: true,
|
||||
autoHideMenuBar: true,
|
||||
webPreferences: {
|
||||
session: loginSession,
|
||||
sandbox: false,
|
||||
webSecurity: false,
|
||||
preload: join(__dirname, '../../preload/index.js'),
|
||||
},
|
||||
});
|
||||
|
||||
// 打开网易云登录页面
|
||||
loginWindow.loadURL(loginUrl);
|
||||
|
||||
// 阻止新窗口创建
|
||||
loginWindow.webContents.setWindowOpenHandler(() => {
|
||||
return { action: 'deny' };
|
||||
});
|
||||
|
||||
// 检查是否登录
|
||||
const checkLogin = async () => {
|
||||
try {
|
||||
if (!loginWindow || loginWindow.isDestroyed()) {
|
||||
if (loginTimer) clearInterval(loginTimer);
|
||||
return;
|
||||
}
|
||||
|
||||
const MUSIC_U = await loginSession.cookies.get({
|
||||
name: 'MUSIC_U',
|
||||
});
|
||||
|
||||
if (MUSIC_U && MUSIC_U?.length > 0) {
|
||||
if (loginTimer) clearInterval(loginTimer);
|
||||
const value = `MUSIC_U=${MUSIC_U[0].value};`;
|
||||
|
||||
mainWin?.webContents.send('send-cookies', value);
|
||||
|
||||
// 关闭登录窗口
|
||||
loginWindow.destroy();
|
||||
loginWindow = null;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('检查登录状态失败:', error);
|
||||
}
|
||||
};
|
||||
|
||||
// 循环检查登录状态
|
||||
loginWindow.webContents.once('did-finish-load', () => {
|
||||
loginWindow?.show();
|
||||
loginTimer = setInterval(checkLogin, 500);
|
||||
|
||||
loginWindow?.on('closed', () => {
|
||||
if (loginTimer) clearInterval(loginTimer);
|
||||
loginWindow = null;
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 初始化登录窗口相关的IPC监听
|
||||
*/
|
||||
export function initializeLoginWindow() {
|
||||
ipcMain.on('open-login', (event) => {
|
||||
const mainWin = BrowserWindow.fromWebContents(event.sender);
|
||||
if (mainWin) {
|
||||
openLoginWindow(mainWin);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
export default openLoginWindow;
|
||||
Reference in New Issue
Block a user