import { useCallback } from 'react'; import { Group, Image, Text, Title } from '@mantine/core'; import { useInfo, useSend, useShowImage } from '/@/remote/store'; import { RemoteButton } from '/@/remote/components/buttons/remote-button'; import formatDuration from 'format-duration'; import debounce from 'lodash/debounce'; import { RiHeartLine, RiPauseFill, RiPlayFill, RiRepeat2Line, RiRepeatOneLine, RiShuffleFill, RiSkipBackFill, RiSkipForwardFill, RiVolumeUpFill, } from 'react-icons/ri'; import { PlayerRepeat, PlayerStatus } from '/@/renderer/types'; import { WrapperSlider } from '/@/remote/components/wrapped-slider'; import { Tooltip } from '/@/renderer/components/tooltip'; import { Rating } from '/@/renderer/components'; export const RemoteContainer = () => { const { repeat, shuffle, song, status, volume } = useInfo(); const send = useSend(); const showImage = useShowImage(); const id = song?.id; const setRating = useCallback( (rating: number) => { send({ event: 'rating', id: id!, rating }); }, [send, id], ); const debouncedSetRating = debounce(setRating, 400); return ( <> {song && ( <> {song.name} Album: {song.album} Artist: {song.artistName} Duration: {formatDuration(song.duration)} {song.releaseDate && ( Released: {new Date(song.releaseDate).toLocaleDateString()} )} Plays: {song.playCount} )} send({ event: 'previous' })} > { if (status === PlayerStatus.PLAYING) { send({ event: 'pause' }); } else if (status === PlayerStatus.PAUSED) { send({ event: 'play' }); } }} > {song && status === PlayerStatus.PLAYING ? ( ) : ( )} send({ event: 'next' })} > send({ event: 'shuffle' })} > send({ event: 'repeat' })} > {repeat === undefined || repeat === PlayerRepeat.ONE ? ( ) : ( )} { if (!id) return; send({ event: 'favorite', favorite: !song.userFavorite, id }); }} > {(song?.serverType === 'navidrome' || song?.serverType === 'subsonic') && (
debouncedSetRating(0)} />
)}
} max={100} rightLabel={ {volume ?? 0} } value={volume ?? 0} onChangeEnd={(e) => send({ event: 'volume', volume: e })} /> {showImage && ( send({ event: 'proxy' })} /> )} ); };