mirror of
https://github.com/jeffvli/feishin.git
synced 2026-06-10 14:22:46 +02:00
temporarily remove old player implementations to prevent broken app
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
import { useHotkeys } from '@mantine/hooks';
|
||||
import { useQueryClient } from '@tanstack/react-query';
|
||||
import formatDuration from 'format-duration';
|
||||
import isElectron from 'is-electron';
|
||||
@@ -10,27 +9,24 @@ import styles from './center-controls.module.css';
|
||||
import { PlayButton, PlayerButton } from '/@/renderer/features/player/components/player-button';
|
||||
import { PlayerbarSlider } from '/@/renderer/features/player/components/playerbar-slider';
|
||||
import { openShuffleAllModal } from '/@/renderer/features/player/components/shuffle-all-modal';
|
||||
import { useCenterControls } from '/@/renderer/features/player/hooks/use-center-controls';
|
||||
import { useMediaSession } from '/@/renderer/features/player/hooks/use-media-session';
|
||||
import { usePlayQueueAdd } from '/@/renderer/features/player/hooks/use-playqueue-add';
|
||||
import {
|
||||
useAppStore,
|
||||
useAppStoreActions,
|
||||
useCurrentPlayer,
|
||||
useCurrentSong,
|
||||
useCurrentStatus,
|
||||
useCurrentTime,
|
||||
useHotkeySettings,
|
||||
usePlaybackType,
|
||||
useRepeatStatus,
|
||||
useSetCurrentTime,
|
||||
usePlayerNum,
|
||||
usePlayerRepeat,
|
||||
usePlayerShuffle,
|
||||
usePlayerSong,
|
||||
usePlayerStatus,
|
||||
usePlayerTimestamp,
|
||||
useSettingsStore,
|
||||
useShuffleStatus,
|
||||
} from '/@/renderer/store';
|
||||
import { Icon } from '/@/shared/components/icon/icon';
|
||||
import { Text } from '/@/shared/components/text/text';
|
||||
import { PlaybackSelectors } from '/@/shared/constants/playback-selectors';
|
||||
import { PlaybackType, PlayerRepeat, PlayerShuffle, PlayerStatus } from '/@/shared/types/types';
|
||||
import { PlayerRepeat, PlayerShuffle, PlayerStatus, PlayerType } from '/@/shared/types/types';
|
||||
|
||||
interface CenterControlsProps {
|
||||
playersRef: any;
|
||||
@@ -40,38 +36,38 @@ export const CenterControls = ({ playersRef }: CenterControlsProps) => {
|
||||
const { t } = useTranslation();
|
||||
const queryClient = useQueryClient();
|
||||
const [isSeeking, setIsSeeking] = useState(false);
|
||||
const currentSong = useCurrentSong();
|
||||
const currentSong = usePlayerSong();
|
||||
const skip = useSettingsStore((state) => state.general.skipButtons);
|
||||
const buttonSize = useSettingsStore((state) => state.general.buttonSize);
|
||||
const playbackType = usePlaybackType();
|
||||
const player1 = playersRef?.current?.player1;
|
||||
const player2 = playersRef?.current?.player2;
|
||||
const status = useCurrentStatus();
|
||||
const player = useCurrentPlayer();
|
||||
const setCurrentTime = useSetCurrentTime();
|
||||
const repeat = useRepeatStatus();
|
||||
const shuffle = useShuffleStatus();
|
||||
const status = usePlayerStatus();
|
||||
const player = usePlayerNum();
|
||||
// const setCurrentTime = useSetCurrentTime();
|
||||
const repeat = usePlayerRepeat();
|
||||
const shuffle = usePlayerShuffle();
|
||||
const { bindings } = useHotkeySettings();
|
||||
const { showTimeRemaining } = useAppStore();
|
||||
const { setShowTimeRemaining } = useAppStoreActions();
|
||||
|
||||
const {
|
||||
handleNextTrack,
|
||||
handlePause,
|
||||
handlePlay,
|
||||
handlePlayPause,
|
||||
handlePrevTrack,
|
||||
handleSeekSlider,
|
||||
handleSkipBackward,
|
||||
handleSkipForward,
|
||||
handleStop,
|
||||
handleToggleRepeat,
|
||||
handleToggleShuffle,
|
||||
} = useCenterControls({ playersRef });
|
||||
// const {
|
||||
// handleNextTrack,
|
||||
// handlePause,
|
||||
// handlePlay,
|
||||
// handlePlayPause,
|
||||
// handlePrevTrack,
|
||||
// handleSeekSlider,
|
||||
// handleSkipBackward,
|
||||
// handleSkipForward,
|
||||
// handleStop,
|
||||
// handleToggleRepeat,
|
||||
// handleToggleShuffle,
|
||||
// } = useCenterControls({ playersRef });
|
||||
const handlePlayQueueAdd = usePlayQueueAdd();
|
||||
|
||||
const songDuration = currentSong?.duration ? currentSong.duration / 1000 : 0;
|
||||
const currentTime = useCurrentTime();
|
||||
const currentTime = usePlayerTimestamp();
|
||||
const currentPlayerRef = player === 1 ? player1 : player2;
|
||||
const formattedDuration = formatDuration(songDuration * 1000 || 0);
|
||||
const formattedTimeRemaining = formatDuration((currentTime - songDuration) * 1000 || 0);
|
||||
@@ -81,50 +77,50 @@ export const CenterControls = ({ playersRef }: CenterControlsProps) => {
|
||||
let interval: ReturnType<typeof setInterval>;
|
||||
|
||||
if (status === PlayerStatus.PLAYING && !isSeeking) {
|
||||
if (!isElectron() || playbackType === PlaybackType.WEB) {
|
||||
if (!isElectron() || playbackType === PlayerType.WEB) {
|
||||
// Update twice a second for slightly better performance
|
||||
interval = setInterval(() => {
|
||||
if (currentPlayerRef) {
|
||||
setCurrentTime(currentPlayerRef.getCurrentTime());
|
||||
// setCurrentTime(currentPlayerRef.getCurrentTime());
|
||||
}
|
||||
}, 500);
|
||||
}
|
||||
}
|
||||
|
||||
return () => clearInterval(interval);
|
||||
}, [currentPlayerRef, isSeeking, setCurrentTime, playbackType, status]);
|
||||
}, [currentPlayerRef, isSeeking, playbackType, status]);
|
||||
|
||||
const [seekValue, setSeekValue] = useState(0);
|
||||
|
||||
useHotkeys([
|
||||
[bindings.playPause.isGlobal ? '' : bindings.playPause.hotkey, handlePlayPause],
|
||||
[bindings.play.isGlobal ? '' : bindings.play.hotkey, handlePlay],
|
||||
[bindings.pause.isGlobal ? '' : bindings.pause.hotkey, handlePause],
|
||||
[bindings.stop.isGlobal ? '' : bindings.stop.hotkey, handleStop],
|
||||
[bindings.next.isGlobal ? '' : bindings.next.hotkey, handleNextTrack],
|
||||
[bindings.previous.isGlobal ? '' : bindings.previous.hotkey, handlePrevTrack],
|
||||
[bindings.toggleRepeat.isGlobal ? '' : bindings.toggleRepeat.hotkey, handleToggleRepeat],
|
||||
[bindings.toggleShuffle.isGlobal ? '' : bindings.toggleShuffle.hotkey, handleToggleShuffle],
|
||||
[
|
||||
bindings.skipBackward.isGlobal ? '' : bindings.skipBackward.hotkey,
|
||||
() => handleSkipBackward(skip?.skipBackwardSeconds || 5),
|
||||
],
|
||||
[
|
||||
bindings.skipForward.isGlobal ? '' : bindings.skipForward.hotkey,
|
||||
() => handleSkipForward(skip?.skipForwardSeconds || 5),
|
||||
],
|
||||
]);
|
||||
// useHotkeys([
|
||||
// [bindings.playPause.isGlobal ? '' : bindings.playPause.hotkey, handlePlayPause],
|
||||
// [bindings.play.isGlobal ? '' : bindings.play.hotkey, handlePlay],
|
||||
// [bindings.pause.isGlobal ? '' : bindings.pause.hotkey, handlePause],
|
||||
// [bindings.stop.isGlobal ? '' : bindings.stop.hotkey, handleStop],
|
||||
// [bindings.next.isGlobal ? '' : bindings.next.hotkey, handleNextTrack],
|
||||
// [bindings.previous.isGlobal ? '' : bindings.previous.hotkey, handlePrevTrack],
|
||||
// [bindings.toggleRepeat.isGlobal ? '' : bindings.toggleRepeat.hotkey, handleToggleRepeat],
|
||||
// [bindings.toggleShuffle.isGlobal ? '' : bindings.toggleShuffle.hotkey, handleToggleShuffle],
|
||||
// [
|
||||
// bindings.skipBackward.isGlobal ? '' : bindings.skipBackward.hotkey,
|
||||
// () => handleSkipBackward(skip?.skipBackwardSeconds || 5),
|
||||
// ],
|
||||
// [
|
||||
// bindings.skipForward.isGlobal ? '' : bindings.skipForward.hotkey,
|
||||
// () => handleSkipForward(skip?.skipForwardSeconds || 5),
|
||||
// ],
|
||||
// ]);
|
||||
|
||||
useMediaSession({
|
||||
handleNextTrack,
|
||||
handlePause,
|
||||
handlePlay,
|
||||
handlePrevTrack,
|
||||
handleSeekSlider,
|
||||
handleSkipBackward,
|
||||
handleSkipForward,
|
||||
handleStop,
|
||||
});
|
||||
// useMediaSession({
|
||||
// handleNextTrack,
|
||||
// handlePause,
|
||||
// handlePlay,
|
||||
// handlePrevTrack,
|
||||
// handleSeekSlider,
|
||||
// handleSkipBackward,
|
||||
// handleSkipForward,
|
||||
// handleStop,
|
||||
// });
|
||||
|
||||
return (
|
||||
<>
|
||||
@@ -132,7 +128,7 @@ export const CenterControls = ({ playersRef }: CenterControlsProps) => {
|
||||
<div className={styles.buttonsContainer}>
|
||||
<PlayerButton
|
||||
icon={<Icon fill="default" icon="mediaStop" size={buttonSize - 2} />}
|
||||
onClick={handleStop}
|
||||
// onClick={handleStop}
|
||||
tooltip={{
|
||||
label: t('player.stop', { postProcess: 'sentenceCase' }),
|
||||
openDelay: 0,
|
||||
@@ -148,7 +144,7 @@ export const CenterControls = ({ playersRef }: CenterControlsProps) => {
|
||||
/>
|
||||
}
|
||||
isActive={shuffle !== PlayerShuffle.NONE}
|
||||
onClick={handleToggleShuffle}
|
||||
// onClick={handleToggleShuffle}
|
||||
tooltip={{
|
||||
label:
|
||||
shuffle === PlayerShuffle.NONE
|
||||
@@ -163,7 +159,7 @@ export const CenterControls = ({ playersRef }: CenterControlsProps) => {
|
||||
/>
|
||||
<PlayerButton
|
||||
icon={<Icon fill="default" icon="mediaPrevious" size={buttonSize} />}
|
||||
onClick={handlePrevTrack}
|
||||
// onClick={handlePrevTrack}
|
||||
tooltip={{
|
||||
label: t('player.previous', { postProcess: 'sentenceCase' }),
|
||||
openDelay: 0,
|
||||
@@ -175,7 +171,7 @@ export const CenterControls = ({ playersRef }: CenterControlsProps) => {
|
||||
icon={
|
||||
<Icon fill="default" icon="mediaStepBackward" size={buttonSize} />
|
||||
}
|
||||
onClick={() => handleSkipBackward(skip?.skipBackwardSeconds)}
|
||||
// onClick={() => handleSkipBackward(skip?.skipBackwardSeconds)}
|
||||
tooltip={{
|
||||
label: t('player.skip', {
|
||||
context: 'back',
|
||||
@@ -190,12 +186,12 @@ export const CenterControls = ({ playersRef }: CenterControlsProps) => {
|
||||
<PlayButton
|
||||
disabled={currentSong?.id === undefined}
|
||||
isPaused={status === PlayerStatus.PAUSED}
|
||||
onClick={handlePlayPause}
|
||||
// onClick={handlePlayPause}
|
||||
/>
|
||||
{skip?.enabled && (
|
||||
<PlayerButton
|
||||
icon={<Icon fill="default" icon="mediaStepForward" size={buttonSize} />}
|
||||
onClick={() => handleSkipForward(skip?.skipForwardSeconds)}
|
||||
// onClick={() => handleSkipForward(skip?.skipForwardSeconds)}
|
||||
tooltip={{
|
||||
label: t('player.skip', {
|
||||
context: 'forward',
|
||||
@@ -209,7 +205,7 @@ export const CenterControls = ({ playersRef }: CenterControlsProps) => {
|
||||
)}
|
||||
<PlayerButton
|
||||
icon={<Icon fill="default" icon="mediaNext" size={buttonSize} />}
|
||||
onClick={handleNextTrack}
|
||||
// onClick={handleNextTrack}
|
||||
tooltip={{
|
||||
label: t('player.next', { postProcess: 'sentenceCase' }),
|
||||
openDelay: 0,
|
||||
@@ -229,7 +225,7 @@ export const CenterControls = ({ playersRef }: CenterControlsProps) => {
|
||||
)
|
||||
}
|
||||
isActive={repeat !== PlayerRepeat.NONE}
|
||||
onClick={handleToggleRepeat}
|
||||
// onClick={handleToggleRepeat}
|
||||
tooltip={{
|
||||
label: `${
|
||||
repeat === PlayerRepeat.NONE
|
||||
@@ -294,7 +290,7 @@ export const CenterControls = ({ playersRef }: CenterControlsProps) => {
|
||||
// event fires before onChange. Add a small delay to force
|
||||
// onChangeEnd to happen after onCHange
|
||||
setTimeout(() => {
|
||||
handleSeekSlider(e);
|
||||
// handleSeekSlider(e);
|
||||
setIsSeeking(false);
|
||||
}, 50);
|
||||
}}
|
||||
|
||||
@@ -15,7 +15,7 @@ import {
|
||||
} from '/@/renderer/store/full-screen-player.store';
|
||||
import { Button } from '/@/shared/components/button/button';
|
||||
import { Group } from '/@/shared/components/group/group';
|
||||
import { PlaybackType } from '/@/shared/types/types';
|
||||
import { PlayerType } from '/@/shared/types/types';
|
||||
|
||||
const Visualizer = lazy(() =>
|
||||
import('/@/renderer/features/player/components/visualizer').then((module) => ({
|
||||
@@ -48,7 +48,7 @@ export const FullScreenPlayerQueue = () => {
|
||||
},
|
||||
];
|
||||
|
||||
if (type === PlaybackType.WEB && webAudio) {
|
||||
if (type === PlayerType.WEB && webAudio) {
|
||||
items.push({
|
||||
active: activeTab === 'visualizer',
|
||||
label: t('page.fullscreenPlayer.visualizer', { postProcess: 'titleCase' }),
|
||||
@@ -107,7 +107,7 @@ export const FullScreenPlayerQueue = () => {
|
||||
</div>
|
||||
) : activeTab === 'lyrics' ? (
|
||||
<Lyrics />
|
||||
) : activeTab === 'visualizer' && type === PlaybackType.WEB && webAudio ? (
|
||||
) : activeTab === 'visualizer' && type === PlayerType.WEB && webAudio ? (
|
||||
<Suspense fallback={<></>}>
|
||||
<Visualizer />
|
||||
</Suspense>
|
||||
|
||||
@@ -11,7 +11,7 @@ import { FullScreenPlayerImage } from '/@/renderer/features/player/components/fu
|
||||
import { FullScreenPlayerQueue } from '/@/renderer/features/player/components/full-screen-player-queue';
|
||||
import { useFastAverageColor } from '/@/renderer/hooks';
|
||||
import {
|
||||
useCurrentSong,
|
||||
usePlayerSong,
|
||||
useFullScreenPlayerStore,
|
||||
useFullScreenPlayerStoreActions,
|
||||
useLyricsSettings,
|
||||
@@ -421,7 +421,7 @@ export const FullScreenPlayer = () => {
|
||||
isOpenedRef.current = true;
|
||||
}, [location, setStore]);
|
||||
|
||||
const currentSong = useCurrentSong();
|
||||
const currentSong = usePlayerSong();
|
||||
const { background } = useFastAverageColor({
|
||||
algorithm: 'dominant',
|
||||
src: currentSong?.imageUrl,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { SimilarSongsList } from '/@/renderer/features/similar-songs/components/similar-songs-list';
|
||||
import { useCurrentSong } from '/@/renderer/store';
|
||||
import { usePlayerSong } from '/@/renderer/store';
|
||||
|
||||
export const FullScreenSimilarSongs = () => {
|
||||
const currentSong = useCurrentSong();
|
||||
const currentSong = usePlayerSong();
|
||||
|
||||
return currentSong?.id ? <SimilarSongsList fullScreen song={currentSong} /> : null;
|
||||
};
|
||||
|
||||
@@ -12,7 +12,7 @@ import { useHandleGeneralContextMenu } from '/@/renderer/features/context-menu/h
|
||||
import { AppRoute } from '/@/renderer/router/routes';
|
||||
import {
|
||||
useAppStoreActions,
|
||||
useCurrentSong,
|
||||
usePlayerSong,
|
||||
useFullScreenPlayerStore,
|
||||
useHotkeySettings,
|
||||
useSetFullScreenPlayerStore,
|
||||
@@ -34,7 +34,7 @@ export const LeftControls = () => {
|
||||
const setFullScreenPlayerStore = useSetFullScreenPlayerStore();
|
||||
const { collapsed, image } = useSidebarStore();
|
||||
const hideImage = image && !collapsed;
|
||||
const currentSong = useCurrentSong();
|
||||
const currentSong = usePlayerSong();
|
||||
const title = currentSong?.name;
|
||||
const artists = currentSong?.artists;
|
||||
const { bindings } = useHotkeySettings();
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import clsx from 'clsx';
|
||||
import { MouseEvent, useCallback } from 'react';
|
||||
import { MouseEvent } from 'react';
|
||||
|
||||
import styles from './playerbar.module.css';
|
||||
|
||||
@@ -9,17 +9,17 @@ import { LeftControls } from '/@/renderer/features/player/components/left-contro
|
||||
import { RightControls } from '/@/renderer/features/player/components/right-controls';
|
||||
import { usePowerSaveBlocker } from '/@/renderer/features/player/hooks/use-power-save-blocker';
|
||||
import { PlayersRef } from '/@/renderer/features/player/ref/players-ref';
|
||||
import { updateSong } from '/@/renderer/features/player/update-remote-song';
|
||||
import {
|
||||
useCurrentPlayer,
|
||||
useCurrentStatus,
|
||||
useFullScreenPlayerStore,
|
||||
useMuted,
|
||||
usePlayer1Data,
|
||||
usePlayer2Data,
|
||||
usePlayerControls,
|
||||
usePlayerData,
|
||||
// usePlayer1Data,
|
||||
// usePlayer2Data,
|
||||
// usePlayerControls,
|
||||
usePlayerMuted,
|
||||
usePlayerNum,
|
||||
usePlayerStatus,
|
||||
usePlayerVolume,
|
||||
useSetFullScreenPlayerStore,
|
||||
useVolume,
|
||||
} from '/@/renderer/store';
|
||||
import {
|
||||
useGeneralSettings,
|
||||
@@ -27,20 +27,20 @@ import {
|
||||
useSettingsStore,
|
||||
} from '/@/renderer/store/settings.store';
|
||||
import { PlaybackSelectors } from '/@/shared/constants/playback-selectors';
|
||||
import { PlaybackType } from '/@/shared/types/types';
|
||||
import { PlayerType } from '/@/shared/types/types';
|
||||
|
||||
export const Playerbar = () => {
|
||||
const playersRef = PlayersRef;
|
||||
const settings = useSettingsStore((state) => state.playback);
|
||||
const { playerbarOpenDrawer } = useGeneralSettings();
|
||||
const playbackType = usePlaybackType();
|
||||
const volume = useVolume();
|
||||
const player1 = usePlayer1Data();
|
||||
const player2 = usePlayer2Data();
|
||||
const status = useCurrentStatus();
|
||||
const player = useCurrentPlayer();
|
||||
const muted = useMuted();
|
||||
const { autoNext } = usePlayerControls();
|
||||
const volume = usePlayerVolume();
|
||||
// const player1 = usePlayer1Data();
|
||||
// const player2 = usePlayer2Data();
|
||||
const status = usePlayerStatus();
|
||||
const player = usePlayerNum();
|
||||
const muted = usePlayerMuted();
|
||||
// const { autoNext } = usePlayerControls();
|
||||
const { expanded: isFullScreenPlayerExpanded } = useFullScreenPlayerStore();
|
||||
const setFullScreenPlayerStore = useSetFullScreenPlayerStore();
|
||||
|
||||
@@ -51,10 +51,12 @@ export const Playerbar = () => {
|
||||
setFullScreenPlayerStore({ expanded: !isFullScreenPlayerExpanded });
|
||||
};
|
||||
|
||||
const autoNextFn = useCallback(() => {
|
||||
const playerData = autoNext();
|
||||
updateSong(playerData.current.song);
|
||||
}, [autoNext]);
|
||||
const { player1, player2 } = usePlayerData();
|
||||
|
||||
// const autoNextFn = useCallback(() => {
|
||||
// const playerData = autoNext();
|
||||
// updateSong(playerData.current.song);
|
||||
// }, [autoNext]);
|
||||
|
||||
return (
|
||||
<div
|
||||
@@ -72,9 +74,9 @@ export const Playerbar = () => {
|
||||
<RightControls />
|
||||
</div>
|
||||
</div>
|
||||
{playbackType === PlaybackType.WEB && (
|
||||
{playbackType === PlayerType.WEB && (
|
||||
<AudioPlayer
|
||||
autoNext={autoNextFn}
|
||||
// autoNext={autoNextFn}
|
||||
crossfadeDuration={settings.crossfadeDuration}
|
||||
crossfadeStyle={settings.crossfadeStyle}
|
||||
currentPlayer={player}
|
||||
|
||||
@@ -11,17 +11,16 @@ import { useSetRating } from '/@/renderer/features/shared/mutations/set-rating-m
|
||||
import {
|
||||
useAppStoreActions,
|
||||
useCurrentServer,
|
||||
useCurrentSong,
|
||||
useHotkeySettings,
|
||||
useMuted,
|
||||
usePlaybackSettings,
|
||||
usePlaybackType,
|
||||
usePreviousSong,
|
||||
usePlayerMuted,
|
||||
usePlayerSong,
|
||||
usePlayerSpeed,
|
||||
usePlayerVolume,
|
||||
useSettingsStore,
|
||||
useSettingsStoreActions,
|
||||
useSidebarStore,
|
||||
useSpeed,
|
||||
useVolume,
|
||||
} from '/@/renderer/store';
|
||||
import { ActionIcon } from '/@/shared/components/action-icon/action-icon';
|
||||
import { DropdownMenu } from '/@/shared/components/dropdown-menu/dropdown-menu';
|
||||
@@ -40,11 +39,11 @@ const remote = isElectron() ? window.api.remote : null;
|
||||
export const RightControls = () => {
|
||||
const { t } = useTranslation();
|
||||
const isMinWidth = useMediaQuery('(max-width: 480px)');
|
||||
const volume = useVolume();
|
||||
const muted = useMuted();
|
||||
const volume = usePlayerVolume();
|
||||
const muted = usePlayerMuted();
|
||||
const server = useCurrentServer();
|
||||
const currentSong = useCurrentSong();
|
||||
const previousSong = usePreviousSong();
|
||||
const currentSong = usePlayerSong();
|
||||
// const previousSong = usePreviousSong();
|
||||
const { setSideBar } = useAppStoreActions();
|
||||
const { rightExpanded: isQueueExpanded } = useSidebarStore();
|
||||
const { bindings } = useHotkeySettings();
|
||||
@@ -60,7 +59,7 @@ export const RightControls = () => {
|
||||
const playbackSettings = usePlaybackSettings();
|
||||
const playbackType = usePlaybackType();
|
||||
|
||||
const speed = useSpeed();
|
||||
const speed = usePlayerSpeed();
|
||||
const volumeWidth = useSettingsStore((state) => state.general.volumeWidth);
|
||||
const speedPreservePitch = useSettingsStore((state) => state.playback.preservePitch);
|
||||
|
||||
@@ -148,18 +147,18 @@ export const RightControls = () => {
|
||||
bindings.favoriteCurrentToggle.isGlobal ? '' : bindings.favoriteCurrentToggle.hotkey,
|
||||
() => handleToggleFavorite(currentSong),
|
||||
],
|
||||
[
|
||||
bindings.favoritePreviousAdd.isGlobal ? '' : bindings.favoritePreviousAdd.hotkey,
|
||||
() => handleAddToFavorites(previousSong),
|
||||
],
|
||||
[
|
||||
bindings.favoritePreviousRemove.isGlobal ? '' : bindings.favoritePreviousRemove.hotkey,
|
||||
() => handleRemoveFromFavorites(previousSong),
|
||||
],
|
||||
[
|
||||
bindings.favoritePreviousToggle.isGlobal ? '' : bindings.favoritePreviousToggle.hotkey,
|
||||
() => handleToggleFavorite(previousSong),
|
||||
],
|
||||
// [
|
||||
// bindings.favoritePreviousAdd.isGlobal ? '' : bindings.favoritePreviousAdd.hotkey,
|
||||
// () => handleAddToFavorites(previousSong),
|
||||
// ],
|
||||
// [
|
||||
// bindings.favoritePreviousRemove.isGlobal ? '' : bindings.favoritePreviousRemove.hotkey,
|
||||
// () => handleRemoveFromFavorites(previousSong),
|
||||
// ],
|
||||
// [
|
||||
// bindings.favoritePreviousToggle.isGlobal ? '' : bindings.favoritePreviousToggle.hotkey,
|
||||
// () => handleToggleFavorite(previousSong),
|
||||
// ],
|
||||
[bindings.rate0.isGlobal ? '' : bindings.rate0.hotkey, () => handleUpdateRating(0)],
|
||||
[bindings.rate1.isGlobal ? '' : bindings.rate1.hotkey, () => handleUpdateRating(1)],
|
||||
[bindings.rate2.isGlobal ? '' : bindings.rate2.hotkey, () => handleUpdateRating(2)],
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,226 +1,226 @@
|
||||
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 { 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, usePlayerControls, 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';
|
||||
// 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;
|
||||
// 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;
|
||||
}
|
||||
// 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;
|
||||
};
|
||||
// return queryKey;
|
||||
// };
|
||||
|
||||
const mpvPlayer = isElectron() ? window.api.mpvPlayer : null;
|
||||
// const mpvPlayer = isElectron() ? window.api.mpvPlayer : null;
|
||||
|
||||
const addToQueue = usePlayerStore.getState().actions.addToQueue;
|
||||
// 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>>>({});
|
||||
// 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 { 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;
|
||||
// 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;
|
||||
// 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),
|
||||
};
|
||||
// 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 });
|
||||
}
|
||||
}
|
||||
// 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];
|
||||
// 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);
|
||||
// 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,
|
||||
});
|
||||
}
|
||||
// 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;
|
||||
}
|
||||
// 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 (!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);
|
||||
}
|
||||
// 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 });
|
||||
// const hadSong = usePlayerStore.getState().queue.default.length > 0;
|
||||
// const playerData = addToQueue({ initialIndex: initialSongIndex, playType, songs });
|
||||
|
||||
updateSong(playerData.current.song);
|
||||
// updateSong(playerData.current.song);
|
||||
|
||||
const replacesQueue = playType === Play.NOW || playType === Play.SHUFFLE;
|
||||
// const replacesQueue = playType === Play.NOW || playType === Play.SHUFFLE;
|
||||
|
||||
if (playbackType === PlaybackType.LOCAL) {
|
||||
mpvPlayer!.volume(usePlayerStore.getState().volume);
|
||||
// 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;
|
||||
}
|
||||
}
|
||||
// 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();
|
||||
}
|
||||
// // 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 null;
|
||||
// },
|
||||
// [doubleClickQueueAll, play, playbackType, queryClient, server, t],
|
||||
// );
|
||||
|
||||
return handlePlayQueueAdd;
|
||||
};
|
||||
// return handlePlayQueueAdd;
|
||||
// };
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { useEffect } from 'react';
|
||||
|
||||
import {
|
||||
useCurrentSong,
|
||||
useCurrentStatus,
|
||||
usePlayerSong,
|
||||
usePlayerStatus,
|
||||
usePlaybackSettings,
|
||||
useSettingsStore,
|
||||
} from '/@/renderer/store';
|
||||
@@ -28,8 +28,8 @@ export const useMediaSession = ({
|
||||
handleStop: () => void;
|
||||
}) => {
|
||||
const { mediaSession: mediaSessionEnabled } = usePlaybackSettings();
|
||||
const playerStatus = useCurrentStatus();
|
||||
const currentSong = useCurrentSong();
|
||||
const playerStatus = usePlayerStatus();
|
||||
const currentSong = usePlayerSong();
|
||||
const mediaSession = navigator.mediaSession;
|
||||
const skip = useSettingsStore((state) => state.general.skipButtons);
|
||||
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
import isElectron from 'is-electron';
|
||||
import { useCallback, useEffect } from 'react';
|
||||
|
||||
import { useCurrentStatus } from '/@/renderer/store';
|
||||
import { usePlayerStatus } from '/@/renderer/store';
|
||||
import { useWindowSettings } from '/@/renderer/store';
|
||||
import { PlayerStatus } from '/@/shared/types/types';
|
||||
|
||||
const ipc = isElectron() ? window.api.ipc : null;
|
||||
|
||||
export const usePowerSaveBlocker = () => {
|
||||
const status = useCurrentStatus();
|
||||
const status = usePlayerStatus();
|
||||
const { preventSleepOnPlayback } = useWindowSettings();
|
||||
|
||||
const startPowerSaveBlocker = useCallback(async () => {
|
||||
|
||||
@@ -1,13 +1,7 @@
|
||||
import isElectron from 'is-electron';
|
||||
import { useCallback, useEffect, WheelEvent } from 'react';
|
||||
|
||||
import {
|
||||
useMuted,
|
||||
usePlayerControls,
|
||||
useSetCurrentSpeed,
|
||||
useSpeed,
|
||||
useVolume,
|
||||
} from '/@/renderer/store';
|
||||
import { usePlayerMuted, usePlayerSpeed, usePlayerVolume } from '/@/renderer/store';
|
||||
import { useGeneralSettings } from '/@/renderer/store/settings.store';
|
||||
|
||||
const mpvPlayer = isElectron() ? window.api.mpvPlayer : null;
|
||||
@@ -40,12 +34,12 @@ const calculateVolumeDown = (volume: number, volumeWheelStep: number) => {
|
||||
};
|
||||
|
||||
export const useRightControls = () => {
|
||||
const { setMuted, setVolume } = usePlayerControls();
|
||||
const volume = useVolume();
|
||||
const muted = useMuted();
|
||||
// const { setMuted, setVolume } = usePlayerControls();
|
||||
const volume = usePlayerVolume();
|
||||
const muted = usePlayerMuted();
|
||||
const { volumeWheelStep } = useGeneralSettings();
|
||||
const speed = useSpeed();
|
||||
const setCurrentSpeed = useSetCurrentSpeed();
|
||||
const speed = usePlayerSpeed();
|
||||
// const setCurrentSpeed = useSetCurrentSpeed();
|
||||
|
||||
// Ensure that the mpv player volume is set on startup
|
||||
useEffect(() => {
|
||||
@@ -63,40 +57,37 @@ export const useRightControls = () => {
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, []);
|
||||
|
||||
const handleSpeed = useCallback(
|
||||
(e: number) => {
|
||||
setCurrentSpeed(e);
|
||||
if (mpvPlayer) {
|
||||
mpvPlayer?.setProperties({ speed: e });
|
||||
}
|
||||
},
|
||||
[setCurrentSpeed],
|
||||
);
|
||||
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);
|
||||
// setVolume(e);
|
||||
};
|
||||
|
||||
const handleVolumeSliderState = (e: number) => {
|
||||
remote?.updateVolume(e);
|
||||
setVolume(e);
|
||||
// setVolume(e);
|
||||
};
|
||||
|
||||
const handleVolumeDown = useCallback(() => {
|
||||
const volumeToSet = calculateVolumeDown(volume, volumeWheelStep);
|
||||
mpvPlayer?.volume(volumeToSet);
|
||||
remote?.updateVolume(volumeToSet);
|
||||
setVolume(volumeToSet);
|
||||
}, [setVolume, volume, volumeWheelStep]);
|
||||
// setVolume(volumeToSet);
|
||||
}, [volume, volumeWheelStep]);
|
||||
|
||||
const handleVolumeUp = useCallback(() => {
|
||||
const volumeToSet = calculateVolumeUp(volume, volumeWheelStep);
|
||||
mpvPlayer?.volume(volumeToSet);
|
||||
remote?.updateVolume(volumeToSet);
|
||||
setVolume(volumeToSet);
|
||||
}, [setVolume, volume, volumeWheelStep]);
|
||||
// setVolume(volumeToSet);
|
||||
}, [volume, volumeWheelStep]);
|
||||
|
||||
const handleVolumeWheel = useCallback(
|
||||
(e: WheelEvent<HTMLButtonElement | HTMLDivElement>) => {
|
||||
@@ -109,15 +100,15 @@ export const useRightControls = () => {
|
||||
|
||||
mpvPlayer?.volume(volumeToSet);
|
||||
remote?.updateVolume(volumeToSet);
|
||||
setVolume(volumeToSet);
|
||||
// setVolume(volumeToSet);
|
||||
},
|
||||
[setVolume, volume, volumeWheelStep],
|
||||
[volume, volumeWheelStep],
|
||||
);
|
||||
|
||||
const handleMute = useCallback(() => {
|
||||
setMuted(!muted);
|
||||
// setMuted(!muted);
|
||||
mpvPlayer?.mute(!muted);
|
||||
}, [muted, setMuted]);
|
||||
}, [muted]);
|
||||
|
||||
useEffect(() => {
|
||||
if (isElectron()) {
|
||||
|
||||
@@ -3,12 +3,11 @@ import { AxiosError } from 'axios';
|
||||
|
||||
import { api } from '/@/renderer/api';
|
||||
import { MutationOptions } from '/@/renderer/lib/react-query';
|
||||
import { useIncrementQueuePlayCount } from '/@/renderer/store';
|
||||
import { usePlayEvent } from '/@/renderer/store/event.store';
|
||||
import { ScrobbleArgs, ScrobbleResponse } from '/@/shared/types/domain-types';
|
||||
|
||||
export const useSendScrobble = (options?: MutationOptions) => {
|
||||
const incrementPlayCount = useIncrementQueuePlayCount();
|
||||
// const incrementPlayCount = useIncrementQueuePlayCount();
|
||||
const sendPlayEvent = usePlayEvent();
|
||||
|
||||
return useMutation<ScrobbleResponse, AxiosError, ScrobbleArgs, null>({
|
||||
@@ -21,7 +20,7 @@ export const useSendScrobble = (options?: MutationOptions) => {
|
||||
onSuccess: (_data, variables) => {
|
||||
// Manually increment the play count for the song in the queue if scrobble was submitted
|
||||
if (variables.query.submission) {
|
||||
incrementPlayCount([variables.query.id]);
|
||||
// incrementPlayCount([variables.query.id]);
|
||||
sendPlayEvent(variables.query.id);
|
||||
}
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user