import { useHotkeys } from '@mantine/hooks'; import { useQueryClient } from '@tanstack/react-query'; import formatDuration from 'format-duration'; import isElectron from 'is-electron'; import { useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; 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, 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'; interface CenterControlsProps { playersRef: any; } export const CenterControls = ({ playersRef }: CenterControlsProps) => { const { t } = useTranslation(); const queryClient = useQueryClient(); const currentSong = useCurrentSong(); const skip = useSettingsStore((state) => state.general.skipButtons); const buttonSize = useSettingsStore((state) => state.general.buttonSize); const player1 = playersRef?.current?.player1; const player2 = playersRef?.current?.player2; const status = useCurrentStatus(); const repeat = useRepeatStatus(); const shuffle = useShuffleStatus(); const { bindings } = useHotkeySettings(); const { handleNextTrack, handlePause, handlePlay, handlePlayPause, handlePrevTrack, handleSeekSlider, handleSkipBackward, handleSkipForward, handleStop, handleToggleRepeat, handleToggleShuffle, } = useCenterControls({ playersRef }); const handlePlayQueueAdd = usePlayQueueAdd(); 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, }); return ( <>