Fallback to web player if mpv fails to run

This commit is contained in:
jeffvli 2024-02-13 02:05:59 -08:00
parent fb08502e51
commit 9b0c9ba3ac
14 changed files with 115 additions and 70 deletions

View file

@ -32,7 +32,7 @@ import {
} from '/@/renderer/store';
import {
useHotkeySettings,
usePlayerType,
usePlaybackType,
useSettingsStore,
} from '/@/renderer/store/settings.store';
import { PlayerStatus, PlaybackType, PlayerShuffle, PlayerRepeat } from '/@/renderer/types';
@ -99,7 +99,7 @@ export const CenterControls = ({ playersRef }: CenterControlsProps) => {
const currentSong = useCurrentSong();
const skip = useSettingsStore((state) => state.general.skipButtons);
const buttonSize = useSettingsStore((state) => state.general.buttonSize);
const playerType = usePlayerType();
const playbackType = usePlaybackType();
const player1 = playersRef?.current?.player1;
const player2 = playersRef?.current?.player2;
const status = useCurrentStatus();
@ -134,7 +134,7 @@ export const CenterControls = ({ playersRef }: CenterControlsProps) => {
let interval: any;
if (status === PlayerStatus.PLAYING && !isSeeking) {
if (!isElectron() || playerType === PlaybackType.WEB) {
if (!isElectron() || playbackType === PlaybackType.WEB) {
interval = setInterval(() => {
setCurrentTime(currentPlayerRef.getCurrentTime());
}, 1000);
@ -144,7 +144,7 @@ export const CenterControls = ({ playersRef }: CenterControlsProps) => {
}
return () => clearInterval(interval);
}, [currentPlayerRef, isSeeking, setCurrentTime, playerType, status]);
}, [currentPlayerRef, isSeeking, setCurrentTime, playbackType, status]);
const [seekValue, setSeekValue] = useState(0);

View file

@ -1,7 +1,7 @@
import { useCallback } from 'react';
import isElectron from 'is-electron';
import styled from 'styled-components';
import { useSettingsStore } from '/@/renderer/store/settings.store';
import { usePlaybackType, useSettingsStore } from '/@/renderer/store/settings.store';
import { PlaybackType } from '/@/renderer/types';
import { AudioPlayer } from '/@/renderer/components';
import {
@ -64,6 +64,7 @@ const remote = isElectron() ? window.electron.remote : null;
export const Playerbar = () => {
const playersRef = PlayersRef;
const settings = useSettingsStore((state) => state.playback);
const playbackType = usePlaybackType();
const volume = useVolume();
const player1 = usePlayer1Data();
const player2 = usePlayer2Data();
@ -96,7 +97,7 @@ export const Playerbar = () => {
<RightControls />
</RightGridItem>
</PlayerbarControlsGrid>
{settings.type === PlaybackType.WEB && (
{playbackType === PlaybackType.WEB && (
<AudioPlayer
ref={playersRef}
autoNext={autoNextFn}

View file

@ -1,5 +1,3 @@
// import { write, writeFile } from 'fs';
// import { deflate } from 'zlib';
import { useCallback, useEffect } from 'react';
import isElectron from 'is-electron';
import { PlaybackType, PlayerRepeat, PlayerShuffle, PlayerStatus } from '/@/renderer/types';
@ -13,7 +11,7 @@ import {
useSetCurrentTime,
useShuffleStatus,
} from '/@/renderer/store';
import { usePlayerType, useSettingsStore } from '/@/renderer/store/settings.store';
import { usePlaybackType } from '/@/renderer/store/settings.store';
import { useScrobble } from '/@/renderer/features/player/hooks/use-scrobble';
import debounce from 'lodash/debounce';
import { QueueSong } from '/@/renderer/api/types';
@ -32,7 +30,6 @@ export const useCenterControls = (args: { playersRef: any }) => {
const { t } = useTranslation();
const { playersRef } = args;
const settings = useSettingsStore((state) => state.playback);
const currentPlayer = useCurrentPlayer();
const { setShuffle, setRepeat, play, pause, previous, next, setCurrentIndex, autoNext } =
usePlayerControls();
@ -41,7 +38,7 @@ export const useCenterControls = (args: { playersRef: any }) => {
const playerStatus = useCurrentStatus();
const repeatStatus = useRepeatStatus();
const shuffleStatus = useShuffleStatus();
const playerType = usePlayerType();
const playbackType = usePlaybackType();
const player1Ref = playersRef?.current?.player1;
const player2Ref = playersRef?.current?.player2;
const currentPlayerRef = currentPlayer === 1 ? player1Ref : player2Ref;
@ -77,7 +74,7 @@ export const useCenterControls = (args: { playersRef: any }) => {
resetPlayers();
}, [player1Ref, player2Ref, resetPlayers]);
const isMpvPlayer = isElectron() && settings.type === PlaybackType.LOCAL;
const isMpvPlayer = isElectron() && playbackType === PlaybackType.LOCAL;
const mprisUpdateSong = (args?: {
currentTime?: number;
@ -282,13 +279,13 @@ export const useCenterControls = (args: { playersRef: any }) => {
switch (repeatStatus) {
case PlayerRepeat.NONE:
handleRepeatNone[playerType]();
handleRepeatNone[playbackType]();
break;
case PlayerRepeat.ALL:
handleRepeatAll[playerType]();
handleRepeatAll[playbackType]();
break;
case PlayerRepeat.ONE:
handleRepeatOne[playerType]();
handleRepeatOne[playbackType]();
break;
default:
@ -299,7 +296,7 @@ export const useCenterControls = (args: { playersRef: any }) => {
checkIsLastTrack,
pause,
play,
playerType,
playbackType,
repeatStatus,
resetPlayers,
setCurrentIndex,
@ -380,13 +377,13 @@ export const useCenterControls = (args: { playersRef: any }) => {
switch (repeatStatus) {
case PlayerRepeat.NONE:
handleRepeatNone[playerType]();
handleRepeatNone[playbackType]();
break;
case PlayerRepeat.ALL:
handleRepeatAll[playerType]();
handleRepeatAll[playbackType]();
break;
case PlayerRepeat.ONE:
handleRepeatOne[playerType]();
handleRepeatOne[playbackType]();
break;
default:
@ -398,7 +395,7 @@ export const useCenterControls = (args: { playersRef: any }) => {
checkIsLastTrack,
next,
pause,
playerType,
playbackType,
repeatStatus,
resetPlayers,
setCurrentIndex,
@ -511,13 +508,13 @@ export const useCenterControls = (args: { playersRef: any }) => {
switch (repeatStatus) {
case PlayerRepeat.NONE:
handleRepeatNone[playerType]();
handleRepeatNone[playbackType]();
break;
case PlayerRepeat.ALL:
handleRepeatAll[playerType]();
handleRepeatAll[playbackType]();
break;
case PlayerRepeat.ONE:
handleRepeatOne[playerType]();
handleRepeatOne[playbackType]();
break;
default:
@ -531,7 +528,7 @@ export const useCenterControls = (args: { playersRef: any }) => {
handleScrobbleFromSongRestart,
isMpvPlayer,
pause,
playerType,
playbackType,
previous,
queue.length,
repeatStatus,

View file

@ -1,7 +1,7 @@
import { useCallback, useRef } from 'react';
import { useQueryClient } from '@tanstack/react-query';
import { useCurrentServer, usePlayerControls, usePlayerStore } from '/@/renderer/store';
import { usePlayerType } from '/@/renderer/store/settings.store';
import { usePlaybackType } from '/@/renderer/store/settings.store';
import {
PlayQueueAddOptions,
Play,
@ -65,7 +65,7 @@ const addToQueue = usePlayerStore.getState().actions.addToQueue;
export const useHandlePlayQueueAdd = () => {
const { t } = useTranslation();
const queryClient = useQueryClient();
const playerType = usePlayerType();
const playbackType = usePlaybackType();
const server = useCurrentServer();
const { play } = usePlayerControls();
const timeoutIds = useRef<Record<string, ReturnType<typeof setTimeout>> | null>({});
@ -170,7 +170,7 @@ export const useHandlePlayQueueAdd = () => {
const hadSong = usePlayerStore.getState().queue.default.length > 0;
const playerData = addToQueue({ initialIndex: initialSongIndex, playType, songs });
if (playerType === PlaybackType.LOCAL) {
if (playbackType === PlaybackType.LOCAL) {
mpvPlayer!.volume(usePlayerStore.getState().volume);
if (playType === Play.NEXT || playType === Play.LAST) {
@ -200,7 +200,7 @@ export const useHandlePlayQueueAdd = () => {
return null;
},
[play, playerType, queryClient, server, t],
[play, playbackType, queryClient, server, t],
);
return handlePlayQueueAdd;