mirror of
https://github.com/antebudimir/feishin.git
synced 2026-03-02 12:17:25 +00:00
Fallback to web player if mpv fails to run
This commit is contained in:
parent
fb08502e51
commit
9b0c9ba3ac
14 changed files with 115 additions and 70 deletions
|
|
@ -22,6 +22,7 @@ export interface PlayerState {
|
|||
status: PlayerStatus;
|
||||
time: number;
|
||||
};
|
||||
fallback: boolean | null;
|
||||
muted: boolean;
|
||||
queue: {
|
||||
default: QueueSong[];
|
||||
|
|
@ -85,6 +86,7 @@ export interface PlayerSlice extends PlayerState {
|
|||
setCurrentSpeed: (speed: number) => void;
|
||||
setCurrentTime: (time: number, seek?: boolean) => void;
|
||||
setCurrentTrack: (uniqueId: string) => PlayerData;
|
||||
setFallback: (fallback: boolean | null) => boolean;
|
||||
setFavorite: (ids: string[], favorite: boolean) => string[];
|
||||
setMuted: (muted: boolean) => void;
|
||||
setRating: (ids: string[], rating: number | null) => string[];
|
||||
|
|
@ -806,6 +808,13 @@ export const usePlayerStore = create<PlayerSlice>()(
|
|||
|
||||
return get().actions.getPlayerData();
|
||||
},
|
||||
setFallback: (fallback) => {
|
||||
set((state) => {
|
||||
state.fallback = fallback;
|
||||
});
|
||||
|
||||
return fallback || false;
|
||||
},
|
||||
setFavorite: (ids, favorite) => {
|
||||
const { default: queue } = get().queue;
|
||||
const foundUniqueIds = [];
|
||||
|
|
@ -953,6 +962,7 @@ export const usePlayerStore = create<PlayerSlice>()(
|
|||
status: PlayerStatus.PAUSED,
|
||||
time: 0,
|
||||
},
|
||||
fallback: null,
|
||||
muted: false,
|
||||
queue: {
|
||||
default: [],
|
||||
|
|
@ -973,7 +983,7 @@ export const usePlayerStore = create<PlayerSlice>()(
|
|||
},
|
||||
name: 'store_player',
|
||||
partialize: (state) => {
|
||||
const notPersisted = ['queue', 'current', 'entry'];
|
||||
const notPersisted = ['queue', 'current', 'entry', 'fallback'];
|
||||
return Object.fromEntries(
|
||||
Object.entries(state).filter(([key]) => !notPersisted.includes(key)),
|
||||
);
|
||||
|
|
@ -1066,6 +1076,10 @@ export const useMuted = () => usePlayerStore((state) => state.muted);
|
|||
|
||||
export const useSpeed = () => usePlayerStore((state) => state.current.speed);
|
||||
|
||||
export const usePlayerFallback = () => usePlayerStore((state) => state.fallback);
|
||||
|
||||
export const useSetPlayerFallback = () => usePlayerStore((state) => state.actions.setFallback);
|
||||
|
||||
export const useSetCurrentSpeed = () => usePlayerStore((state) => state.actions.setCurrentSpeed);
|
||||
|
||||
export const useSetQueueFavorite = () => usePlayerStore((state) => state.actions.setFavorite);
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import {
|
|||
} from '/@/renderer/types';
|
||||
import { randomString } from '/@/renderer/utils';
|
||||
import i18n from '/@/i18n/i18n';
|
||||
import { usePlayerStore } from '/@/renderer/store/player.store';
|
||||
|
||||
const utils = isElectron() ? window.electron.utils : null;
|
||||
|
||||
|
|
@ -616,7 +617,16 @@ export const useTableSettings = (type: TableType) =>
|
|||
|
||||
export const useGeneralSettings = () => useSettingsStore((state) => state.general, shallow);
|
||||
|
||||
export const usePlayerType = () => useSettingsStore((state) => state.playback.type, shallow);
|
||||
export const usePlaybackType = () =>
|
||||
useSettingsStore((state) => {
|
||||
const isFallback = usePlayerStore.getState().fallback;
|
||||
|
||||
if (isFallback) {
|
||||
return PlaybackType.WEB;
|
||||
}
|
||||
|
||||
return state.playback.type;
|
||||
});
|
||||
|
||||
export const usePlayButtonBehavior = () =>
|
||||
useSettingsStore((state) => state.general.playButtonBehavior, shallow);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue