Known_full_uri_schemes; looping all uris separately
This commit is contained in:
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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++ ){
|
||||
|
||||
@ -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]))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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>
|
||||
|
||||
Reference in New Issue
Block a user