diff --git a/src/js/bootstrap.js b/src/js/bootstrap.js index 65d207fb..537b1f98 100755 --- a/src/js/bootstrap.js +++ b/src/js/bootstrap.js @@ -35,7 +35,6 @@ var initialState = { queue: [], queue_metadata: {}, current_track_uri: null, - current_track_tlid: null, albums: {}, artists: {}, playlists: {}, diff --git a/src/js/components/Modal/AddToQueueModal.js b/src/js/components/Modal/AddToQueueModal.js index 569baaeb..2d27f6c8 100755 --- a/src/js/components/Modal/AddToQueueModal.js +++ b/src/js/components/Modal/AddToQueueModal.js @@ -16,10 +16,9 @@ export default class AddToQueueModal extends React.Component{ } handleSubmit(e){ - var uris = this.state.uris.split(',') - console.log(this.state) - this.props.mopidyActions.enqueueURIs(uris, null, this.state.next) - this.props.uiActions.closeModal() + var uris = this.state.uris.split(','); + this.props.mopidyActions.enqueueURIs(uris, null, this.state.next); + this.props.uiActions.closeModal(); } render(){ diff --git a/src/js/components/Modal/Modal.js b/src/js/components/Modal/Modal.js index 4f0b1127..d549d1ed 100755 --- a/src/js/components/Modal/Modal.js +++ b/src/js/components/Modal/Modal.js @@ -145,7 +145,7 @@ class Modal extends React.Component{ const mapStateToProps = (state, ownProps) => { return { - current_track: (state.core.tracks[state.core.current_track_uri] !== undefined ? state.core.tracks[state.core.current_track_uri] : null), + current_track: (state.core.current_track && state.core.tracks[state.core.current_track.uri] !== undefined ? state.core.tracks[state.core.current_track.uri] : null), uri_schemes: (state.mopidy.uri_schemes ? state.mopidy.uri_schemes : []), search_uri_schemes: (state.ui.search_uri_schemes ? state.ui.search_uri_schemes : []), volume: state.mopidy.volume, diff --git a/src/js/components/PlaybackControls.js b/src/js/components/PlaybackControls.js index f72beddf..e96b2df1 100755 --- a/src/js/components/PlaybackControls.js +++ b/src/js/components/PlaybackControls.js @@ -135,7 +135,7 @@ class PlaybackControls extends React.Component{ const mapStateToProps = (state, ownProps) => { return { - current_track: (state.core.tracks[state.core.current_track_uri] !== undefined ? state.core.tracks[state.core.current_track_uri] : null), + current_track: (state.core.current_track && state.core.tracks[state.core.current_track.uri] !== undefined ? state.core.tracks[state.core.current_track.uri] : null), radio_enabled: (state.ui.radio && state.ui.radio.enabled ? true : false), play_state: state.mopidy.play_state, time_position: state.mopidy.time_position, diff --git a/src/js/components/ProgressSlider.js b/src/js/components/ProgressSlider.js index 1e793ff3..e72f2865 100755 --- a/src/js/components/ProgressSlider.js +++ b/src/js/components/ProgressSlider.js @@ -54,7 +54,7 @@ class ProgressSlider extends React.Component{ const mapStateToProps = (state, ownProps) => { return { - current_track: (state.core.tracks[state.core.current_track_uri] !== undefined ? state.core.tracks[state.core.current_track_uri] : null), + current_track: (state.core.current_track && state.core.tracks[state.core.current_track.uri] !== undefined ? state.core.tracks[state.core.current_track.uri] : null), connected: state.mopidy.connected, time_position: state.mopidy.time_position, play_state: state.mopidy.play_state diff --git a/src/js/components/Track.js b/src/js/components/Track.js index f7cb9b90..b9367e7f 100755 --- a/src/js/components/Track.js +++ b/src/js/components/Track.js @@ -269,7 +269,7 @@ export default class Track extends React.Component{ onMouseUp={e => this.handleMouseUp(e)} // End of click, or potentially a dragging drop event onDoubleClick={e => this.props.handleDoubleClick(e)} onContextMenu={e => {this.handleContextMenu(e)}}> - { track_columns } + {track_columns} ) } diff --git a/src/js/components/TrackList.js b/src/js/components/TrackList.js index a712fc8f..ca1d9567 100755 --- a/src/js/components/TrackList.js +++ b/src/js/components/TrackList.js @@ -412,7 +412,8 @@ class TrackList extends React.Component{ { this.props.tracks.map( (track, index) => { - let track_key = this.buildTrackKey(track, index) + let track_key = this.buildTrackKey(track, index); + track.key = track_key; return ( 0){ var track = Object.assign({}, response[0]); store.dispatch({ - type: 'TRACK_LOADED', - key: track.uri, - track: track + type: 'TRACKS_LOADED', + tracks: [track] }); } }, diff --git a/src/js/views/Queue.js b/src/js/views/Queue.js index f7983441..4a9c43c6 100755 --- a/src/js/views/Queue.js +++ b/src/js/views/Queue.js @@ -27,12 +27,11 @@ class Queue extends React.Component{ } removeTracks(track_indexes){ - var tlids = []; for (var i = 0; i < track_indexes.length; i++){ - var uri = this.props.queue[track_indexes[i]]; - if (this.props.tracks[uri] !== undefined){ - tlids.push(this.props.tracks[uri].tlid); + var track = this.props.queue[track_indexes[i]]; + if (track.tlid !== undefined){ + tlids.push(track.tlid); } } @@ -91,36 +90,52 @@ class Queue extends React.Component{ } render(){ - var image = null - if (this.props.current_track){ - if (this.props.current_track.images !== undefined && this.props.current_track.images){ - image = helpers.sizedImages(this.props.current_track.images) - image = image.large - } - } + var current_track = null; var tracks = []; if (this.props.queue && this.props.tracks){ for (var i = 0; i < this.props.queue.length; i++){ - var uri = this.props.queue[i]; - if (this.props.tracks.hasOwnProperty(uri)){ - var track = this.props.tracks[uri]; - track.playing = (track.uri == this.props.current_track_uri && track.tlid == this.props.current_track_tlid); - tracks.push(track); + var track = this.props.queue[i]; + + // If we have the track in our index, merge it in. + // We prioritise queue track over index track as queue has unique data, like which track + // is playing and tlids. + if (this.props.tracks.hasOwnProperty(track.uri)){ + track = Object.assign( + {}, + this.props.tracks[track.uri], + track + ); } + + // Now merge in our queue metadata + if (this.props.queue_metadata["tlid_"+track.tlid] !== undefined){ + track = Object.assign( + {}, + track, + this.props.queue_metadata["tlid_"+track.tlid], + { + playing: (track.tlid == this.props.current_track.tlid) + } + ); + tracks[i] = track; + } + + // Siphon off this track if it's a full representation of our current track (by tlid) + if (this.props.current_track && this.props.current_track.uri == track.uri){ + current_track = track; + } + + // Now add our compiled track for our tracklist + tracks.push(track); } } - // Merge our metadata with each track - for (var i = 0; i < tracks.length; i++){ - var track = tracks[i]; - if (this.props.queue_metadata["tlid_"+track.tlid] !== undefined){ - track = Object.assign( - {}, - track, - this.props.queue_metadata["tlid_"+track.tlid] - ); - tracks[i] = track; + var image = null + if (current_track){ + if (current_track.images !== undefined && current_track.images){ + image = helpers.sizedImages(current_track.images) + image = image.large } } @@ -153,11 +168,11 @@ class Queue extends React.Component{
- { this.renderArtwork(image) } + {this.renderArtwork(image)}
- {this.props.current_track ? {this.props.current_track.name} : -} + {current_track ? {current_track.name} : -}
- {this.props.current_track ? : } + {current_track ? : }
@@ -192,10 +207,9 @@ const mapStateToProps = (state, ownProps) => { radio_enabled: (state.core.radio && state.core.radio.enabled ? true : false), tracks: state.core.tracks, queue: state.core.queue, + queue_tlids: state.core.queue_tlids, queue_metadata: state.core.queue_metadata, - current_track_tlid: state.core.current_track_tlid, - current_track_uri: state.core.current_track_uri, - current_track: (state.core.tracks[state.core.current_track_uri] !== undefined ? state.core.tracks[state.core.current_track_uri] : null) + current_track: state.core.current_track } }