mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-07 04:20:12 +02:00
clean up unused files
This commit is contained in:
@@ -1,9 +0,0 @@
|
||||
import { createContext } from 'react';
|
||||
|
||||
import { PlayQueueAddOptions } from '/@/shared/types/types';
|
||||
|
||||
export const PlayQueueHandlerContext = createContext<{
|
||||
handlePlayQueueAdd: ((options: PlayQueueAddOptions) => void) | undefined;
|
||||
}>({
|
||||
handlePlayQueueAdd: undefined,
|
||||
});
|
||||
@@ -1,771 +0,0 @@
|
||||
// import isElectron from 'is-electron';
|
||||
// import debounce from 'lodash/debounce';
|
||||
// import { useCallback, useEffect } from 'react';
|
||||
// import { useTranslation } from 'react-i18next';
|
||||
|
||||
// import { useScrobble } from '/@/renderer/features/player/hooks/use-scrobble';
|
||||
// import { updateSong } from '/@/renderer/features/plaayer/update-remote-song';
|
||||
// import {
|
||||
// usePlayerNum,
|
||||
// usePlayerStatus,
|
||||
// usePlayerQueue,
|
||||
// usePlayerControls,
|
||||
// usePlayerStore,
|
||||
// useRepeatStatus,
|
||||
// useSetCurrentTime,
|
||||
// useShuffleStatus,
|
||||
// } from '/@/renderer/store';
|
||||
// import { usePlaybackType } from '/@/renderer/store/settings.store';
|
||||
// import { setAutoNext, setQueue, setQueueNext } from '/@/renderer/utils/set-transcoded-queue-data';
|
||||
// import { toast } from '/@/shared/components/toast/toast';
|
||||
// import { PlaybackType, PlayerRepeat, PlayerShuffle, PlayerStatus } from '/@/shared/types/types';
|
||||
|
||||
// const mpvPlayer = isElectron() ? window.api.mpvPlayer : null;
|
||||
// const mpvPlayerListener = isElectron() ? window.api.mpvPlayerListener : null;
|
||||
// const ipc = isElectron() ? window.api.ipc : null;
|
||||
// const utils = isElectron() ? window.api.utils : null;
|
||||
// const mpris = isElectron() && utils?.isLinux() ? window.api.mpris : null;
|
||||
// const remote = isElectron() ? window.api.remote : null;
|
||||
// const mediaSession = navigator.mediaSession;
|
||||
|
||||
// export const useCenterControls = (args: { playersRef: any }) => {
|
||||
// const { t } = useTranslation();
|
||||
// const { playersRef } = args;
|
||||
|
||||
// const currentPlayer = usePlayerNum();
|
||||
// const { autoNext, next, pause, play, previous, setCurrentIndex, setRepeat, setShuffle } =
|
||||
// usePlayerControls();
|
||||
// const setCurrentTime = useSetCurrentTime();
|
||||
// const queue = usePlayerQueue();
|
||||
// const playerStatus = usePlayerStatus();
|
||||
// const repeatStatus = useRepeatStatus();
|
||||
// const shuffleStatus = useShuffleStatus();
|
||||
// const playbackType = usePlaybackType();
|
||||
// const player1Ref = playersRef?.current?.player1;
|
||||
// const player2Ref = playersRef?.current?.player2;
|
||||
// const currentPlayerRef = currentPlayer === 1 ? player1Ref : player2Ref;
|
||||
// const nextPlayerRef = currentPlayer === 1 ? player2Ref : player1Ref;
|
||||
|
||||
// const { handleScrobbleFromSeek, handleScrobbleFromSongRestart } = useScrobble();
|
||||
|
||||
// useEffect(() => {
|
||||
// if (mediaSession) {
|
||||
// mediaSession.playbackState =
|
||||
// playerStatus === PlayerStatus.PLAYING ? 'playing' : 'paused';
|
||||
// }
|
||||
|
||||
// remote?.updatePlayback(playerStatus);
|
||||
// }, [playerStatus]);
|
||||
|
||||
// useEffect(() => {
|
||||
// remote?.updateRepeat(repeatStatus);
|
||||
// }, [repeatStatus]);
|
||||
|
||||
// useEffect(() => {
|
||||
// remote?.updateShuffle(shuffleStatus !== PlayerShuffle.NONE);
|
||||
// }, [shuffleStatus]);
|
||||
|
||||
// const resetPlayers = useCallback(() => {
|
||||
// if (player1Ref.getInternalPlayer()) {
|
||||
// player1Ref.getInternalPlayer().currentTime = 0;
|
||||
// player1Ref.getInternalPlayer().pause();
|
||||
// }
|
||||
|
||||
// if (player2Ref.getInternalPlayer()) {
|
||||
// player2Ref.getInternalPlayer().currentTime = 0;
|
||||
// player2Ref.getInternalPlayer().pause();
|
||||
// }
|
||||
// }, [player1Ref, player2Ref]);
|
||||
|
||||
// const resetNextPlayer = useCallback(() => {
|
||||
// currentPlayerRef.getInternalPlayer().volume = 0.1;
|
||||
|
||||
// const nextPlayer = nextPlayerRef.getInternalPlayer();
|
||||
// if (nextPlayer) {
|
||||
// nextPlayer.currentTime = 0;
|
||||
// nextPlayer.pause();
|
||||
// }
|
||||
// }, [currentPlayerRef, nextPlayerRef]);
|
||||
|
||||
// const stopPlayback = useCallback(() => {
|
||||
// player1Ref.getInternalPlayer().pause();
|
||||
// player2Ref.getInternalPlayer().pause();
|
||||
// resetPlayers();
|
||||
// }, [player1Ref, player2Ref, resetPlayers]);
|
||||
|
||||
// const isMpvPlayer = isElectron() && playbackType === PlaybackType.LOCAL;
|
||||
|
||||
// const handlePlay = useCallback(() => {
|
||||
// if (isMpvPlayer) {
|
||||
// mpvPlayer?.volume(usePlayerStore.getState().volume);
|
||||
// mpvPlayer!.play();
|
||||
// } else {
|
||||
// currentPlayerRef
|
||||
// .getInternalPlayer()
|
||||
// ?.play()
|
||||
// .catch(() => {});
|
||||
// }
|
||||
|
||||
// play();
|
||||
// }, [currentPlayerRef, isMpvPlayer, play]);
|
||||
|
||||
// const handlePause = useCallback(() => {
|
||||
// if (isMpvPlayer) {
|
||||
// mpvPlayer!.pause();
|
||||
// }
|
||||
|
||||
// pause();
|
||||
// }, [isMpvPlayer, pause]);
|
||||
|
||||
// const handleStop = useCallback(() => {
|
||||
// if (isMpvPlayer) {
|
||||
// mpvPlayer!.stop();
|
||||
// } else {
|
||||
// stopPlayback();
|
||||
// }
|
||||
|
||||
// setCurrentTime(0);
|
||||
// pause();
|
||||
// }, [isMpvPlayer, pause, setCurrentTime, stopPlayback]);
|
||||
|
||||
// const handleToggleShuffle = useCallback(() => {
|
||||
// if (shuffleStatus === PlayerShuffle.NONE) {
|
||||
// const playerData = setShuffle(PlayerShuffle.TRACK);
|
||||
// remote?.updateShuffle(true);
|
||||
// return setQueueNext(playerData);
|
||||
// }
|
||||
|
||||
// const playerData = setShuffle(PlayerShuffle.NONE);
|
||||
// remote?.updateShuffle(false);
|
||||
// return setQueueNext(playerData);
|
||||
// }, [setShuffle, shuffleStatus]);
|
||||
|
||||
// const handleToggleRepeat = useCallback(() => {
|
||||
// if (repeatStatus === PlayerRepeat.NONE) {
|
||||
// const playerData = setRepeat(PlayerRepeat.ALL);
|
||||
// remote?.updateRepeat(PlayerRepeat.ALL);
|
||||
// return setQueueNext(playerData);
|
||||
// }
|
||||
|
||||
// if (repeatStatus === PlayerRepeat.ALL) {
|
||||
// const playerData = setRepeat(PlayerRepeat.ONE);
|
||||
// remote?.updateRepeat(PlayerRepeat.ONE);
|
||||
// return setQueueNext(playerData);
|
||||
// }
|
||||
|
||||
// const playerData = setRepeat(PlayerRepeat.NONE);
|
||||
// remote?.updateRepeat(PlayerRepeat.NONE);
|
||||
// return setQueueNext(playerData);
|
||||
// }, [repeatStatus, setRepeat]);
|
||||
|
||||
// const checkIsLastTrack = useCallback(() => {
|
||||
// return usePlayerStore.getState().actions.checkIsLastTrack();
|
||||
// }, []);
|
||||
|
||||
// const checkIsFirstTrack = useCallback(() => {
|
||||
// return usePlayerStore.getState().actions.checkIsFirstTrack();
|
||||
// }, []);
|
||||
|
||||
// const handleAutoNext = useCallback(() => {
|
||||
// const isLastTrack = checkIsLastTrack();
|
||||
|
||||
// const handleRepeatAll = {
|
||||
// local: () => {
|
||||
// const playerData = autoNext();
|
||||
// updateSong(playerData.current.song);
|
||||
// setAutoNext(playerData);
|
||||
// play();
|
||||
// },
|
||||
// web: () => {
|
||||
// const playerData = autoNext();
|
||||
// updateSong(playerData.current.song);
|
||||
// },
|
||||
// };
|
||||
|
||||
// const handleRepeatNone = {
|
||||
// local: () => {
|
||||
// if (isLastTrack) {
|
||||
// const playerData = setCurrentIndex(0);
|
||||
// updateSong(playerData.current.song);
|
||||
// setQueue(playerData, true);
|
||||
// pause();
|
||||
// } else {
|
||||
// const playerData = autoNext();
|
||||
// updateSong(playerData.current.song);
|
||||
// setAutoNext(playerData);
|
||||
// play();
|
||||
// }
|
||||
// },
|
||||
// web: () => {
|
||||
// if (isLastTrack) {
|
||||
// resetPlayers();
|
||||
// pause();
|
||||
// } else {
|
||||
// const playerData = autoNext();
|
||||
// updateSong(playerData.current.song);
|
||||
// resetPlayers();
|
||||
// }
|
||||
// },
|
||||
// };
|
||||
|
||||
// const handleRepeatOne = {
|
||||
// local: () => {
|
||||
// const playerData = autoNext();
|
||||
// updateSong(playerData.current.song);
|
||||
// setAutoNext(playerData);
|
||||
// play();
|
||||
// },
|
||||
// web: () => {
|
||||
// if (isLastTrack) {
|
||||
// resetPlayers();
|
||||
// } else {
|
||||
// autoNext();
|
||||
// resetPlayers();
|
||||
// }
|
||||
// },
|
||||
// };
|
||||
|
||||
// switch (repeatStatus) {
|
||||
// case PlayerRepeat.ALL:
|
||||
// handleRepeatAll[playbackType]();
|
||||
// break;
|
||||
// case PlayerRepeat.NONE:
|
||||
// handleRepeatNone[playbackType]();
|
||||
// break;
|
||||
// case PlayerRepeat.ONE:
|
||||
// handleRepeatOne[playbackType]();
|
||||
// break;
|
||||
|
||||
// default:
|
||||
// break;
|
||||
// }
|
||||
// }, [
|
||||
// autoNext,
|
||||
// checkIsLastTrack,
|
||||
// pause,
|
||||
// play,
|
||||
// playbackType,
|
||||
// repeatStatus,
|
||||
// resetPlayers,
|
||||
// setCurrentIndex,
|
||||
// ]);
|
||||
|
||||
// const handleNextTrack = useCallback(() => {
|
||||
// const isLastTrack = checkIsLastTrack();
|
||||
// setCurrentTime(0);
|
||||
|
||||
// const handleRepeatAll = {
|
||||
// local: () => {
|
||||
// const playerData = next();
|
||||
// updateSong(playerData.current.song);
|
||||
// setQueue(playerData);
|
||||
// },
|
||||
// web: () => {
|
||||
// const playerData = next();
|
||||
// updateSong(playerData.current.song);
|
||||
// },
|
||||
// };
|
||||
|
||||
// const handleRepeatNone = {
|
||||
// local: () => {
|
||||
// if (isLastTrack) {
|
||||
// const playerData = setCurrentIndex(0);
|
||||
// updateSong(playerData.current.song);
|
||||
// setQueue(playerData, true);
|
||||
// pause();
|
||||
// } else {
|
||||
// const playerData = next();
|
||||
// updateSong(playerData.current.song);
|
||||
// setQueue(playerData);
|
||||
// }
|
||||
// },
|
||||
// web: () => {
|
||||
// if (isLastTrack) {
|
||||
// const playerData = setCurrentIndex(0);
|
||||
// updateSong(playerData.current.song);
|
||||
// resetPlayers();
|
||||
// pause();
|
||||
// } else {
|
||||
// const playerData = next();
|
||||
// updateSong(playerData.current.song);
|
||||
// resetPlayers();
|
||||
// }
|
||||
// },
|
||||
// };
|
||||
|
||||
// const handleRepeatOne = {
|
||||
// local: () => {
|
||||
// if (!isLastTrack) {
|
||||
// const playerData = next();
|
||||
// updateSong(playerData.current.song);
|
||||
// setQueue(playerData);
|
||||
// }
|
||||
// },
|
||||
// web: () => {
|
||||
// if (!isLastTrack) {
|
||||
// const playerData = next();
|
||||
// updateSong(playerData.current.song);
|
||||
// }
|
||||
// },
|
||||
// };
|
||||
|
||||
// switch (repeatStatus) {
|
||||
// case PlayerRepeat.ALL:
|
||||
// handleRepeatAll[playbackType]();
|
||||
// break;
|
||||
// case PlayerRepeat.NONE:
|
||||
// handleRepeatNone[playbackType]();
|
||||
// break;
|
||||
// case PlayerRepeat.ONE:
|
||||
// handleRepeatOne[playbackType]();
|
||||
// break;
|
||||
|
||||
// default:
|
||||
// break;
|
||||
// }
|
||||
|
||||
// setCurrentTime(0);
|
||||
// }, [
|
||||
// checkIsLastTrack,
|
||||
// next,
|
||||
// pause,
|
||||
// playbackType,
|
||||
// repeatStatus,
|
||||
// resetPlayers,
|
||||
// setCurrentIndex,
|
||||
// setCurrentTime,
|
||||
// ]);
|
||||
|
||||
// const handlePrevTrack = useCallback(() => {
|
||||
// const currentTime = isMpvPlayer
|
||||
// ? usePlayerStore.getState().current.time
|
||||
// : currentPlayerRef.getCurrentTime();
|
||||
|
||||
// // Reset the current track more than 10 seconds have elapsed
|
||||
// if (currentTime >= 10) {
|
||||
// setCurrentTime(0, true);
|
||||
// handleScrobbleFromSongRestart(currentTime);
|
||||
// mpris?.updateSeek(0);
|
||||
// if (isMpvPlayer) {
|
||||
// return mpvPlayer!.seekTo(0);
|
||||
// }
|
||||
// return currentPlayerRef.seekTo(0);
|
||||
// }
|
||||
|
||||
// const isFirstTrack = checkIsFirstTrack();
|
||||
|
||||
// const handleRepeatAll = {
|
||||
// local: () => {
|
||||
// if (!isFirstTrack) {
|
||||
// const playerData = previous();
|
||||
// updateSong(playerData.current.song);
|
||||
// setQueue(playerData);
|
||||
// } else {
|
||||
// const playerData = setCurrentIndex(queue.length - 1);
|
||||
// updateSong(playerData.current.song);
|
||||
// setQueue(playerData);
|
||||
// }
|
||||
// },
|
||||
// web: () => {
|
||||
// if (isFirstTrack) {
|
||||
// const playerData = setCurrentIndex(queue.length - 1);
|
||||
// updateSong(playerData.current.song);
|
||||
// resetPlayers();
|
||||
// } else {
|
||||
// const playerData = previous();
|
||||
// updateSong(playerData.current.song);
|
||||
// resetPlayers();
|
||||
// }
|
||||
// },
|
||||
// };
|
||||
|
||||
// const handleRepeatNone = {
|
||||
// local: () => {
|
||||
// if (isFirstTrack) {
|
||||
// const playerData = setCurrentIndex(0);
|
||||
// updateSong(playerData.current.song);
|
||||
// setQueue(playerData, true);
|
||||
// pause();
|
||||
// } else {
|
||||
// const playerData = previous();
|
||||
// updateSong(playerData.current.song);
|
||||
// setQueue(playerData);
|
||||
// }
|
||||
// },
|
||||
// web: () => {
|
||||
// if (isFirstTrack) {
|
||||
// resetPlayers();
|
||||
// pause();
|
||||
// } else {
|
||||
// const playerData = previous();
|
||||
// updateSong(playerData.current.song);
|
||||
// resetPlayers();
|
||||
// }
|
||||
// },
|
||||
// };
|
||||
|
||||
// const handleRepeatOne = {
|
||||
// local: () => {
|
||||
// const playerData = previous();
|
||||
// updateSong(playerData.current.song);
|
||||
// setQueue(playerData);
|
||||
// },
|
||||
// web: () => {
|
||||
// const playerData = previous();
|
||||
// updateSong(playerData.current.song);
|
||||
// resetPlayers();
|
||||
// },
|
||||
// };
|
||||
|
||||
// switch (repeatStatus) {
|
||||
// case PlayerRepeat.ALL:
|
||||
// handleRepeatAll[playbackType]();
|
||||
// break;
|
||||
// case PlayerRepeat.NONE:
|
||||
// handleRepeatNone[playbackType]();
|
||||
// break;
|
||||
// case PlayerRepeat.ONE:
|
||||
// handleRepeatOne[playbackType]();
|
||||
// break;
|
||||
|
||||
// default:
|
||||
// break;
|
||||
// }
|
||||
|
||||
// return setCurrentTime(0);
|
||||
// }, [
|
||||
// checkIsFirstTrack,
|
||||
// currentPlayerRef,
|
||||
// handleScrobbleFromSongRestart,
|
||||
// isMpvPlayer,
|
||||
// pause,
|
||||
// playbackType,
|
||||
// previous,
|
||||
// queue.length,
|
||||
// repeatStatus,
|
||||
// resetPlayers,
|
||||
// setCurrentIndex,
|
||||
// setCurrentTime,
|
||||
// ]);
|
||||
|
||||
// const handlePlayPause = useCallback(() => {
|
||||
// if (queue.length > 0) {
|
||||
// if (playerStatus === PlayerStatus.PAUSED) {
|
||||
// return handlePlay();
|
||||
// }
|
||||
|
||||
// return handlePause();
|
||||
// }
|
||||
|
||||
// return null;
|
||||
// }, [handlePause, handlePlay, playerStatus, queue]);
|
||||
|
||||
// const handleSkipBackward = (seconds: number) => {
|
||||
// const currentTime = isMpvPlayer
|
||||
// ? usePlayerStore.getState().current.time
|
||||
// : currentPlayerRef.getCurrentTime();
|
||||
|
||||
// const evaluatedTime = currentTime - seconds;
|
||||
// const newTime = evaluatedTime < 0 ? 0 : evaluatedTime;
|
||||
// setCurrentTime(newTime, true);
|
||||
// mpris?.updateSeek(newTime);
|
||||
|
||||
// if (isMpvPlayer) {
|
||||
// mpvPlayer!.seek(-seconds);
|
||||
// } else {
|
||||
// resetNextPlayer();
|
||||
// currentPlayerRef.seekTo(newTime, 'seconds');
|
||||
// }
|
||||
// };
|
||||
|
||||
// const handleSkipForward = (seconds: number) => {
|
||||
// const currentTime = isMpvPlayer
|
||||
// ? usePlayerStore.getState().current.time
|
||||
// : currentPlayerRef.getCurrentTime();
|
||||
|
||||
// if (isMpvPlayer) {
|
||||
// const newTime = currentTime + seconds;
|
||||
// mpvPlayer!.seek(seconds);
|
||||
// mpris?.updateSeek(newTime);
|
||||
// setCurrentTime(newTime, true);
|
||||
// } else {
|
||||
// const checkNewTime = currentTime + seconds;
|
||||
// const songDuration = currentPlayerRef.player.player.duration;
|
||||
|
||||
// const newTime = checkNewTime >= songDuration ? songDuration - 1 : checkNewTime;
|
||||
// mpris?.updateSeek(newTime);
|
||||
|
||||
// resetNextPlayer();
|
||||
// setCurrentTime(newTime, true);
|
||||
// currentPlayerRef.seekTo(newTime, 'seconds');
|
||||
// }
|
||||
// };
|
||||
|
||||
// const debouncedSeek = debounce((e: number) => {
|
||||
// if (isMpvPlayer) {
|
||||
// mpvPlayer!.seekTo(e);
|
||||
// } else {
|
||||
// currentPlayerRef.seekTo(e, 'seconds');
|
||||
// }
|
||||
// }, 100);
|
||||
|
||||
// const handleSeekSlider = useCallback(
|
||||
// (e: any | number) => {
|
||||
// setCurrentTime(e, true);
|
||||
// handleScrobbleFromSeek(e);
|
||||
// debouncedSeek(e);
|
||||
|
||||
// mpris?.updateSeek(e);
|
||||
// },
|
||||
// [debouncedSeek, handleScrobbleFromSeek, setCurrentTime],
|
||||
// );
|
||||
|
||||
// const handleQuit = useCallback(() => {
|
||||
// mpvPlayer!.quit();
|
||||
// }, []);
|
||||
|
||||
// const handleError = useCallback(
|
||||
// (message: string) => {
|
||||
// toast.error({
|
||||
// id: 'mpv-error',
|
||||
// message,
|
||||
// title: t('error.playbackError', { postProcess: 'sentenceCase' }),
|
||||
// });
|
||||
// pause();
|
||||
// mpvPlayer!.pause();
|
||||
// },
|
||||
// [pause, t],
|
||||
// );
|
||||
|
||||
// useEffect(() => {
|
||||
// if (mpvPlayerListener) {
|
||||
// mpvPlayerListener.rendererPlayPause(() => {
|
||||
// handlePlayPause();
|
||||
// });
|
||||
|
||||
// mpvPlayerListener.rendererNext(() => {
|
||||
// handleNextTrack();
|
||||
// });
|
||||
|
||||
// mpvPlayerListener.rendererPrevious(() => {
|
||||
// handlePrevTrack();
|
||||
// });
|
||||
|
||||
// mpvPlayerListener.rendererPlay(() => {
|
||||
// handlePlay();
|
||||
// });
|
||||
|
||||
// mpvPlayerListener.rendererPause(() => {
|
||||
// handlePause();
|
||||
// });
|
||||
|
||||
// mpvPlayerListener.rendererStop(() => {
|
||||
// handleStop();
|
||||
// });
|
||||
|
||||
// mpvPlayerListener.rendererCurrentTime((_event: any, time: number) => {
|
||||
// setCurrentTime(time);
|
||||
// });
|
||||
|
||||
// mpvPlayerListener.rendererAutoNext(() => {
|
||||
// handleAutoNext();
|
||||
// });
|
||||
|
||||
// mpvPlayerListener.rendererToggleShuffle(() => {
|
||||
// handleToggleShuffle();
|
||||
// });
|
||||
|
||||
// mpvPlayerListener.rendererToggleRepeat(() => {
|
||||
// handleToggleRepeat();
|
||||
// });
|
||||
|
||||
// mpvPlayerListener.rendererError((_event: any, message: string) => {
|
||||
// handleError(message);
|
||||
// });
|
||||
// }
|
||||
|
||||
// return () => {
|
||||
// ipc?.removeAllListeners('renderer-player-play-pause');
|
||||
// ipc?.removeAllListeners('renderer-player-next');
|
||||
// ipc?.removeAllListeners('renderer-player-previous');
|
||||
// ipc?.removeAllListeners('renderer-player-play');
|
||||
// ipc?.removeAllListeners('renderer-player-pause');
|
||||
// ipc?.removeAllListeners('renderer-player-stop');
|
||||
// ipc?.removeAllListeners('renderer-player-current-time');
|
||||
// ipc?.removeAllListeners('renderer-player-auto-next');
|
||||
// ipc?.removeAllListeners('renderer-player-toggle-shuffle');
|
||||
// ipc?.removeAllListeners('renderer-player-toggle-repeat');
|
||||
// ipc?.removeAllListeners('renderer-player-error');
|
||||
// };
|
||||
// }, [
|
||||
// autoNext,
|
||||
// handleAutoNext,
|
||||
// handleError,
|
||||
// handleNextTrack,
|
||||
// handlePause,
|
||||
// handlePlay,
|
||||
// handlePlayPause,
|
||||
// handlePrevTrack,
|
||||
// handleQuit,
|
||||
// handleStop,
|
||||
// handleToggleRepeat,
|
||||
// handleToggleShuffle,
|
||||
// isMpvPlayer,
|
||||
// next,
|
||||
// pause,
|
||||
// play,
|
||||
// previous,
|
||||
// setCurrentTime,
|
||||
// ]);
|
||||
|
||||
// useEffect(() => {
|
||||
// if (!isElectron() && mediaSession) {
|
||||
// mediaSession.setActionHandler('nexttrack', () => {
|
||||
// handleNextTrack();
|
||||
// });
|
||||
|
||||
// mediaSession.setActionHandler('pause', () => {
|
||||
// handlePause();
|
||||
// });
|
||||
|
||||
// mediaSession.setActionHandler('play', () => {
|
||||
// handlePlay();
|
||||
// });
|
||||
|
||||
// mediaSession.setActionHandler('previoustrack', () => {
|
||||
// handlePrevTrack();
|
||||
// });
|
||||
|
||||
// mediaSession.setActionHandler('seekto', (evt) => {
|
||||
// const time = evt.seekTime;
|
||||
|
||||
// if (time !== undefined) {
|
||||
// handleSeekSlider(time);
|
||||
// }
|
||||
// });
|
||||
|
||||
// mediaSession.setActionHandler('stop', () => {
|
||||
// handleStop();
|
||||
// });
|
||||
|
||||
// return () => {
|
||||
// mediaSession.setActionHandler('nexttrack', null);
|
||||
// mediaSession.setActionHandler('pause', null);
|
||||
// mediaSession.setActionHandler('play', null);
|
||||
// mediaSession.setActionHandler('previoustrack', null);
|
||||
// mediaSession.setActionHandler('seekto', null);
|
||||
// mediaSession.setActionHandler('stop', null);
|
||||
// };
|
||||
// }
|
||||
|
||||
// return () => {};
|
||||
// }, [
|
||||
// handleNextTrack,
|
||||
// handlePause,
|
||||
// handlePlay,
|
||||
// handlePrevTrack,
|
||||
// handleSeekSlider,
|
||||
// handleStop,
|
||||
// setCurrentTime,
|
||||
// ]);
|
||||
|
||||
// useEffect(() => {
|
||||
// if (remote) {
|
||||
// const unsubCurrentTime = usePlayerStore.subscribe(
|
||||
// (state) => state.current.time,
|
||||
// (time) => {
|
||||
// remote.updatePosition(time);
|
||||
// },
|
||||
// );
|
||||
|
||||
// return () => {
|
||||
// unsubCurrentTime();
|
||||
// };
|
||||
// }
|
||||
|
||||
// return () => {};
|
||||
// }, []);
|
||||
|
||||
// useEffect(() => {
|
||||
// if (utils?.isLinux()) {
|
||||
// mpris!.requestToggleRepeat((_e: any, data: { repeat: string }) => {
|
||||
// if (data.repeat === 'Playlist') {
|
||||
// usePlayerStore.getState().actions.setRepeat(PlayerRepeat.ALL);
|
||||
// } else if (data.repeat === 'Track') {
|
||||
// usePlayerStore.getState().actions.setRepeat(PlayerRepeat.ONE);
|
||||
// } else {
|
||||
// usePlayerStore.getState().actions.setRepeat(PlayerRepeat.NONE);
|
||||
// }
|
||||
// });
|
||||
|
||||
// mpris!.requestToggleShuffle((_e: any, data: { shuffle: boolean }) => {
|
||||
// usePlayerStore
|
||||
// .getState()
|
||||
// .actions.setShuffle(data.shuffle ? PlayerShuffle.TRACK : PlayerShuffle.NONE);
|
||||
// });
|
||||
|
||||
// return () => {
|
||||
// ipc?.removeAllListeners('mpris-request-toggle-repeat');
|
||||
// ipc?.removeAllListeners('mpris-request-toggle-shuffle');
|
||||
// };
|
||||
// }
|
||||
|
||||
// return () => {};
|
||||
// }, [handleSeekSlider, isMpvPlayer]);
|
||||
|
||||
// useEffect(() => {
|
||||
// if (remote) {
|
||||
// remote.requestPosition((_e: any, data: { position: number }) => {
|
||||
// const newTime = data.position;
|
||||
// handleSeekSlider(newTime);
|
||||
// });
|
||||
|
||||
// remote.requestSeek((_e: any, data: { offset: number }) => {
|
||||
// const currentTime = usePlayerStore.getState().current.time;
|
||||
// const currentSongDuration = usePlayerStore.getState().current.song?.duration || 0;
|
||||
// const resultingTime = currentTime + data.offset;
|
||||
|
||||
// let newTime = resultingTime;
|
||||
// if (resultingTime > currentSongDuration) {
|
||||
// newTime = currentSongDuration - 1;
|
||||
// }
|
||||
|
||||
// if (resultingTime < 0) {
|
||||
// newTime = 0;
|
||||
// }
|
||||
|
||||
// handleSeekSlider(newTime);
|
||||
// });
|
||||
|
||||
// remote.requestVolume((_e: any, data: { volume: number }) => {
|
||||
// usePlayerStore.getState().actions.setVolume(data.volume);
|
||||
|
||||
// if (isMpvPlayer) {
|
||||
// mpvPlayer!.volume(data.volume);
|
||||
// }
|
||||
// });
|
||||
|
||||
// return () => {
|
||||
// ipc?.removeAllListeners('request-position');
|
||||
// ipc?.removeAllListeners('request-seek');
|
||||
// ipc?.removeAllListeners('request-volume');
|
||||
// };
|
||||
// }
|
||||
|
||||
// return () => {};
|
||||
// });
|
||||
|
||||
// return {
|
||||
// handleNextTrack,
|
||||
// handlePause,
|
||||
// handlePlay,
|
||||
// handlePlayPause,
|
||||
// handlePrevTrack,
|
||||
// handleSeekSlider,
|
||||
// handleSkipBackward,
|
||||
// handleSkipForward,
|
||||
// handleStop,
|
||||
// handleToggleRepeat,
|
||||
// handleToggleShuffle,
|
||||
// };
|
||||
// };
|
||||
@@ -1,226 +0,0 @@
|
||||
// import { useQueryClient } from '@tanstack/react-query';
|
||||
// import isElectron from 'is-electron';
|
||||
// import { nanoid } from 'nanoid/non-secure';
|
||||
// import { useCallback, useRef } from 'react';
|
||||
// import { useTranslation } from 'react-i18next';
|
||||
|
||||
// import { queryKeys } from '/@/renderer/api/query-keys';
|
||||
// import { PlayersRef } from '/@/renderer/features/player/ref/players-ref';
|
||||
// import { updateSong } from '/@/renderer/features/player/update-remote-song';
|
||||
// import {
|
||||
// getAlbumArtistSongsById,
|
||||
// getAlbumSongsById,
|
||||
// getArtistSongsById,
|
||||
// getGenreSongsById,
|
||||
// getPlaylistSongsById,
|
||||
// getSongById,
|
||||
// getSongsByQuery,
|
||||
// } from '/@/renderer/features/player/utils';
|
||||
// import { useCurrentServer, usePlayerStore } from '/@/renderer/store';
|
||||
// import { useGeneralSettings, usePlaybackType } from '/@/renderer/store/settings.store';
|
||||
// import { setQueue, setQueueNext } from '/@/renderer/utils/set-transcoded-queue-data';
|
||||
// import { toast } from '/@/shared/components/toast/toast';
|
||||
// import {
|
||||
// instanceOfCancellationError,
|
||||
// LibraryItem,
|
||||
// QueueSong,
|
||||
// Song,
|
||||
// SongListResponse,
|
||||
// } from '/@/shared/types/domain-types';
|
||||
// import { Play, PlaybackType, PlayQueueAddOptions } from '/@/shared/types/types';
|
||||
|
||||
// const getRootQueryKey = (itemType: LibraryItem, serverId: string) => {
|
||||
// let queryKey;
|
||||
|
||||
// switch (itemType) {
|
||||
// case LibraryItem.ALBUM:
|
||||
// queryKey = queryKeys.songs.list(serverId);
|
||||
// break;
|
||||
// case LibraryItem.ALBUM_ARTIST:
|
||||
// queryKey = queryKeys.songs.list(serverId);
|
||||
// break;
|
||||
// case LibraryItem.GENRE:
|
||||
// queryKey = queryKeys.songs.list(serverId);
|
||||
// break;
|
||||
// case LibraryItem.PLAYLIST:
|
||||
// queryKey = queryKeys.playlists.songList(serverId);
|
||||
// break;
|
||||
// case LibraryItem.SONG:
|
||||
// queryKey = queryKeys.songs.list(serverId);
|
||||
// break;
|
||||
// default:
|
||||
// queryKey = queryKeys.songs.list(serverId);
|
||||
// break;
|
||||
// }
|
||||
|
||||
// return queryKey;
|
||||
// };
|
||||
|
||||
// const mpvPlayer = isElectron() ? window.api.mpvPlayer : null;
|
||||
|
||||
// const addToQueue = usePlayerStore.getState().actions.addToQueue;
|
||||
|
||||
// export const useHandlePlayQueueAdd = () => {
|
||||
// const { t } = useTranslation();
|
||||
// const queryClient = useQueryClient();
|
||||
// const playbackType = usePlaybackType();
|
||||
// const server = useCurrentServer();
|
||||
// const { play } = usePlayerControls();
|
||||
// const timeoutIds = useRef<null | Record<string, ReturnType<typeof setTimeout>>>({});
|
||||
|
||||
// const { doubleClickQueueAll } = useGeneralSettings();
|
||||
|
||||
// const handlePlayQueueAdd = useCallback(
|
||||
// async (options: PlayQueueAddOptions) => {
|
||||
// if (!server) return toast.error({ message: 'No server selected', type: 'error' });
|
||||
// const { byData, byItemType, initialIndex, initialSongId, playType, query } = options;
|
||||
// let songs: null | QueueSong[] = null;
|
||||
// // Allow this to be undefined for "play shuffled". If undefined, default to 0,
|
||||
// // otherwise, choose the selected item in the queue
|
||||
// let initialSongIndex: number | undefined;
|
||||
// let toastId: null | string = null;
|
||||
|
||||
// if (byItemType) {
|
||||
// let songList: SongListResponse | undefined;
|
||||
// const { id, type: itemType } = byItemType;
|
||||
|
||||
// const fetchId = nanoid();
|
||||
// timeoutIds.current = {
|
||||
// ...timeoutIds.current,
|
||||
// [fetchId]: setTimeout(() => {
|
||||
// toastId = toast.info({
|
||||
// autoClose: false,
|
||||
// message: t('player.playbackFetchCancel', {
|
||||
// postProcess: 'sentenceCase',
|
||||
// }),
|
||||
// onClose: () => {
|
||||
// queryClient.cancelQueries({
|
||||
// exact: false,
|
||||
// queryKey: getRootQueryKey(itemType, server?.id),
|
||||
// });
|
||||
// },
|
||||
// title: t('player.playbackFetchInProgress', {
|
||||
// postProcess: 'sentenceCase',
|
||||
// }),
|
||||
// });
|
||||
// }, 2000),
|
||||
// };
|
||||
|
||||
// try {
|
||||
// if (itemType === LibraryItem.PLAYLIST) {
|
||||
// songList = await getPlaylistSongsById({
|
||||
// id: id?.[0],
|
||||
// query,
|
||||
// queryClient,
|
||||
// server,
|
||||
// });
|
||||
// } else if (itemType === LibraryItem.ALBUM) {
|
||||
// songList = await getAlbumSongsById({ id, query, queryClient, server });
|
||||
// } else if (itemType === LibraryItem.ALBUM_ARTIST) {
|
||||
// songList = await getAlbumArtistSongsById({
|
||||
// id,
|
||||
// query,
|
||||
// queryClient,
|
||||
// server,
|
||||
// });
|
||||
// } else if (itemType === LibraryItem.ARTIST) {
|
||||
// songList = await getArtistSongsById({
|
||||
// id,
|
||||
// query,
|
||||
// queryClient,
|
||||
// server,
|
||||
// });
|
||||
// } else if (itemType === LibraryItem.GENRE) {
|
||||
// songList = await getGenreSongsById({ id, query, queryClient, server });
|
||||
// } else if (itemType === LibraryItem.SONG) {
|
||||
// if (id?.length === 1) {
|
||||
// songList = await getSongById({ id: id?.[0], queryClient, server });
|
||||
// } else if (!doubleClickQueueAll && initialSongId) {
|
||||
// songList = await getSongById({
|
||||
// id: initialSongId,
|
||||
// queryClient,
|
||||
// server,
|
||||
// });
|
||||
// } else {
|
||||
// songList = await getSongsByQuery({ query, queryClient, server });
|
||||
// }
|
||||
// }
|
||||
|
||||
// clearTimeout(timeoutIds.current[fetchId] as ReturnType<typeof setTimeout>);
|
||||
// delete timeoutIds.current[fetchId];
|
||||
// if (toastId) {
|
||||
// toast.hide(toastId);
|
||||
// }
|
||||
// } catch (err: any) {
|
||||
// if (instanceOfCancellationError(err)) {
|
||||
// return null;
|
||||
// }
|
||||
|
||||
// clearTimeout(timeoutIds.current[fetchId] as ReturnType<typeof setTimeout>);
|
||||
// delete timeoutIds.current[fetchId];
|
||||
// toast.hide(fetchId);
|
||||
|
||||
// return toast.error({
|
||||
// message: err.message,
|
||||
// title: t('error.genericError', { postProcess: 'sentenceCase' }) as string,
|
||||
// });
|
||||
// }
|
||||
|
||||
// songs =
|
||||
// songList?.items?.map((song: Song) => ({ ...song, uniqueId: nanoid() })) || null;
|
||||
// } else if (byData) {
|
||||
// songs = byData.map((song) => ({ ...song, uniqueId: nanoid() })) || null;
|
||||
// }
|
||||
|
||||
// if (!songs || songs?.length === 0)
|
||||
// return toast.warn({
|
||||
// message: t('common.noResultsFromQuery', { postProcess: 'sentenceCase' }),
|
||||
// title: t('player.playbackFetchNoResults', { postProcess: 'sentenceCase' }),
|
||||
// });
|
||||
|
||||
// if (initialIndex) {
|
||||
// initialSongIndex = initialIndex;
|
||||
// } else if (initialSongId) {
|
||||
// initialSongIndex = songs.findIndex((song) => song.id === initialSongId);
|
||||
// }
|
||||
|
||||
// const hadSong = usePlayerStore.getState().queue.default.length > 0;
|
||||
// const playerData = addToQueue({ initialIndex: initialSongIndex, playType, songs });
|
||||
|
||||
// updateSong(playerData.current.song);
|
||||
|
||||
// const replacesQueue = playType === Play.NOW || playType === Play.SHUFFLE;
|
||||
|
||||
// if (playbackType === PlaybackType.LOCAL) {
|
||||
// mpvPlayer!.volume(usePlayerStore.getState().volume);
|
||||
|
||||
// if (replacesQueue || !hadSong) {
|
||||
// mpvPlayer!.pause();
|
||||
// setQueue(playerData, false);
|
||||
// } else {
|
||||
// setQueueNext(playerData);
|
||||
// }
|
||||
// } else {
|
||||
// const player =
|
||||
// playerData.current.player === 1
|
||||
// ? PlayersRef.current?.player1
|
||||
// : PlayersRef.current?.player2;
|
||||
// const underlying = player?.getInternalPlayer();
|
||||
// if (underlying && replacesQueue) {
|
||||
// underlying.currentTime = 0;
|
||||
// }
|
||||
// }
|
||||
|
||||
// // We should only play if the queue was empty, or we are doing play NOW
|
||||
// // (override the queue).
|
||||
// if (replacesQueue || !hadSong) {
|
||||
// play();
|
||||
// }
|
||||
|
||||
// return null;
|
||||
// },
|
||||
// [doubleClickQueueAll, play, playbackType, queryClient, server, t],
|
||||
// );
|
||||
|
||||
// return handlePlayQueueAdd;
|
||||
// };
|
||||
@@ -1,9 +1,9 @@
|
||||
import { useEffect } from 'react';
|
||||
|
||||
import {
|
||||
usePlaybackSettings,
|
||||
usePlayerSong,
|
||||
usePlayerStatus,
|
||||
usePlaybackSettings,
|
||||
useSettingsStore,
|
||||
} from '/@/renderer/store';
|
||||
import { PlayerStatus } from '/@/shared/types/types';
|
||||
|
||||
@@ -1,144 +0,0 @@
|
||||
import isElectron from 'is-electron';
|
||||
import { useCallback, useEffect, WheelEvent } from 'react';
|
||||
|
||||
import { usePlayerMuted, usePlayerSpeed, usePlayerVolume } from '/@/renderer/store';
|
||||
import { useGeneralSettings } from '/@/renderer/store/settings.store';
|
||||
|
||||
const mpvPlayer = isElectron() ? window.api.mpvPlayer : null;
|
||||
const mpvPlayerListener = isElectron() ? window.api.mpvPlayerListener : null;
|
||||
const ipc = isElectron() ? window.api.ipc : null;
|
||||
const remote = isElectron() ? window.api.remote : null;
|
||||
|
||||
const calculateVolumeUp = (volume: number, volumeWheelStep: number) => {
|
||||
let volumeToSet;
|
||||
const newVolumeGreaterThanHundred = volume + volumeWheelStep > 100;
|
||||
if (newVolumeGreaterThanHundred) {
|
||||
volumeToSet = 100;
|
||||
} else {
|
||||
volumeToSet = volume + volumeWheelStep;
|
||||
}
|
||||
|
||||
return volumeToSet;
|
||||
};
|
||||
|
||||
const calculateVolumeDown = (volume: number, volumeWheelStep: number) => {
|
||||
let volumeToSet;
|
||||
const newVolumeLessThanZero = volume - volumeWheelStep < 0;
|
||||
if (newVolumeLessThanZero) {
|
||||
volumeToSet = 0;
|
||||
} else {
|
||||
volumeToSet = volume - volumeWheelStep;
|
||||
}
|
||||
|
||||
return volumeToSet;
|
||||
};
|
||||
|
||||
export const useRightControls = () => {
|
||||
// const { setMuted, setVolume } = usePlayerControls();
|
||||
const volume = usePlayerVolume();
|
||||
const muted = usePlayerMuted();
|
||||
const { volumeWheelStep } = useGeneralSettings();
|
||||
const speed = usePlayerSpeed();
|
||||
// const setCurrentSpeed = useSetCurrentSpeed();
|
||||
|
||||
// Ensure that the mpv player volume is set on startup
|
||||
useEffect(() => {
|
||||
remote?.updateVolume(volume);
|
||||
|
||||
if (mpvPlayer) {
|
||||
mpvPlayer.volume(volume);
|
||||
mpvPlayer.setProperties({ speed });
|
||||
|
||||
if (muted) {
|
||||
mpvPlayer.mute(muted);
|
||||
}
|
||||
}
|
||||
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, []);
|
||||
|
||||
const handleSpeed = useCallback((e: number) => {
|
||||
// setCurrentSpeed(e);
|
||||
if (mpvPlayer) {
|
||||
mpvPlayer?.setProperties({ speed: e });
|
||||
}
|
||||
}, []);
|
||||
|
||||
const handleVolumeSlider = (e: number) => {
|
||||
mpvPlayer?.volume(e);
|
||||
remote?.updateVolume(e);
|
||||
// setVolume(e);
|
||||
};
|
||||
|
||||
const handleVolumeSliderState = (e: number) => {
|
||||
remote?.updateVolume(e);
|
||||
// setVolume(e);
|
||||
};
|
||||
|
||||
const handleVolumeDown = useCallback(() => {
|
||||
const volumeToSet = calculateVolumeDown(volume, volumeWheelStep);
|
||||
mpvPlayer?.volume(volumeToSet);
|
||||
remote?.updateVolume(volumeToSet);
|
||||
// setVolume(volumeToSet);
|
||||
}, [volume, volumeWheelStep]);
|
||||
|
||||
const handleVolumeUp = useCallback(() => {
|
||||
const volumeToSet = calculateVolumeUp(volume, volumeWheelStep);
|
||||
mpvPlayer?.volume(volumeToSet);
|
||||
remote?.updateVolume(volumeToSet);
|
||||
// setVolume(volumeToSet);
|
||||
}, [volume, volumeWheelStep]);
|
||||
|
||||
const handleVolumeWheel = useCallback(
|
||||
(e: WheelEvent<HTMLButtonElement | HTMLDivElement>) => {
|
||||
let volumeToSet;
|
||||
if (e.deltaY > 0 || e.deltaX > 0) {
|
||||
volumeToSet = calculateVolumeDown(volume, volumeWheelStep);
|
||||
} else {
|
||||
volumeToSet = calculateVolumeUp(volume, volumeWheelStep);
|
||||
}
|
||||
|
||||
mpvPlayer?.volume(volumeToSet);
|
||||
remote?.updateVolume(volumeToSet);
|
||||
// setVolume(volumeToSet);
|
||||
},
|
||||
[volume, volumeWheelStep],
|
||||
);
|
||||
|
||||
const handleMute = useCallback(() => {
|
||||
// setMuted(!muted);
|
||||
mpvPlayer?.mute(!muted);
|
||||
}, [muted]);
|
||||
|
||||
useEffect(() => {
|
||||
if (isElectron()) {
|
||||
mpvPlayerListener?.rendererVolumeMute(() => {
|
||||
handleMute();
|
||||
});
|
||||
|
||||
mpvPlayerListener?.rendererVolumeUp(() => {
|
||||
handleVolumeUp();
|
||||
});
|
||||
|
||||
mpvPlayerListener?.rendererVolumeDown(() => {
|
||||
handleVolumeDown();
|
||||
});
|
||||
}
|
||||
|
||||
return () => {
|
||||
ipc?.removeAllListeners('renderer-player-volume-mute');
|
||||
ipc?.removeAllListeners('renderer-player-volume-up');
|
||||
ipc?.removeAllListeners('renderer-player-volume-down');
|
||||
};
|
||||
}, [handleMute, handleVolumeDown, handleVolumeUp]);
|
||||
|
||||
return {
|
||||
handleMute,
|
||||
handleSpeed,
|
||||
handleVolumeDown,
|
||||
handleVolumeSlider,
|
||||
handleVolumeSliderState,
|
||||
handleVolumeUp,
|
||||
handleVolumeWheel,
|
||||
};
|
||||
};
|
||||
@@ -1,49 +0,0 @@
|
||||
import type { PlayerData, QueueSong } from '/@/shared/types/domain-types';
|
||||
|
||||
import isElectron from 'is-electron';
|
||||
|
||||
import { api } from '/@/renderer/api';
|
||||
import { useSettingsStore } from '/@/renderer/store';
|
||||
|
||||
const mpvPlayer = isElectron() ? window.api.mpvPlayer : null;
|
||||
|
||||
const modifyUrl = (song: QueueSong): string => {
|
||||
const transcode = useSettingsStore.getState().playback.transcode;
|
||||
if (transcode.enabled) {
|
||||
const streamUrl = api.controller.getTranscodingUrl({
|
||||
apiClientProps: {
|
||||
serverId: song._serverId,
|
||||
},
|
||||
query: {
|
||||
base: song.streamUrl,
|
||||
...transcode,
|
||||
},
|
||||
})!;
|
||||
|
||||
return streamUrl;
|
||||
}
|
||||
|
||||
return song.streamUrl;
|
||||
};
|
||||
|
||||
export const setQueue = (data: PlayerData, pause?: boolean): void => {
|
||||
const current = data.queue.current ? modifyUrl(data.queue.current) : undefined;
|
||||
const next = data.queue.next ? modifyUrl(data.queue.next) : undefined;
|
||||
mpvPlayer?.setQueue(current, next, pause);
|
||||
};
|
||||
|
||||
export const setQueueNext = (data: PlayerData): void => {
|
||||
if (data.queue.next) {
|
||||
mpvPlayer?.setQueueNext(modifyUrl(data.queue.next));
|
||||
} else {
|
||||
mpvPlayer?.setQueueNext(undefined);
|
||||
}
|
||||
};
|
||||
|
||||
export const setAutoNext = (data: PlayerData): void => {
|
||||
if (data.queue.next) {
|
||||
mpvPlayer?.autoNext(modifyUrl(data.queue.next));
|
||||
} else {
|
||||
mpvPlayer?.autoNext(undefined);
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user