From 14ee58f3b88b1c8183816a553a1d3b23439d5bdf Mon Sep 17 00:00:00 2001 From: James Barnsley Date: Wed, 18 Jan 2017 09:09:24 +1300 Subject: [PATCH] Fixing search collation of Spotify and Mopidy sources (still need to implement _more) --- src/js/services/mopidy/actions.js | 18 +++------ src/js/services/mopidy/middleware.js | 19 ++++++++++ src/js/services/spotify/actions.js | 5 +-- src/js/services/ui/actions.js | 15 ++------ src/js/services/ui/reducer.js | 57 +++++++++++++--------------- src/js/views/Search.js | 4 +- 6 files changed, 58 insertions(+), 60 deletions(-) diff --git a/src/js/services/mopidy/actions.js b/src/js/services/mopidy/actions.js index dc6053bb..d8890730 100755 --- a/src/js/services/mopidy/actions.js +++ b/src/js/services/mopidy/actions.js @@ -206,20 +206,12 @@ export function getAlbums(){ * Other general actions **/ -export function getSearchResults(query, backends = null, fields = ['any']){ - var queryObj = {}; - for( var i = 0; i < fields.length; i++ ){ - queryObj[fields[i]] = [query]; - } +export function getSearchResults(query, uris = null, fields = ['any']){ return { - type: 'NOTHING' + type: 'MOPIDY_GET_SEARCH_RESULTS', + query: query, + uris: uris, + fields: fields } - /* - return { - type: 'MOPIDY_INSTRUCT', - call: 'library.search', - value: { query: queryObj, uris: backends } - } - */ } \ No newline at end of file diff --git a/src/js/services/mopidy/middleware.js b/src/js/services/mopidy/middleware.js index dffc5053..3bd23f7e 100755 --- a/src/js/services/mopidy/middleware.js +++ b/src/js/services/mopidy/middleware.js @@ -282,6 +282,25 @@ const MopidyMiddleware = (function(){ }) break; + case 'MOPIDY_GET_SEARCH_RESULTS': + var queryObject = {}; + for( var i = 0; i < action.fields.length; i++ ){ + queryObject[action.fields[i]] = [action.query]; + } + + instruct( socket, store, 'library.search', {query: queryObject, uris: action.uris}) + .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] + } + + store.dispatch({ type: 'SEARCH_RESULTS_LOADED', tracks: tracks }); + }) + break; + /** * =============================================================== PLAYLIST(S) ========== diff --git a/src/js/services/spotify/actions.js b/src/js/services/spotify/actions.js index ff09cb5b..3bd96c2b 100755 --- a/src/js/services/spotify/actions.js +++ b/src/js/services/spotify/actions.js @@ -382,8 +382,6 @@ export function getURL( url, action_name, uri = false ){ export function getSearchResults( query, type = 'album,artist,playlist,track', limit = 50, offset = 0 ){ return (dispatch, getState) => { - dispatch({ type: 'SEARCH_RESULTS_LOADED', reset: true }); - var url = 'search?q='+query url += '&type='+type url += '&country='+getState().spotify.country @@ -427,7 +425,8 @@ export function getSearchResults( query, type = 'album,artist,playlist,track', l artists_more: response.artists.next, albums_uris: helpers.asURIs(response.albums.items), albums_more: response.albums.next, - tracks: response.tracks + tracks: response.tracks.items, + tracks_more: response.tracks.more }); }); } diff --git a/src/js/services/ui/actions.js b/src/js/services/ui/actions.js index 64a73951..ddc04650 100755 --- a/src/js/services/ui/actions.js +++ b/src/js/services/ui/actions.js @@ -18,20 +18,11 @@ export function hideContextMenu(){ } } -export function searchStarted( query ){ +export function startSearch( query ){ + console.log('STARTING NOW') return { type: 'SEARCH_STARTED', - query: query, - data: { - artists: [], - albums: [], - playlists: [], - tracks: [], - artists_more: false, - albums_more: false, - playlists_more: false, - tracks_more: false - } + query: query } } diff --git a/src/js/services/ui/reducer.js b/src/js/services/ui/reducer.js index 8eba6f85..5f5b9652 100755 --- a/src/js/services/ui/reducer.js +++ b/src/js/services/ui/reducer.js @@ -404,45 +404,42 @@ export default function reducer(ui = {}, action){ /** * Search results - **/ - - case 'SEARCH_STARTED': - return Object.assign({}, ui, { search_results: action.data }) - - case 'MOPIDY_SEARCH': - - // collate all our different sources into one array - var tracks = [] - for( var i = 0; i < action.data.length; i++ ){ - if( action.data[i].tracks ) tracks = [...tracks, ...action.data[i].tracks] - } - - // merge our results with all our other tracks - var results = Object.assign({}, ui.search_results, { - tracks: [...ui.search_results.tracks, ...tracks] - }) - return Object.assign({}, ui, { search_results: results }) + **/ case 'SEARCH_RESULTS_LOADED': - if (action.reset) return ui + console.log(action) - if (ui.search_results.artists_uris){ - var artists_uris = [...ui.search_results.artists_uris, ...action.artists_uris] + // artists + if (ui.search_results && ui.search_results.artists_uris){ + var artists_uris = ui.search_results.artists_uris }else{ - var artists_uris = action.artists_uris + var artists_uris = [] } + if (action.artists_uris) artists_uris = [...artists_uris, ...action.artists_uris] - if (ui.search_results.albums_uris){ - var albums_uris = [...ui.search_results.albums_uris, ...action.albums_uris] + // albums + if (ui.search_results && ui.search_results.albums_uris){ + var albums_uris = ui.search_results.albums_uris }else{ - var albums_uris = action.albums_uris + var albums_uris = [] } + if (action.albums_uris) albums_uris = [...albums_uris, ...action.albums_uris] - if (ui.search_results.playlists_uris){ - var playlists_uris = [...ui.search_results.playlists_uris, ...action.playlists_uris] + // playlists + if (ui.search_results && ui.search_results.playlists_uris){ + var playlists_uris = ui.search_results.playlists_uris }else{ - var playlists_uris = action.playlists_uris + var playlists_uris = [] } + if (action.playlists_uris) playlists_uris = [...playlists_uris, ...action.playlists_uris] + + // tracks + if (ui.search_results && ui.search_results.tracks){ + var tracks = ui.search_results.tracks + }else{ + var tracks = [] + } + if (action.tracks) tracks = [...tracks, ...action.tracks] return Object.assign({}, ui, { search_results: { @@ -452,8 +449,8 @@ export default function reducer(ui = {}, action){ albums_uris: albums_uris, playlists_more: (action.playlists_more ? action.playlists_more : null), playlists_uris: playlists_uris, - tracks: [ ...ui.search_results.tracks, ...action.tracks.items ], - tracks_more: action.tracks.next + tracks: tracks, + tracks_more: (action.tracks_more ? action.tracks.tracks_more : null) } }); diff --git a/src/js/views/Search.js b/src/js/views/Search.js index 07681090..82641303 100755 --- a/src/js/views/Search.js +++ b/src/js/views/Search.js @@ -41,9 +41,9 @@ class Search extends React.Component{ } performSearch( props = this.props ){ - this.props.uiActions.searchStarted( props.params.query ) + this.props.uiActions.startSearch(props.params.query) this.props.spotifyActions.getSearchResults( props.params.query ) - this.props.mopidyActions.getSearchResults( props.params.query, props.uri_schemes ) + if( props.mopidy_connected ) this.props.mopidyActions.getSearchResults( props.params.query, props.uri_schemes ) } loadMore(type){