mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-10 04:30:25 +02:00
add subscribers for player repeat and shuffle
This commit is contained in:
@@ -5,13 +5,15 @@ import {
|
|||||||
subscribePlayerMute,
|
subscribePlayerMute,
|
||||||
subscribePlayerProgress,
|
subscribePlayerProgress,
|
||||||
subscribePlayerQueue,
|
subscribePlayerQueue,
|
||||||
|
subscribePlayerRepeat,
|
||||||
subscribePlayerSeekToTimestamp,
|
subscribePlayerSeekToTimestamp,
|
||||||
|
subscribePlayerShuffle,
|
||||||
subscribePlayerSpeed,
|
subscribePlayerSpeed,
|
||||||
subscribePlayerStatus,
|
subscribePlayerStatus,
|
||||||
subscribePlayerVolume,
|
subscribePlayerVolume,
|
||||||
} from '/@/renderer/store';
|
} from '/@/renderer/store';
|
||||||
import { QueueData, QueueSong } from '/@/shared/types/domain-types';
|
import { QueueData, QueueSong } from '/@/shared/types/domain-types';
|
||||||
import { PlayerStatus } from '/@/shared/types/types';
|
import { PlayerRepeat, PlayerShuffle, PlayerStatus } from '/@/shared/types/types';
|
||||||
|
|
||||||
interface PlayerEvents {
|
interface PlayerEvents {
|
||||||
cleanup: () => void;
|
cleanup: () => void;
|
||||||
@@ -25,11 +27,16 @@ interface PlayerEventsCallbacks {
|
|||||||
onPlayerMute?: (properties: { muted: boolean }, prev: { muted: boolean }) => void;
|
onPlayerMute?: (properties: { muted: boolean }, prev: { muted: boolean }) => void;
|
||||||
onPlayerProgress?: (properties: { timestamp: number }, prev: { timestamp: number }) => void;
|
onPlayerProgress?: (properties: { timestamp: number }, prev: { timestamp: number }) => void;
|
||||||
onPlayerQueueChange?: (queue: QueueData, prev: QueueData) => void;
|
onPlayerQueueChange?: (queue: QueueData, prev: QueueData) => void;
|
||||||
|
onPlayerRepeat?: (properties: { repeat: PlayerRepeat }, prev: { repeat: PlayerRepeat }) => void;
|
||||||
onPlayerSeek?: (properties: { seconds: number }, prev: { seconds: number }) => void;
|
onPlayerSeek?: (properties: { seconds: number }, prev: { seconds: number }) => void;
|
||||||
onPlayerSeekToTimestamp?: (
|
onPlayerSeekToTimestamp?: (
|
||||||
properties: { timestamp: number },
|
properties: { timestamp: number },
|
||||||
prev: { timestamp: number },
|
prev: { timestamp: number },
|
||||||
) => void;
|
) => void;
|
||||||
|
onPlayerShuffle?: (
|
||||||
|
properties: { shuffle: PlayerShuffle },
|
||||||
|
prev: { shuffle: PlayerShuffle },
|
||||||
|
) => void;
|
||||||
onPlayerSpeed?: (properties: { speed: number }, prev: { speed: number }) => void;
|
onPlayerSpeed?: (properties: { speed: number }, prev: { speed: number }) => void;
|
||||||
onPlayerStatus?: (properties: { status: PlayerStatus }, prev: { status: PlayerStatus }) => void;
|
onPlayerStatus?: (properties: { status: PlayerStatus }, prev: { status: PlayerStatus }) => void;
|
||||||
onPlayerVolume?: (properties: { volume: number }, prev: { volume: number }) => void;
|
onPlayerVolume?: (properties: { volume: number }, prev: { volume: number }) => void;
|
||||||
@@ -97,6 +104,18 @@ function createPlayerEvents(callbacks: PlayerEventsCallbacks): PlayerEvents {
|
|||||||
unsubscribers.push(unsubscribe);
|
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 {
|
return {
|
||||||
cleanup: () => {
|
cleanup: () => {
|
||||||
unsubscribers.forEach((unsubscribe) => unsubscribe());
|
unsubscribers.forEach((unsubscribe) => unsubscribe());
|
||||||
|
|||||||
@@ -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 = () => {
|
export const usePlayerProperties = () => {
|
||||||
return usePlayerStoreBase(
|
return usePlayerStoreBase(
|
||||||
useShallow((state) => ({
|
useShallow((state) => ({
|
||||||
|
|||||||
Reference in New Issue
Block a user