import React, { memo } from 'react'; import { useTranslation } from 'react-i18next'; import { Cast, Clock, Radio, SkipForward, Users } from 'lucide-react'; import type { useRadioMetadata } from '../../hooks/useRadioMetadata'; import { usePlayerStore } from '../../store/playerStore'; import { formatTrackTime } from '../../utils/format/formatDuration'; type NonNullStoreField> = NonNullable[K]>; interface RadioViewProps { radioMeta: ReturnType; currentRadio: NonNullStoreField<'currentRadio'>; resolvedCover: string; } const RadioView = memo(function RadioView({ radioMeta, currentRadio, resolvedCover }: RadioViewProps) { const { t } = useTranslation(); return (
{currentRadio.name}
{radioMeta.currentTitle && (
{radioMeta.currentArtist && (<>{radioMeta.currentArtist}·)} {radioMeta.currentTitle} {radioMeta.currentAlbum && (<>·{radioMeta.currentAlbum})}
)}
{t('radio.live')} {radioMeta.source === 'azuracast' && AzuraCast} {radioMeta.listeners != null && ( {t('radio.listenerCount', { count: radioMeta.listeners })} )}
{radioMeta.source === 'azuracast' && radioMeta.elapsed != null && radioMeta.duration != null && radioMeta.duration > 0 && (
{formatTrackTime(radioMeta.elapsed)}
{formatTrackTime(radioMeta.duration)}
)}
{resolvedCover ? {currentRadio.name} : radioMeta.currentArt ? { (e.target as HTMLImageElement).style.display = 'none'; }} /> :
}
{radioMeta.nextSong && (

{t('radio.upNext')}

{radioMeta.nextSong.art && ( { (e.target as HTMLImageElement).style.display = 'none'; }} /> )}
{radioMeta.nextSong.title} {radioMeta.nextSong.artist && {radioMeta.nextSong.artist}}
)} {radioMeta.history.length > 0 && (

{t('radio.recentlyPlayed')}

{radioMeta.history.map((item, idx) => (
{item.song.art && ( { (e.target as HTMLImageElement).style.display = 'none'; }} /> )} {item.song.artist ? `${item.song.artist} — ${item.song.title}` : item.song.title}
))}
)}
); }); export default RadioView;