add subscribers for player repeat and shuffle

This commit is contained in:
jeffvli
2025-11-05 19:44:30 -08:00
parent 6ced14d0e8
commit 7cd012de70
2 changed files with 42 additions and 1 deletions
@@ -5,13 +5,15 @@ import {
subscribePlayerMute,
subscribePlayerProgress,
subscribePlayerQueue,
subscribePlayerRepeat,
subscribePlayerSeekToTimestamp,
subscribePlayerShuffle,
subscribePlayerSpeed,
subscribePlayerStatus,
subscribePlayerVolume,
} from '/@/renderer/store';
import { QueueData, QueueSong } from '/@/shared/types/domain-types';
import { PlayerStatus } from '/@/shared/types/types';
import { PlayerRepeat, PlayerShuffle, PlayerStatus } from '/@/shared/types/types';
interface PlayerEvents {
cleanup: () => void;
@@ -25,11 +27,16 @@ interface PlayerEventsCallbacks {
onPlayerMute?: (properties: { muted: boolean }, prev: { muted: boolean }) => void;
onPlayerProgress?: (properties: { timestamp: number }, prev: { timestamp: number }) => void;
onPlayerQueueChange?: (queue: QueueData, prev: QueueData) => void;
onPlayerRepeat?: (properties: { repeat: PlayerRepeat }, prev: { repeat: PlayerRepeat }) => void;
onPlayerSeek?: (properties: { seconds: number }, prev: { seconds: number }) => void;
onPlayerSeekToTimestamp?: (
properties: { timestamp: number },
prev: { timestamp: number },
) => void;
onPlayerShuffle?: (
properties: { shuffle: PlayerShuffle },
prev: { shuffle: PlayerShuffle },
) => void;
onPlayerSpeed?: (properties: { speed: number }, prev: { speed: number }) => void;
onPlayerStatus?: (properties: { status: PlayerStatus }, prev: { status: PlayerStatus }) => void;
onPlayerVolume?: (properties: { volume: number }, prev: { volume: number }) => void;
@@ -97,6 +104,18 @@ function createPlayerEvents(callbacks: PlayerEventsCallbacks): PlayerEvents {
unsubscribers.push(unsubscribe);
}
// Subscribe to repeat changes
if (callbacks.onPlayerRepeat) {
const unsubscribe = subscribePlayerRepeat(callbacks.onPlayerRepeat);
unsubscribers.push(unsubscribe);
}
// Subscribe to shuffle changes
if (callbacks.onPlayerShuffle) {
const unsubscribe = subscribePlayerShuffle(callbacks.onPlayerShuffle);
unsubscribers.push(unsubscribe);
}
return {
cleanup: () => {
unsubscribers.forEach((unsubscribe) => unsubscribe());
+22
View File
@@ -1245,6 +1245,28 @@ export const subscribePlayerSpeed = (
);
};
export const subscribePlayerRepeat = (
onChange: (properties: { repeat: PlayerRepeat }, prev: { repeat: PlayerRepeat }) => void,
) => {
return usePlayerStoreBase.subscribe(
(state) => state.player.repeat,
(repeat, prevRepeat) => {
onChange({ repeat }, { repeat: prevRepeat });
},
);
};
export const subscribePlayerShuffle = (
onChange: (properties: { shuffle: PlayerShuffle }, prev: { shuffle: PlayerShuffle }) => void,
) => {
return usePlayerStoreBase.subscribe(
(state) => state.player.shuffle,
(shuffle, prevShuffle) => {
onChange({ shuffle }, { shuffle: prevShuffle });
},
);
};
export const usePlayerProperties = () => {
return usePlayerStoreBase(
useShallow((state) => ({