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
@@ -133,8 +133,6 @@ export function MpvPlayer() {
return () => clearInterval(interval);
}, [localPlayerStatus, setTimestamp]);
useMainPlayerListener();
const currentUrl = useSongUrl(currentSong, true, transcode);
const nextUrl = useSongUrl(nextSong, false, transcode);
@@ -230,8 +230,6 @@ export function WaveSurferPlayer() {
return () => clearInterval(interval);
}, [localPlayerStatus, num, setTimestamp, transitionType]);
useMainPlayerListener();
const player1Url = useSongUrl(player1, num === 1, transcode);
const player2Url = useSongUrl(player2, num === 2, transcode);
@@ -7,7 +7,6 @@ import {
WebPlayerEngine,
WebPlayerEngineHandle,
} from '/@/renderer/features/player/audio-player/engine/web-player-engine';
import { useMainPlayerListener } from '/@/renderer/features/player/audio-player/hooks/use-main-player-listener';
import { usePlayerEvents } from '/@/renderer/features/player/audio-player/hooks/use-player-events';
import { useSongUrl } from '/@/renderer/features/player/audio-player/hooks/use-stream-url';
import { PlayerOnProgressProps } from '/@/renderer/features/player/audio-player/types';
@@ -262,8 +261,6 @@ export function WebPlayer() {
return () => clearInterval(interval);
}, [localPlayerStatus, num, setTimestamp, transitionType]);
useMainPlayerListener();
const player1Url = useSongUrl(player1, num === 1, transcode);
const player2Url = useSongUrl(player2, num === 2, transcode);
@@ -3,6 +3,7 @@ import { useEffect } from 'react';
import { eventEmitter } from '/@/renderer/events/event-emitter';
import { UserFavoriteEventPayload, UserRatingEventPayload } from '/@/renderer/events/events';
import { useDiscordRpc } from '/@/renderer/features/discord-rpc/use-discord-rpc';
import { useMainPlayerListener } from '/@/renderer/features/player/audio-player/hooks/use-main-player-listener';
import { MpvPlayer } from '/@/renderer/features/player/audio-player/mpv-player';
import { WebPlayer } from '/@/renderer/features/player/audio-player/web-player';
import { useMediaSession } from '/@/renderer/features/player/hooks/use-media-session';
@@ -26,6 +27,7 @@ export const AudioPlayers = () => {
usePowerSaveBlocker();
useDiscordRpc();
useMPRIS();
useMainPlayerListener();
useMediaSession();
// Listen to favorite and rating events to update queue songs
@@ -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);
},
},
[],