From d64ab01cfe1ebb4d5a71d501069967e34f4bd6bc Mon Sep 17 00:00:00 2001 From: James Barnsley Date: Sat, 25 Mar 2017 09:40:13 +1300 Subject: [PATCH] Known_full_uri_schemes; looping all uris separately --- src/js/services/mopidy/actions.js | 19 ++++--- src/js/services/mopidy/middleware.js | 75 +++++++++++----------------- src/js/services/ui/middleware.js | 37 ++++++++++---- src/js/views/Search.js | 6 +-- 4 files changed, 71 insertions(+), 66 deletions(-) diff --git a/src/js/services/mopidy/actions.js b/src/js/services/mopidy/actions.js index 7c1d534b..552fbac9 100755 --- a/src/js/services/mopidy/actions.js +++ b/src/js/services/mopidy/actions.js @@ -217,36 +217,39 @@ export function getLibraryAlbums(){ * Searching **/ -export function getTrackSearchResults(query, limit = 100, uri_schemes){ +export function getTrackSearchResults(query, limit = 100, uri_scheme){ return { type: 'MOPIDY_GET_TRACK_SEARCH_RESULTS', query: query, limit: limit, - uri_schemes: uri_schemes + uri_scheme: uri_scheme } } -export function getArtistSearchResults(query, limit = 100){ +export function getArtistSearchResults(query, limit = 100, uri_scheme){ return { type: 'MOPIDY_GET_ARTIST_SEARCH_RESULTS', query: query, - limit: limit + limit: limit, + uri_scheme: uri_scheme } } -export function getAlbumSearchResults(query, limit = 100){ +export function getAlbumSearchResults(query, limit = 100, uri_scheme){ return { type: 'MOPIDY_GET_ALBUM_SEARCH_RESULTS', query: query, - limit: limit + limit: limit, + uri_scheme: uri_scheme } } -export function getPlaylistSearchResults(query, limit = 100){ +export function getPlaylistSearchResults(query, limit = 100, uri_scheme){ return { type: 'MOPIDY_GET_PLAYLIST_SEARCH_RESULTS', query: query, - limit: limit + limit: limit, + uri_scheme: uri_scheme } } diff --git a/src/js/services/mopidy/middleware.js b/src/js/services/mopidy/middleware.js index a716576f..1bd6f11d 100755 --- a/src/js/services/mopidy/middleware.js +++ b/src/js/services/mopidy/middleware.js @@ -314,37 +314,29 @@ const MopidyMiddleware = (function(){ case 'MOPIDY_GET_TRACK_SEARCH_RESULTS': - instruct( socket, store, 'library.search', {query: {any: [action.query]}, uris: action.uri_schemes}) + instruct( socket, store, 'library.search', {query: {any: [action.query]}, uris: [action.uri_scheme]}) .then( response => { - // collate all our different sources into one array - var tracks = [] - for( var i = 0; i < response.length; i++ ){ - if( response[i].tracks ) tracks = [...tracks, ...response[i].tracks.splice(0,action.limit)] - } + if (response.length <= 0) return + + var tracks = response[0].tracks.splice(0,action.limit) store.dispatch({ type: 'SEARCH_RESULTS_LOADED', tracks: tracks }); }) break; case 'MOPIDY_GET_ARTIST_SEARCH_RESULTS': + instruct( socket, store, 'library.search', {query: {artist: [action.query]}, uris: [action.uri_scheme]}) + .then( response => { + if (response.length <= 0) return - // backends that provide artist data - var uri_schemes = ['local:','file:','m3u:'] - - instruct( socket, store, 'library.search', {query: {artist: [action.query]}, uris: uri_schemes}) - .then( response => { - - // collate all our different sources into one array var artists_uris = [] - for (var i = 0; i < response.length; i++){ - if (response[i].tracks){ - for (var j = 0; j < response[i].tracks.length; j++){ - if (response[i].tracks[j].artists){ - for (var k = 0; k < response[i].tracks[j].artists.length; k++){ - var artist = response[i].tracks[j].artists[k] - if (artist.uri){ - artists_uris.push(artist.uri) - } + if (response[0].tracks){ + for (var i = 0; i < response[0].tracks.length; i++){ + if (response[0].tracks[i].artists){ + for (var j = 0; j < response[0].tracks[i].artists.length; j++){ + var artist = response[0].tracks[i].artists[j] + if (artist.uri){ + artists_uris.push(artist.uri) } } } @@ -365,23 +357,18 @@ const MopidyMiddleware = (function(){ break; case 'MOPIDY_GET_ALBUM_SEARCH_RESULTS': - - // backends that provide artist data - var uri_schemes = ['local:','file:','m3u:'] - - instruct( socket, store, 'library.search', {query: {album: [action.query]}, uris: uri_schemes}) - .then( response => { + instruct( socket, store, 'library.search', {query: {album: [action.query]}, uris: [action.uri_scheme]}) + .then( response => { + if (response.length <= 0) return // collate all our different sources into one array var albums_uris = [] - for (var i = 0; i < response.length; i++){ - if (response[i].tracks){ - for (var j = 0; j < response[i].tracks.length; j++){ - if (response[i].tracks[j].album){ - var album = response[i].tracks[j].album - if (album.uri){ - albums_uris.push(album.uri) - } + if (response[0].tracks){ + for (var i = 0; i < response[0].tracks.length; i++){ + if (response[0].tracks[i].album){ + var album = response[0].tracks[i].album + if (album.uri){ + albums_uris.push(album.uri) } } } @@ -401,21 +388,14 @@ const MopidyMiddleware = (function(){ break; case 'MOPIDY_GET_PLAYLIST_SEARCH_RESULTS': - - var state = store.getState() - if (state.ui.search_settings){ - var uri_schemes = state.ui.search_settings.uri_schemes - } else { - var uri_schemes = state.mopidy.uri_schemes - } - instruct( socket, store, 'playlists.asList') .then( response => { + if (response.length <= 0) return var playlists_uris = [] for (var i = 0; i < response.length; i++){ var playlist = response[i] - if (playlist.name.includes(action.query) && uri_schemes.indexOf(helpers.uriSource(playlist.uri)+':') > -1){ + if (playlist.name.includes(action.query) && action.uri_scheme == helpers.uriSource(playlist.uri)+':'){ playlists_uris.push(playlist.uri) } } @@ -678,6 +658,7 @@ const MopidyMiddleware = (function(){ case 'MOPIDY_GET_LIBRARY_ALBUMS': instruct( socket, store, 'library.browse', { uri: 'local:directory?type=album' } ) .then( response => { + if (response.length <= 0) return var uris = helpers.asURIs(response) @@ -696,6 +677,7 @@ const MopidyMiddleware = (function(){ case 'MOPIDY_GET_ALBUMS': instruct( socket, store, 'library.lookup', { uris: action.uris } ) .then( response => { + if (response.length <= 0) return var albums = [] @@ -725,6 +707,8 @@ const MopidyMiddleware = (function(){ case 'MOPIDY_GET_ALBUM': instruct( socket, store, 'library.lookup', action.data ) .then( response => { + if (response.length <= 0) return + var album = Object.assign( {}, { images: [] }, @@ -807,6 +791,7 @@ const MopidyMiddleware = (function(){ case 'MOPIDY_GET_ARTIST': instruct( socket, store, 'library.lookup', action.data ) .then( response => { + if (response.length <= 0) return var albums = [] for( var i = 0; i < response.length; i++ ){ diff --git a/src/js/services/ui/middleware.js b/src/js/services/ui/middleware.js index 572c45e0..54d9a217 100755 --- a/src/js/services/ui/middleware.js +++ b/src/js/services/ui/middleware.js @@ -121,6 +121,17 @@ const UIMiddleware = (function(){ var uri_schemes = state.mopidy.uri_schemes } + // backends that can handle more than just track results + // make sure they are available and respect our settings + var available_full_uri_schemes = ['local:','file:','gmusic:'] + var full_uri_schemes = [] + for (var i = 0; i < available_full_uri_schemes.length; i++){ + var index = uri_schemes.indexOf(available_full_uri_schemes[i]) + if (index > -1){ + full_uri_schemes.push(available_full_uri_schemes[i]) + } + } + // initiate spotify searching if (!action.only_mopidy){ if (!state.ui.search_settings || state.ui.search_settings.spotify){ @@ -132,32 +143,38 @@ const UIMiddleware = (function(){ if (state.mopidy.connected){ switch (action.search_type){ case 'playlists': - store.dispatch(mopidyActions.getPlaylistSearchResults(action.query)) + for (var i = 0; i < full_uri_schemes.length; i++){ + store.dispatch(mopidyActions.getPlaylistSearchResults(action.query,100,full_uri_schemes[i])) + } break case 'artists': - store.dispatch(mopidyActions.getArtistSearchResults(action.query)) + for (var i = 0; i < full_uri_schemes.length; i++){ + store.dispatch(mopidyActions.getArtistSearchResults(action.query,100,full_uri_schemes[i])) + } break case 'albums': - store.dispatch(mopidyActions.getAlbumSearchResults(action.query)) + for (var i = 0; i < full_uri_schemes.length; i++){ + store.dispatch(mopidyActions.getAlbumSearchResults(action.query,100,full_uri_schemes[i])) + } break case 'tracks': for (var i = 0; i < uri_schemes.length; i++){ - store.dispatch(mopidyActions.getTrackSearchResults(action.query,100,[uri_schemes[i]])) + store.dispatch(mopidyActions.getTrackSearchResults(action.query,100,uri_schemes[i])) } break default: - store.dispatch(mopidyActions.getPlaylistSearchResults(action.query,6)) - store.dispatch(mopidyActions.getArtistSearchResults(action.query,6)) - store.dispatch(mopidyActions.getAlbumSearchResults(action.query,6)) + for (var i = 0; i < full_uri_schemes.length; i++){ + store.dispatch(mopidyActions.getPlaylistSearchResults(action.query,6,full_uri_schemes[i])) + store.dispatch(mopidyActions.getArtistSearchResults(action.query,6,full_uri_schemes[i])) + store.dispatch(mopidyActions.getAlbumSearchResults(action.query,6,full_uri_schemes[i])) + } - // wrap each uri scheme in it's own search request - // this means slow backends won't hold up the whole request for (var i = 0; i < uri_schemes.length; i++){ - store.dispatch(mopidyActions.getTrackSearchResults(action.query,100,[uri_schemes[i]])) + store.dispatch(mopidyActions.getTrackSearchResults(action.query,20,uri_schemes[i])) } } } diff --git a/src/js/views/Search.js b/src/js/views/Search.js index b1eeb588..7566ca5e 100755 --- a/src/js/views/Search.js +++ b/src/js/views/Search.js @@ -139,19 +139,19 @@ class Search extends React.Component{
-

Artists

+

Artists

-

Albums

+

Albums

-

Playlists

+

Playlists