Known_full_uri_schemes; looping all uris separately

This commit is contained in:
James Barnsley
2017-03-25 09:40:13 +13:00
parent 8a6ab339af
commit d64ab01cfe
4 changed files with 71 additions and 66 deletions

View File

@ -217,36 +217,39 @@ export function getLibraryAlbums(){
* Searching * Searching
**/ **/
export function getTrackSearchResults(query, limit = 100, uri_schemes){ export function getTrackSearchResults(query, limit = 100, uri_scheme){
return { return {
type: 'MOPIDY_GET_TRACK_SEARCH_RESULTS', type: 'MOPIDY_GET_TRACK_SEARCH_RESULTS',
query: query, query: query,
limit: limit, 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 { return {
type: 'MOPIDY_GET_ARTIST_SEARCH_RESULTS', type: 'MOPIDY_GET_ARTIST_SEARCH_RESULTS',
query: query, 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 { return {
type: 'MOPIDY_GET_ALBUM_SEARCH_RESULTS', type: 'MOPIDY_GET_ALBUM_SEARCH_RESULTS',
query: query, 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 { return {
type: 'MOPIDY_GET_PLAYLIST_SEARCH_RESULTS', type: 'MOPIDY_GET_PLAYLIST_SEARCH_RESULTS',
query: query, query: query,
limit: limit limit: limit,
uri_scheme: uri_scheme
} }
} }

View File

@ -314,37 +314,29 @@ const MopidyMiddleware = (function(){
case 'MOPIDY_GET_TRACK_SEARCH_RESULTS': 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 => { .then( response => {
// collate all our different sources into one array if (response.length <= 0) return
var tracks = []
for( var i = 0; i < response.length; i++ ){ var tracks = response[0].tracks.splice(0,action.limit)
if( response[i].tracks ) tracks = [...tracks, ...response[i].tracks.splice(0,action.limit)]
}
store.dispatch({ type: 'SEARCH_RESULTS_LOADED', tracks: tracks }); store.dispatch({ type: 'SEARCH_RESULTS_LOADED', tracks: tracks });
}) })
break; break;
case 'MOPIDY_GET_ARTIST_SEARCH_RESULTS': 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 = [] var artists_uris = []
for (var i = 0; i < response.length; i++){ if (response[0].tracks){
if (response[i].tracks){ for (var i = 0; i < response[0].tracks.length; i++){
for (var j = 0; j < response[i].tracks.length; j++){ if (response[0].tracks[i].artists){
if (response[i].tracks[j].artists){ for (var j = 0; j < response[0].tracks[i].artists.length; j++){
for (var k = 0; k < response[i].tracks[j].artists.length; k++){ var artist = response[0].tracks[i].artists[j]
var artist = response[i].tracks[j].artists[k] if (artist.uri){
if (artist.uri){ artists_uris.push(artist.uri)
artists_uris.push(artist.uri)
}
} }
} }
} }
@ -365,23 +357,18 @@ const MopidyMiddleware = (function(){
break; break;
case 'MOPIDY_GET_ALBUM_SEARCH_RESULTS': case 'MOPIDY_GET_ALBUM_SEARCH_RESULTS':
instruct( socket, store, 'library.search', {query: {album: [action.query]}, uris: [action.uri_scheme]})
// backends that provide artist data .then( response => {
var uri_schemes = ['local:','file:','m3u:'] if (response.length <= 0) return
instruct( socket, store, 'library.search', {query: {album: [action.query]}, uris: uri_schemes})
.then( response => {
// collate all our different sources into one array // collate all our different sources into one array
var albums_uris = [] var albums_uris = []
for (var i = 0; i < response.length; i++){ if (response[0].tracks){
if (response[i].tracks){ for (var i = 0; i < response[0].tracks.length; i++){
for (var j = 0; j < response[i].tracks.length; j++){ if (response[0].tracks[i].album){
if (response[i].tracks[j].album){ var album = response[0].tracks[i].album
var album = response[i].tracks[j].album if (album.uri){
if (album.uri){ albums_uris.push(album.uri)
albums_uris.push(album.uri)
}
} }
} }
} }
@ -401,21 +388,14 @@ const MopidyMiddleware = (function(){
break; break;
case 'MOPIDY_GET_PLAYLIST_SEARCH_RESULTS': 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') instruct( socket, store, 'playlists.asList')
.then( response => { .then( response => {
if (response.length <= 0) return
var playlists_uris = [] var playlists_uris = []
for (var i = 0; i < response.length; i++){ for (var i = 0; i < response.length; i++){
var playlist = response[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) playlists_uris.push(playlist.uri)
} }
} }
@ -678,6 +658,7 @@ const MopidyMiddleware = (function(){
case 'MOPIDY_GET_LIBRARY_ALBUMS': case 'MOPIDY_GET_LIBRARY_ALBUMS':
instruct( socket, store, 'library.browse', { uri: 'local:directory?type=album' } ) instruct( socket, store, 'library.browse', { uri: 'local:directory?type=album' } )
.then( response => { .then( response => {
if (response.length <= 0) return
var uris = helpers.asURIs(response) var uris = helpers.asURIs(response)
@ -696,6 +677,7 @@ const MopidyMiddleware = (function(){
case 'MOPIDY_GET_ALBUMS': case 'MOPIDY_GET_ALBUMS':
instruct( socket, store, 'library.lookup', { uris: action.uris } ) instruct( socket, store, 'library.lookup', { uris: action.uris } )
.then( response => { .then( response => {
if (response.length <= 0) return
var albums = [] var albums = []
@ -725,6 +707,8 @@ const MopidyMiddleware = (function(){
case 'MOPIDY_GET_ALBUM': case 'MOPIDY_GET_ALBUM':
instruct( socket, store, 'library.lookup', action.data ) instruct( socket, store, 'library.lookup', action.data )
.then( response => { .then( response => {
if (response.length <= 0) return
var album = Object.assign( var album = Object.assign(
{}, {},
{ images: [] }, { images: [] },
@ -807,6 +791,7 @@ const MopidyMiddleware = (function(){
case 'MOPIDY_GET_ARTIST': case 'MOPIDY_GET_ARTIST':
instruct( socket, store, 'library.lookup', action.data ) instruct( socket, store, 'library.lookup', action.data )
.then( response => { .then( response => {
if (response.length <= 0) return
var albums = [] var albums = []
for( var i = 0; i < response.length; i++ ){ for( var i = 0; i < response.length; i++ ){

View File

@ -121,6 +121,17 @@ const UIMiddleware = (function(){
var uri_schemes = state.mopidy.uri_schemes 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 // initiate spotify searching
if (!action.only_mopidy){ if (!action.only_mopidy){
if (!state.ui.search_settings || state.ui.search_settings.spotify){ if (!state.ui.search_settings || state.ui.search_settings.spotify){
@ -132,32 +143,38 @@ const UIMiddleware = (function(){
if (state.mopidy.connected){ if (state.mopidy.connected){
switch (action.search_type){ switch (action.search_type){
case 'playlists': 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 break
case 'artists': 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 break
case 'albums': 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 break
case 'tracks': case 'tracks':
for (var i = 0; i < uri_schemes.length; i++){ 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 break
default: default:
store.dispatch(mopidyActions.getPlaylistSearchResults(action.query,6)) for (var i = 0; i < full_uri_schemes.length; i++){
store.dispatch(mopidyActions.getArtistSearchResults(action.query,6)) store.dispatch(mopidyActions.getPlaylistSearchResults(action.query,6,full_uri_schemes[i]))
store.dispatch(mopidyActions.getAlbumSearchResults(action.query,6)) 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++){ 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]))
} }
} }
} }

View File

@ -139,19 +139,19 @@ class Search extends React.Component{
<div className="search-result-sections cf"> <div className="search-result-sections cf">
<section> <section>
<div className="inner"> <div className="inner">
<h4><Link to={global.baseURL+'search/'+this.props.params.query+'/artists'}>Artists</Link></h4> <h4><Link to={global.baseURL+'search/artists/'+this.props.params.query}>Artists</Link></h4>
<ArtistGrid className="mini" artists={artists.slice(0,6)} /> <ArtistGrid className="mini" artists={artists.slice(0,6)} />
</div> </div>
</section> </section>
<section> <section>
<div className="inner"> <div className="inner">
<h4><Link to={global.baseURL+'search/'+this.props.params.query+'/albums'}>Albums</Link></h4> <h4><Link to={global.baseURL+'search/albums/'+this.props.params.query}>Albums</Link></h4>
<AlbumGrid className="mini" albums={albums.slice(0,6)} /> <AlbumGrid className="mini" albums={albums.slice(0,6)} />
</div> </div>
</section> </section>
<section> <section>
<div className="inner"> <div className="inner">
<h4><Link to={global.baseURL+'search/'+this.props.params.query+'/playlists'}>Playlists</Link></h4> <h4><Link to={global.baseURL+'search/playlists/'+this.props.params.query}>Playlists</Link></h4>
<PlaylistGrid className="mini" playlists={playlists.slice(0,6)} /> <PlaylistGrid className="mini" playlists={playlists.slice(0,6)} />
</div> </div>
</section> </section>