Current track now using full track index

This commit is contained in:
James Barnsley
2017-06-07 09:05:56 +12:00
parent 065d4e0a63
commit d2261878c7
7 changed files with 64 additions and 54 deletions

View File

@ -146,7 +146,7 @@ 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]) !== 'undefined' ? state.ui.tracks[state.ui.current_track] : null),
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,

View File

@ -59,7 +59,7 @@ class MiniPlayer extends React.Component{
const mapStateToProps = (state, ownProps) => {
return {
current_track: (typeof(state.ui.current_track) !== 'undefined' && typeof(state.ui.tracks) !== 'undefined' && typeof(state.ui.tracks[state.ui.current_track]) !== 'undefined' ? state.ui.tracks[state.ui.current_track] : null),
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
}
}

View File

@ -53,7 +53,7 @@ class ProgressSlider extends React.Component{
const mapStateToProps = (state, ownProps) => {
return {
current_track: state.ui.current_track,
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),
connected: state.mopidy.connected,
time_position: state.mopidy.time_position,
play_state: state.mopidy.play_state

View File

@ -112,8 +112,8 @@ const mapStateToProps = (state, ownProps) => {
mopidy_connected: state.mopidy.connected,
pusher_connected: state.pusher.connected,
spotify_connected: state.spotify.connected,
spotify_authorized: state.spotify.authorized,
current_track: (typeof(state.ui.current_track) !== 'undefined' && typeof(state.ui.tracks) !== 'undefined' && typeof(state.ui.tracks[state.ui.current_track]) !== 'undefined' ? state.ui.tracks[state.ui.current_track] : null),
spotify_authorized: state.spotify.authorized,
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),
dragger: state.ui.dragger
}
}

View File

@ -995,6 +995,29 @@ const MopidyMiddleware = (function(){
break;
/**
* =============================================================== TRACKS ================
* ======================================================================================
**/
case 'MOPIDY_CURRENTTLTRACK':
if (!action.data || !action.data.track){
return mopidy
}
// Fire off our universal track index loader
store.dispatch({ type: 'TRACK_LOADED', key: action.data.track.uri, track: action.data.track })
// When current track is Spotify track, go get the full object
// This is because Mopidy doesn't give us full artist/album objects, without artwork
if (action.data.track.uri.substring(0,14) == 'spotify:track:'){
store.dispatch( spotifyActions.getTrack( action.data.track.uri ) )
}
next(action)
break
/**
* =============================================================== LOCAL ================
* ======================================================================================

View File

@ -74,18 +74,6 @@ const SpotifyMiddleware = (function(){
store.dispatch( spotifyActions.savePlaylist( action.key, action.name, action.is_public ))
break
// when our mopidy server current track changes
case 'MOPIDY_CURRENTTLTRACK':
// proceed as usual so we don't inhibit default functionality
next(action)
// if the current track is a spotify track
if( action.data && action.data.track.uri.substring(0,14) == 'spotify:track:' ){
store.dispatch( spotifyActions.getTrack( action.data.track.uri ) )
}
break
// when radio returns
case 'PUSHER_RADIO_STARTED':
case 'PUSHER_RADIO_CHANGED':

View File

@ -106,24 +106,57 @@ export default function reducer(ui = {}, action){
return Object.assign({}, ui, { current_tracklist: tracklist });
case 'MOPIDY_CURRENTTLTRACK':
if( !action.data ) return ui
if (!action.data) return ui
var current_tracklist = []
Object.assign(current_tracklist, ui.current_tracklist)
for( var i = 0; i < current_tracklist.length; i++ ){
for (var i = 0; i < current_tracklist.length; i++){
Object.assign(
current_tracklist[i],
{ playing: ( current_tracklist[i].tlid == action.data.tlid ) }
)
}
var current_track = action.data.track.uri
var current_track = Object.assign(
{},
action.data.track,
{
tlid: action.data.tlid
}
)
return Object.assign({}, ui, {
current_tracklist: current_tracklist,
current_track: current_track
});
case 'TRACK_LOADED':
if (!action.key || !action.track) return ui
var tracks = Object.assign({}, ui.tracks)
if (tracks[action.key]){
var track = Object.assign({}, tracks[action.key], action.track)
}else{
var track = Object.assign({}, action.track)
}
tracks[action.key] = track
return Object.assign({}, ui, { tracks: tracks });
case 'TRACKS_LOADED':
var tracks = Object.assign({}, ui.tracks)
for (var i = 0; i < action.tracks.length; i++){
var track = action.tracks[i]
if (typeof(tracks[track.uri]) !== 'undefined'){
track = Object.assign({}, tracks[track.uri], track)
}
tracks[track.uri] = track
}
return Object.assign({}, ui, { tracks: tracks });
case 'PUSHER_QUEUE_METADATA':
case 'PUSHER_QUEUE_METADATA_CHANGED':
var tracklist = Object.assign([], ui.current_tracklist)
@ -404,40 +437,6 @@ export default function reducer(ui = {}, action){
/**
* Tracks
**/
case 'TRACK_LOADED':
if (!action.key || !action.track) return ui
var tracks = Object.assign({}, ui.tracks)
if (tracks[action.key]){
var track = Object.assign({}, tracks[action.key], action.track)
}else{
var track = Object.assign({}, action.track)
}
tracks[action.key] = track
return Object.assign({}, ui, { tracks: tracks });
case 'TRACKS_LOADED':
var tracks = Object.assign({}, ui.tracks)
for (var i = 0; i < action.tracks.length; i++){
var track = action.tracks[i]
if (typeof(tracks[track.uri]) !== 'undefined'){
track = Object.assign({}, tracks[track.uri], track)
}
tracks[track.uri] = track
}
return Object.assign({}, ui, { tracks: tracks });
/**
* Playlists
**/