mirror of
https://github.com/algerkong/AlgerMusicPlayer.git
synced 2026-07-09 02:57:31 +08:00
fix(mpris): 修复 MPRIS 模块多项安全和性能问题
- 将 fix-sandbox.js 从 postinstall 移除,避免 npm install 时执行 sudo - 修复 play/pause/stop 事件语义错误,不再全部映射到 togglePlay - 缓存平台信息避免 sendSync 阻塞渲染进程 - 修复 cleanupAppShortcuts 中缺少 MPRIS 监听器清理导致的事件泄漏 - destroyMpris 中添加 IPC 监听器清理 - 清理冗余调试日志,安全加载 dbus-native 模块 - 添加 mpris-service 类型声明解决跨平台类型检查问题
This commit is contained in:
@@ -54,6 +54,9 @@ export let artistList: ComputedRef<Artist[]>;
|
||||
|
||||
let lastIndex = -1;
|
||||
|
||||
// 缓存平台信息,避免每次歌词变化时同步 IPC 调用
|
||||
const cachedPlatform = isElectron ? window.electron.ipcRenderer.sendSync('get-platform') : 'web';
|
||||
|
||||
export const musicDB = await useIndexedDB(
|
||||
'musicDB',
|
||||
[
|
||||
@@ -831,14 +834,7 @@ export const sendLyricToWin = () => {
|
||||
|
||||
// 发送歌词到系统托盘歌词(TrayLyric)
|
||||
const sendTrayLyric = (index: number) => {
|
||||
const platformValue = window.electron.ipcRenderer.sendSync('get-platform');
|
||||
console.log(
|
||||
'[TrayLyric] sendTrayLyric called, isElectron:',
|
||||
isElectron,
|
||||
'platform:',
|
||||
platformValue
|
||||
);
|
||||
if (!isElectron || platformValue !== 'linux') return;
|
||||
if (!isElectron || cachedPlatform !== 'linux') return;
|
||||
|
||||
try {
|
||||
const lyric = lrcArray.value[index];
|
||||
|
||||
@@ -38,15 +38,23 @@ const onUpdateAppShortcuts = (_event: unknown, shortcuts: unknown) => {
|
||||
updateAppShortcuts(shortcuts);
|
||||
};
|
||||
|
||||
const onMprisSeek = (_event: unknown, position: number) => {
|
||||
const onMprisSeekOrSetPosition = (_event: unknown, position: number) => {
|
||||
if (audioService) {
|
||||
audioService.seek(position);
|
||||
}
|
||||
};
|
||||
|
||||
const onMprisSetPosition = (_event: unknown, position: number) => {
|
||||
if (audioService) {
|
||||
audioService.seek(position);
|
||||
const onMprisPlay = async () => {
|
||||
const playerStore = usePlayerStore();
|
||||
if (!playerStore.play && playerStore.playMusic?.id) {
|
||||
await playerStore.setPlay({ ...playerStore.playMusic });
|
||||
}
|
||||
};
|
||||
|
||||
const onMprisPause = async () => {
|
||||
const playerStore = usePlayerStore();
|
||||
if (playerStore.play) {
|
||||
await playerStore.handlePause();
|
||||
}
|
||||
};
|
||||
|
||||
@@ -205,8 +213,10 @@ export function initAppShortcuts() {
|
||||
|
||||
window.electron.ipcRenderer.on('global-shortcut', onGlobalShortcut);
|
||||
window.electron.ipcRenderer.on('update-app-shortcuts', onUpdateAppShortcuts);
|
||||
window.electron.ipcRenderer.on('mpris-seek', onMprisSeek);
|
||||
window.electron.ipcRenderer.on('mpris-set-position', onMprisSetPosition);
|
||||
window.electron.ipcRenderer.on('mpris-seek', onMprisSeekOrSetPosition);
|
||||
window.electron.ipcRenderer.on('mpris-set-position', onMprisSeekOrSetPosition);
|
||||
window.electron.ipcRenderer.on('mpris-play', onMprisPlay);
|
||||
window.electron.ipcRenderer.on('mpris-pause', onMprisPause);
|
||||
|
||||
const storedShortcuts = window.electron.ipcRenderer.sendSync('get-store-value', 'shortcuts');
|
||||
updateAppShortcuts(storedShortcuts);
|
||||
@@ -226,6 +236,10 @@ export function cleanupAppShortcuts() {
|
||||
|
||||
window.electron.ipcRenderer.removeListener('global-shortcut', onGlobalShortcut);
|
||||
window.electron.ipcRenderer.removeListener('update-app-shortcuts', onUpdateAppShortcuts);
|
||||
window.electron.ipcRenderer.removeListener('mpris-seek', onMprisSeekOrSetPosition);
|
||||
window.electron.ipcRenderer.removeListener('mpris-set-position', onMprisSeekOrSetPosition);
|
||||
window.electron.ipcRenderer.removeListener('mpris-play', onMprisPlay);
|
||||
window.electron.ipcRenderer.removeListener('mpris-pause', onMprisPause);
|
||||
|
||||
document.removeEventListener('keydown', handleKeyDown);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user