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