From 93eb1daee410e35ef654ef365423ffb6122db5f4 Mon Sep 17 00:00:00 2001 From: James Barnsley Date: Tue, 2 Jan 2018 15:58:55 +1300 Subject: [PATCH] Merging SearchResult.Artist and SearchResult.Album arrays in favor of digested SearchResult.Track assumptions, fixes #244 --- src/js/components/AlbumGrid.js | 1 + src/js/components/ArtistGrid.js | 2 +- src/js/components/GridItem.js | 28 +++++++------ src/js/components/PlaylistGrid.js | 1 + src/js/services/mopidy/middleware.js | 59 +++++++++++++++++++--------- src/scss/components/_grid.scss | 7 ++-- 6 files changed, 63 insertions(+), 35 deletions(-) diff --git a/src/js/components/AlbumGrid.js b/src/js/components/AlbumGrid.js index 053d9e5a..fa8fc6be 100755 --- a/src/js/components/AlbumGrid.js +++ b/src/js/components/AlbumGrid.js @@ -41,6 +41,7 @@ class AlbumGrid extends React.Component{ key={album.uri} type="album" item={album} + show_source_icon={this.props.show_source_icon} onClick={e => {hashHistory.push(global.baseURL+'album/'+encodeURIComponent(album.uri))}} onLoad={() => this.handleLoad(album.uri)} onContextMenu={e => this.handleContextMenu(e,album)} diff --git a/src/js/components/ArtistGrid.js b/src/js/components/ArtistGrid.js index 666964dd..f1518394 100755 --- a/src/js/components/ArtistGrid.js +++ b/src/js/components/ArtistGrid.js @@ -48,9 +48,9 @@ class ArtistGrid extends React.Component{
{artist.name} - {this.props.show_source_icon ? : null}
+ {this.props.show_source_icon ? : null} {artist.followers ? artist.followers.total.toLocaleString()+' followers' : null} {artist.albums_uris && !artist.followers ? artist.albums_uris.length+' albums' : null}
diff --git a/src/js/components/GridItem.js b/src/js/components/GridItem.js index 4b3b9755..9acac3cf 100755 --- a/src/js/components/GridItem.js +++ b/src/js/components/GridItem.js @@ -4,6 +4,7 @@ import ReactDOM from 'react-dom' import { Router, Link, hashHistory } from 'react-router' import FontAwesome from 'react-fontawesome' +import * as helpers from '../helpers' import Thumbnail from './Thumbnail' import ArtistSentence from './ArtistSentence' @@ -36,38 +37,38 @@ export default class GridItem extends React.Component{ case 'playlist': return ( -
+ {item.tracks_total ? item.tracks_total : 0} tracks -
+ ) break case 'artist': return ( -
+ {item.followers ? item.followers.total.toLocaleString()+' followers' : item.albums_uris.length+' albums'} -
+ ) break case 'album': return ( -
+ {item.artists ? : null} -
+ ) break default: return ( -
+ { item.artists ? : null } { item.followers ? item.followers.total.toLocaleString()+' followers' : null } -
+ ) } - return output + return output; } render(){ @@ -88,8 +89,13 @@ export default class GridItem extends React.Component{ return (
this.handleClick(e)} onContextMenu={e => this.handleContextMenu(e)}> -
{item.name ? item.name : {item.uri}}
- { this.renderSecondary(item) } +
+ {item.name ? item.name : {item.uri}} +
+
+ {this.props.show_source_icon ? : null} + {this.renderSecondary(item)} +
); } diff --git a/src/js/components/PlaylistGrid.js b/src/js/components/PlaylistGrid.js index 30d6abe8..8fc77c93 100755 --- a/src/js/components/PlaylistGrid.js +++ b/src/js/components/PlaylistGrid.js @@ -41,6 +41,7 @@ class PlaylistGrid extends React.Component{ key={playlist.uri} type="playlist" item={playlist} + show_source_icon={this.props.show_source_icon} onClick={e => {hashHistory.push(global.baseURL+'playlist/'+encodeURIComponent(playlist.uri))}} onContextMenu={e => this.handleContextMenu(e,playlist)} /> diff --git a/src/js/services/mopidy/middleware.js b/src/js/services/mopidy/middleware.js index 59437177..cef8b731 100755 --- a/src/js/services/mopidy/middleware.js +++ b/src/js/services/mopidy/middleware.js @@ -649,10 +649,15 @@ const MopidyMiddleware = (function(){ instruct(socket, store, 'library.search', {query: {album: [action.data.query]}, uris: [action.data.uri_scheme]}) .then( response => { - if (response.length > 0){ + if (response.length > 0){ + var albums = []; - // collate all our different sources into one array - var albums = [] + // Merge our proper album response container + if (response[0].albums){ + albums = [...response[0].albums, ...albums]; + } + + // Pull the Album objects from our track responses if (response[0].tracks){ for (var i = 0; i < response[0].tracks.length; i++){ if (response[0].tracks[i].album !== undefined && response[0].tracks[i].album.uri !== undefined){ @@ -661,7 +666,6 @@ const MopidyMiddleware = (function(){ } } - // TODO: limit uris at the loop, rather than post loop for performance var albums_uris = helpers.arrayOf('uri',albums) albums_uris = helpers.removeDuplicates(albums_uris) @@ -715,7 +719,16 @@ const MopidyMiddleware = (function(){ .then( response => { if (response.length > 0){ - var artists_uris = [] + var artists_uris = []; + + // Pull actual artist objects + if (response[0].artists){ + for (var i = 0; i < response[0].artists.length; i++){ + artists_uris.push(response[0].artists.uri); + } + } + + // Digest track artists into actual artist results if (response[0].tracks){ for (var i = 0; i < response[0].tracks.length; i++){ if (response[0].tracks[i].artists){ @@ -729,12 +742,11 @@ const MopidyMiddleware = (function(){ } } - // TODO: limit uris at the loop, rather than post loop for performance - artists_uris = helpers.removeDuplicates(artists_uris) + artists_uris = helpers.removeDuplicates(artists_uris); // load each artist for (var i = 0; i < artists_uris.length; i++){ - store.dispatch(mopidyActions.getArtist(artists_uris[i])) + store.dispatch(mopidyActions.getArtist(artists_uris[i])); } // and plug in their URIs @@ -773,8 +785,8 @@ const MopidyMiddleware = (function(){ .then( response => { if (response.length > 0){ + var playlists_uris = []; - var playlists_uris = [] for (var i = 0; i < response.length; i++){ var playlist = response[i] if (playlist.name.includes(action.data.query) && action.data.uri_schemes.includes(helpers.uriSource(playlist.uri)+':')){ @@ -782,8 +794,6 @@ const MopidyMiddleware = (function(){ } } - playlists_uris = playlists_uris - // load each playlist for (var i = 0; i < playlists_uris.length; i++){ store.dispatch(mopidyActions.getPlaylist(playlists_uris[i])) @@ -833,7 +843,7 @@ const MopidyMiddleware = (function(){ .then( response => { if (response.length > 0 && response[0].tracks !== undefined){ - var tracks = response[0].tracks + var tracks = response[0].tracks; store.dispatch({ type: 'MOPIDY_SEARCH_RESULTS_LOADED', @@ -867,9 +877,8 @@ const MopidyMiddleware = (function(){ instruct(socket, store, 'library.search', {query: {any: [action.data.query]}, uris: [action.data.uri_scheme]}) .then( response => { - console.log(response) if (response.length > 0 && response[0].tracks !== undefined){ - var tracks = response[0].tracks + var tracks = response[0].tracks; store.dispatch({ type: 'MOPIDY_SEARCH_RESULTS_LOADED', @@ -901,9 +910,14 @@ const MopidyMiddleware = (function(){ .then( response => { if (response.length > 0){ + var albums = []; - // collate all our different sources into one array - var albums = [] + // Merge actual album responses first + if (response[0].albums){ + albums = [...response[0].albums, ...albums]; + } + + // Then digest tracks albums if (response[0].tracks){ for (var i = 0; i < response[0].tracks.length; i++){ if (response[0].tracks[i].album !== undefined && response[0].tracks[i].album.uri !== undefined){ @@ -912,7 +926,6 @@ const MopidyMiddleware = (function(){ } } - // TODO: limit uris at the loop, rather than post loop for performance var albums_uris = helpers.arrayOf('uri',albums) albums_uris = helpers.removeDuplicates(albums_uris) @@ -953,7 +966,16 @@ const MopidyMiddleware = (function(){ .then( response => { if (response.length > 0){ - var artists_uris = [] + var artists_uris = []; + + // Pull our actual artists objects + if (response[0].artists){ + for (var i = 0; i < response[0].artists.length; i++){ + artists_uris.push(response[0].artists.uri); + } + } + + // Digest tracks artists if (response[0].tracks){ for (var i = 0; i < response[0].tracks.length; i++){ if (response[0].tracks[i].artists){ @@ -967,7 +989,6 @@ const MopidyMiddleware = (function(){ } } - // TODO: limit uris at the loop, rather than post loop for performance artists_uris = helpers.removeDuplicates(artists_uris) // load each artist diff --git a/src/scss/components/_grid.scss b/src/scss/components/_grid.scss index 58ee5acd..163e4d42 100755 --- a/src/scss/components/_grid.scss +++ b/src/scss/components/_grid.scss @@ -25,11 +25,10 @@ @include one_line_text; padding-top: 2px; color: $secondary_grey; - } - .source { - color: $secondary_grey; - padding-left: 2px; + .source { + padding-right: 4px; + } } &:hover{