Moving tracks to index; Discover with URI properties; Get simple artist objects by default - speed improvements
This commit is contained in:
@ -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':
|
||||
|
||||
@ -407,7 +407,7 @@ class ContextMenu extends React.Component{
|
||||
var go_to_recommendations = (
|
||||
<span className="menu-item-wrapper">
|
||||
<a className="menu-item" onClick={e => this.goToRecommendations(e)}>
|
||||
<span className="label">More like this</span>
|
||||
<span className="label">Discover similar</span>
|
||||
</a>
|
||||
</span>
|
||||
)
|
||||
@ -464,7 +464,7 @@ class ContextMenu extends React.Component{
|
||||
<div>
|
||||
{start_radio}
|
||||
{this.canBeInLibrary() ? toggle_in_library : null}
|
||||
{go_to_recommendations}
|
||||
{context.source == 'spotify' ? go_to_recommendations : null}
|
||||
{copy_uris}
|
||||
</div>
|
||||
)
|
||||
@ -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}
|
||||
</div>
|
||||
)
|
||||
|
||||
@ -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 (
|
||||
<Link className={this.props.radio_enabled ? 'artwork radio-enabled' : 'artwork'} to={link} onContextMenu={e => this.handleContextMenu(e,this.props.current_track.album)}>
|
||||
{this.props.radio_enabled ? <img className="radio-overlay" src="assets/radio-overlay.png" /> : null}
|
||||
<Thumbnail size="huge" images={this.props.current_track.album.images} canZoom />
|
||||
<Thumbnail size="huge" images={images} canZoom />
|
||||
</Link>
|
||||
)
|
||||
}
|
||||
@ -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,
|
||||
|
||||
@ -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
|
||||
});
|
||||
})
|
||||
})
|
||||
});
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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]
|
||||
|
||||
@ -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
|
||||
|
||||
Reference in New Issue
Block a user