import { average } from 'color.js' import { colord } from 'colord' import { player } from '@/renderer/store' import { resizeImage, getCoverColor } from '@/renderer/utils/common' import SvgIcon from './SvgIcon' import ArtistInline from './ArtistsInline' import { State as PlayerState, Mode as PlayerMode, } from '@/renderer/utils/player' const MediaControls = () => { const classes = 'btn-pressed-animation btn-hover-animation mr-1 cursor-default rounded-lg p-1.5 transition duration-200 after:bg-white/10' const playerSnapshot = useSnapshot(player) const state = useMemo(() => playerSnapshot.state, [playerSnapshot.state]) const playOrPause = () => { if (playerSnapshot.mode === PlayerMode.FM) { player.playOrPause() } else { player.playFM() } } return (
) } const FMCard = () => { const navigate = useNavigate() const [bgColor, setBgColor] = useState({ from: '#222', to: '#222' }) const playerSnapshot = useSnapshot(player) const track = useMemo(() => playerSnapshot.fmTrack, [playerSnapshot.fmTrack]) const coverUrl = useMemo( () => resizeImage(track?.al?.picUrl ?? '', 'md'), [track?.al?.picUrl] ) useEffect(() => { getCoverColor(track?.al?.picUrl || '').then(color => { if (!color) return const to = colord(color).darken(0.15).rotate(-5).toHex() setBgColor({ from: color, to }) }) }, [track?.al?.picUrl]) return (
{coverUrl ? ( track?.al?.id && navigate(`/album/${track.al.id}`)} className='rounded-lg shadow-2xl' src={coverUrl} /> ) : (
)}
{/* Track info */}
{track ? (
{track?.name}
) : (
PLACEHOLDER12345
)} {track ? ( ) : (
PLACEHOLDER
)}
{track ? :
} {/* FM logo */}
私人FM
) } export default FMCard