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{