add mpris

This commit is contained in:
jeffvli
2025-11-28 14:29:27 -08:00
parent f0c35be21f
commit 212d9e9f55
2 changed files with 70 additions and 0 deletions
@@ -5,6 +5,7 @@ import { UserFavoriteEventPayload, UserRatingEventPayload } from '/@/renderer/ev
import { useDiscordRpc } from '/@/renderer/features/discord-rpc/use-discord-rpc';
import { MpvPlayer } from '/@/renderer/features/player/audio-player/mpv-player';
import { WebPlayer } from '/@/renderer/features/player/audio-player/web-player';
import { useMPRIS } from '/@/renderer/features/player/hooks/use-mpris';
import { usePowerSaveBlocker } from '/@/renderer/features/player/hooks/use-power-save-blocker';
import { useScrobble } from '/@/renderer/features/player/hooks/use-scrobble';
import {
@@ -23,6 +24,7 @@ export const AudioPlayers = () => {
useScrobble();
usePowerSaveBlocker();
useDiscordRpc();
useMPRIS();
// Listen to favorite and rating events to update queue songs
useEffect(() => {
@@ -0,0 +1,68 @@
import isElectron from 'is-electron';
import { useEffect } from 'react';
import { usePlayerEvents } from '/@/renderer/features/player/audio-player/hooks/use-player-events';
import { usePlayerStore } from '/@/renderer/store';
const ipc = isElectron() ? window.api.ipc : null;
const utils = isElectron() ? window.api.utils : null;
const mpris = isElectron() && utils?.isLinux() ? window.api.mpris : null;
export const useMPRIS = () => {
const player = usePlayerStore();
useEffect(() => {
if (!mpris) {
return;
}
mpris?.requestToggleRepeat(() => {
player.toggleRepeat();
});
mpris?.requestToggleShuffle(() => {
player.toggleShuffle();
});
return () => {
ipc?.removeAllListeners('mpris-request-toggle-repeat');
ipc?.removeAllListeners('mpris-request-toggle-shuffle');
};
}, [player]);
usePlayerEvents(
{
onPlayerProgress: (properties) => {
if (!mpris) {
return;
}
const timestamp = properties.timestamp;
mpris?.updatePosition(timestamp);
},
onPlayerRepeat: () => {
if (!mpris) {
return;
}
mpris?.toggleRepeat();
},
onPlayerSeek: (properties) => {
if (!mpris) {
return;
}
const seconds = properties.seconds;
mpris?.updateSeek(seconds);
},
onPlayerShuffle: () => {
if (!mpris) {
return;
}
mpris?.toggleShuffle();
},
},
[],
);
};