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.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)