import React, {useState, useCallback} from 'react'; import './player.scss'; import PlayerTimestamp from "./PlayerTimestamp"; import {SOURCE_SOT, type SOURCE_SOT_TYPES, type SourcePlayerJson} from "../../../core/Atomic"; import PlayerInfo from "./PlayerInfo"; import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; import {faBars, faTimes, faQuestion} from '@fortawesome/free-solid-svg-icons' import {capitalize} from "../../../core/StringUtils"; import Tooltip from "../Tooltip"; export interface PlayerProps { data: SourcePlayerJson sot?: SOURCE_SOT_TYPES } export interface Track { name: string artist: string album: string year: number duration: number artwork: string } const Player = (props: PlayerProps) => { const { data, sot = SOURCE_SOT.PLAYER } = props; const { play: { data: { track = '???', artists = [{name: '???'}], duration = 0 } = {}, meta: { art = {}, } = {} } = {}, play, listenedDuration = 0, nowPlayingMode = false, status: { calculated = '???', reported, stale, orphaned } } = data; let durPer = null; if(!nowPlayingMode) { if(duration !== undefined && duration !== null && duration !== 0) { if(listenedDuration === 0 || listenedDuration === null) { durPer = ' (0%)'; } else { durPer = ` (${((listenedDuration/duration) * 100).toFixed(0)}%)`; } } } const [viewMode, setViewMode] = useState('player'); const toggleViewMode = useCallback(() => { let newViewMode = ""; switch(viewMode) { case "player": newViewMode = "playlist"; break; case "playlist": newViewMode = "player" break; } setViewMode(newViewMode); }, [viewMode, setViewMode]); const playArt = art.track ?? art.album ?? art.artist ?? undefined; return (
{sot === SOURCE_SOT.HISTORY ? : null}
{playArt !== undefined ? : null}

{calculated !== 'stopped' ? track : '-'}

{calculated !== 'stopped' ? artists.map(x => x.name).join(' / ') : '-'}

Status: {['unknown','playing'].includes(calculated) && nowPlayingMode ? 'Now Playing' : capitalize(calculated)}

Listened: {nowPlayingMode !== true && calculated !== 'stopped' && listenedDuration !== null ? `${listenedDuration.toFixed(0)}s` : '-'}{durPer}

); } export default Player;