fix mpris

This commit is contained in:
jeffvli
2025-11-29 21:35:09 -08:00
parent de3c7de7e5
commit 0b70ed158b
7 changed files with 94 additions and 22 deletions
@@ -1,8 +1,9 @@
import isElectron from 'is-electron';
import { useEffect } from 'react';
import { useEffect, useRef } from 'react';
import { usePlayerEvents } from '/@/renderer/features/player/audio-player/hooks/use-player-events';
import { usePlayerStore } from '/@/renderer/store';
import { PlayerShuffle } from '/@/shared/types/types';
const ipc = isElectron() ? window.api.ipc : null;
const utils = isElectron() ? window.api.utils : null;
@@ -16,6 +17,14 @@ export const useMPRIS = () => {
return;
}
mpris?.requestPosition((_e: unknown, data: { position: number }) => {
player.mediaSeekToTimestamp(data.position);
});
mpris?.requestSeek((_e: unknown, data: { offset: number }) => {
player.mediaSkipForward(data.offset);
});
mpris?.requestToggleRepeat(() => {
player.toggleRepeat();
});
@@ -27,11 +36,38 @@ export const useMPRIS = () => {
return () => {
ipc?.removeAllListeners('mpris-request-toggle-repeat');
ipc?.removeAllListeners('mpris-request-toggle-shuffle');
ipc?.removeAllListeners('request-position');
ipc?.removeAllListeners('request-seek');
};
}, [player]);
const isInitializedRef = useRef(false);
useEffect(() => {
if (isInitializedRef.current) {
return;
}
isInitializedRef.current = true;
const currentSong = player.getCurrentSong();
if (!currentSong) {
return;
}
mpris?.updateSong(currentSong);
}, [player]);
usePlayerEvents(
{
onCurrentSongChange: (properties) => {
if (!mpris) {
return;
}
mpris?.updateSong(properties.song);
},
onPlayerProgress: (properties) => {
if (!mpris) {
return;
@@ -40,12 +76,12 @@ export const useMPRIS = () => {
const timestamp = properties.timestamp;
mpris?.updatePosition(timestamp);
},
onPlayerRepeat: () => {
onPlayerRepeat: (properties) => {
if (!mpris) {
return;
}
mpris?.toggleRepeat();
mpris?.updateRepeat(properties.repeat);
},
onPlayerSeek: (properties) => {
if (!mpris) {
@@ -55,12 +91,27 @@ export const useMPRIS = () => {
const seconds = properties.seconds;
mpris?.updateSeek(seconds);
},
onPlayerShuffle: () => {
onPlayerShuffle: (properties) => {
if (!mpris) {
return;
}
mpris?.toggleShuffle();
const isShuffleEnabled = properties.shuffle !== PlayerShuffle.NONE;
mpris?.updateShuffle(isShuffleEnabled);
},
onPlayerStatus: (properties) => {
if (!mpris) {
return;
}
mpris?.updateStatus(properties.status);
},
onPlayerVolume: (properties) => {
if (!mpris) {
return;
}
mpris?.updateVolume(properties.volume);
},
},
[],