import React, { PropTypes } from 'react' import { connect } from 'react-redux' import { bindActionCreators } from 'redux' import { Link } from 'react-router' import FontAwesome from 'react-fontawesome' import ProgressSlider from './ProgressSlider' import ArtistSentence from './ArtistSentence' import Thumbnail from './Thumbnail' import Dater from './Dater' import * as uiActions from '../services/ui/actions' import * as mopidyActions from '../services/mopidy/actions' class FullPlayer extends React.Component{ constructor(props) { super(props); } handleContextMenu(e,item){ e.preventDefault() var data = { e: e, context: 'album', uris: [item.uri], items: [item] } this.props.uiActions.showContextMenu(data) } renderPlayButton(){ var button = this.props.mopidyActions.play()}> if( this.props.play_state == 'playing' ){ button = this.props.mopidyActions.pause()}> } return button; } renderConsumeButton(){ var button = this.props.mopidyActions.instruct('tracklist.setConsume', [true])}>Consume if( this.props.consume ){ button = this.props.mopidyActions.instruct('tracklist.setConsume', [false])}>Consume } return button; } renderRandomButton(){ var button = this.props.mopidyActions.instruct('tracklist.setRandom', [true])}>Shuffle if( this.props.random ){ button = this.props.mopidyActions.instruct('tracklist.setRandom', [false])}>Shuffle } return button; } renderRepeatButton(){ var button = this.props.mopidyActions.instruct('tracklist.setRepeat', [true])}>Repeat if( this.props.repeat ){ button = this.props.mopidyActions.instruct('tracklist.setRepeat', [false])}>Repeat } return button; } renderArtwork(){ if( !this.props.current_track || !this.props.current_track.album || !this.props.current_track.album.images ){ return ( {this.props.radio_enabled ? : null} ) } var images = this.props.current_track.album.images if (typeof(this.props.tracks[this.props.current_track.uri]) !== 'undefined'){ images = this.props.tracks[this.props.current_track.uri].album.images } var link = null if( this.props.current_track.album.uri ) link = '/album/'+this.props.current_track.album.uri return ( this.handleContextMenu(e,this.props.current_track.album)}> {this.props.radio_enabled ? : null} ) } render(){ return (
{ this.renderArtwork() }
{this.props.current_track ? this.props.current_track.name : -}
{this.props.current_track ? : }
this.props.mopidyActions.previous()}>   { this.renderPlayButton() } this.props.mopidyActions.stop()}>   this.props.mopidyActions.next()}>  
{ this.renderConsumeButton() } { this.renderRandomButton() } { this.renderRepeatButton() }
{ this.props.time_position ? : '-' } { this.props.current_track ? : '-' }
); } } /** * Export our component * * We also integrate our global store, using connect() **/ const mapStateToProps = (state, ownProps) => { return { radio_enabled: (state.ui.radio && state.ui.radio.enabled ? true : false), tracks: state.ui.tracks, current_track: (typeof(state.ui.current_track) !== 'undefined' && typeof(state.ui.tracks) !== 'undefined' && typeof(state.ui.tracks[state.ui.current_track.uri]) !== 'undefined' ? state.ui.tracks[state.ui.current_track.uri] : null), play_state: state.mopidy.play_state, time_position: state.mopidy.time_position, consume: state.mopidy.consume, repeat: state.mopidy.repeat, random: state.mopidy.random } } const mapDispatchToProps = (dispatch) => { return { uiActions: bindActionCreators(uiActions, dispatch), mopidyActions: bindActionCreators(mopidyActions, dispatch) } } export default connect(mapStateToProps, mapDispatchToProps)(FullPlayer)