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
**/
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
}
}

View File

@ -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++ ){

View File

@ -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]))
}
}
}

View File

@ -139,19 +139,19 @@ class Search extends React.Component{
<div className="search-result-sections cf">
<section>
<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)} />
</div>
</section>
<section>
<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)} />
</div>
</section>
<section>
<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)} />
</div>
</section>