diff --git a/src/js/components/AddSeedField.js b/src/js/components/AddSeedField.js
index b0797a9f..cfb4a152 100755
--- a/src/js/components/AddSeedField.js
+++ b/src/js/components/AddSeedField.js
@@ -67,7 +67,7 @@ class AddSeedField extends React.Component{
switch (helpers.uriType(item.uri)){
case 'artist':
- this.props.uiActions.albumLoaded(item.uri,item)
+ this.props.uiActions.artistLoaded(item.uri,item)
break
case 'track':
diff --git a/src/js/components/ContextMenu.js b/src/js/components/ContextMenu.js
index ba588974..2de765ad 100755
--- a/src/js/components/ContextMenu.js
+++ b/src/js/components/ContextMenu.js
@@ -407,7 +407,7 @@ class ContextMenu extends React.Component{
var go_to_recommendations = (
this.goToRecommendations(e)}>
- More like this
+ Discover similar
)
@@ -464,7 +464,7 @@ class ContextMenu extends React.Component{
{start_radio}
{this.canBeInLibrary() ? toggle_in_library : null}
- {go_to_recommendations}
+ {context.source == 'spotify' ? go_to_recommendations : null}
{copy_uris}
)
@@ -513,7 +513,8 @@ class ContextMenu extends React.Component{
{play_uris_next}
{add_to_queue}
{add_to_playlist}
- {start_radio}
+ {context.source == 'spotify' ? start_radio : null}
+ {context.source == 'spotify' ? go_to_recommendations : null}
{copy_uris}
)
diff --git a/src/js/components/FullPlayer.js b/src/js/components/FullPlayer.js
index 8604a8a9..dbf80a1d 100755
--- a/src/js/components/FullPlayer.js
+++ b/src/js/components/FullPlayer.js
@@ -75,12 +75,17 @@ class FullPlayer extends React.Component{
)
}
+ 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}
-
+
)
}
@@ -140,6 +145,7 @@ class FullPlayer extends React.Component{
const mapStateToProps = (state, ownProps) => {
return {
radio_enabled: (state.ui.radio && state.ui.radio.enabled ? true : false),
+ tracks: state.ui.tracks,
current_track: state.ui.current_track,
play_state: state.mopidy.play_state,
time_position: state.mopidy.time_position,
diff --git a/src/js/services/spotify/actions.js b/src/js/services/spotify/actions.js
index 65190f52..6b887655 100755
--- a/src/js/services/spotify/actions.js
+++ b/src/js/services/spotify/actions.js
@@ -796,26 +796,33 @@ export function getGenres(){
* Get a single artist
*
* @param uri string
+ * @param full boolean (whether we want a full artist object)
**/
-export function getArtist( uri ){
+export function getArtist(uri, full = false){
return (dispatch, getState) => {
- var artist = {};
-
- // get both the artist and the top tracks
- $.when(
+ // Start with an empty object
+ // As each requests completes, they'll add to this object
+ var artist = {}
+ // We need our artist, obviously
+ var requests = [
sendRequest( dispatch, getState, 'artists/'+ helpers.getFromUri('artistid', uri) )
+ .then( response => {
+ Object.assign(artist, response);
+ })
+ ]
+
+ // Do we want a full artist, with all supporting material?
+ if (full){
+ requests.push(
+ sendRequest( dispatch, getState, 'artists/'+ helpers.getFromUri('artistid', uri) +'/top-tracks?country='+getState().spotify.country )
.then( response => {
Object.assign(artist, response);
- }),
-
- sendRequest( dispatch, getState, 'artists/'+ helpers.getFromUri('artistid', uri) +'/top-tracks?country='+getState().spotify.country )
- .then( response => {
- Object.assign(artist, response);
- }),
-
- sendRequest( dispatch, getState, 'artists/'+ helpers.getFromUri('artistid', uri) +'/related-artists' )
+ })
+ )
+ requests.push(
+ sendRequest( dispatch, getState, 'artists/'+ helpers.getFromUri('artistid', uri) +'/related-artists' )
.then( response => {
dispatch({
type: 'ARTISTS_LOADED',
@@ -823,8 +830,11 @@ export function getArtist( uri ){
});
Object.assign(artist, { related_artists_uris: helpers.asURIs(response.artists) });
})
+ )
+ }
- ).then(() => {
+ // Run our requests
+ $.when.apply($, requests).then(() => {
if (artist.musicbrainz_id){
dispatch(lastfmActions.getArtist(artist.uri, false, artist.musicbrainz_id))
@@ -836,18 +846,20 @@ export function getArtist( uri ){
type: 'ARTIST_LOADED',
key: artist.uri,
artist: artist
- });
+ })
- // now go get our artist albums
- sendRequest( dispatch, getState, 'artists/'+ helpers.getFromUri('artistid', uri) +'/albums?market='+getState().spotify.country )
+ // Now go get our artist albums
+ if (full){
+ sendRequest( dispatch, getState, 'artists/'+ helpers.getFromUri('artistid', uri) +'/albums?market='+getState().spotify.country )
.then( response => {
dispatch({
type: 'SPOTIFY_ARTIST_ALBUMS_LOADED',
data: response,
key: uri
- });
+ })
})
- });
+ }
+ })
}
}
diff --git a/src/js/services/ui/reducer.js b/src/js/services/ui/reducer.js
index 8234150c..86a501d5 100755
--- a/src/js/services/ui/reducer.js
+++ b/src/js/services/ui/reducer.js
@@ -410,7 +410,7 @@ export default function reducer(ui = {}, action){
**/
case 'TRACK_LOADED':
- var tracks = Object.assign([], ui.tracks)
+ var tracks = Object.assign({}, ui.tracks)
if (tracks[action.key]){
var track = Object.assign({}, tracks[action.key], action.track)
@@ -422,7 +422,7 @@ export default function reducer(ui = {}, action){
return Object.assign({}, ui, { tracks: tracks });
case 'TRACKS_LOADED':
- var tracks = Object.assign([], ui.tracks)
+ var tracks = Object.assign({}, ui.tracks)
for (var i = 0; i < action.tracks.length; i++){
var track = action.tracks[i]
diff --git a/src/js/views/Artist.js b/src/js/views/Artist.js
index 9ce5f48b..af626c44 100755
--- a/src/js/views/Artist.js
+++ b/src/js/views/Artist.js
@@ -61,7 +61,7 @@ class Artist extends React.Component{
if (props.artist && props.artist.albums_uris && props.artist.related_artists_uris){
console.info('Loading spotify artist from index')
}else{
- this.props.spotifyActions.getArtist( props.params.uri );
+ this.props.spotifyActions.getArtist(props.params.uri, true);
}
break
@@ -70,7 +70,7 @@ class Artist extends React.Component{
if (props.artist && props.artist.images){
console.info('Loading local artist from index')
} else {
- this.props.mopidyActions.getArtist( props.params.uri );
+ this.props.mopidyActions.getArtist(props.params.uri);
}
}
break