diff --git a/mopidy_musicbox_webclient/static/js/controls.js b/mopidy_musicbox_webclient/static/js/controls.js index c9cb599..76dc3e9 100644 --- a/mopidy_musicbox_webclient/static/js/controls.js +++ b/mopidy_musicbox_webclient/static/js/controls.js @@ -121,20 +121,20 @@ function playTrack(action) { */ function playTrackByUri(track_uri, playlist_uri) { function findAndPlayTrack(tltracks) { -// console.log('fa', tltracks, track_uri); - if (tltracks == []) { return;} - // Find track that was selected - for (var selected = 0; selected < tltracks.length; selected++) { - if (tltracks[selected].track.uri == track_uri) { - mopidy.playback.play(tltracks[selected]); - return; + if (tltracks.length > 0) { + // Find track that was selected + for (var selected = 0; selected < tltracks.length; selected++) { + if (tltracks[selected].track.uri == track_uri) { + mopidy.playback.play(tltracks[selected]); + return; + } } } - console.log('Failed to play selected track ', track_uri); + console.error('Failed to find and play selected track ', track_uri); + return; } // Stop directly, for user feedback - mopidy.playback.stop(); mopidy.tracklist.clear(); //this is deprecated, remove when popuptracks is removed completly @@ -144,19 +144,15 @@ function playTrackByUri(track_uri, playlist_uri) { toast('Loading...'); - var func; - func = mopidy.tracklist.add(null, null, playlist_uri); - func.then( - function(tltracks) { - //check if tltracks is filled, some backends (gmusic, m3u) do not support adding by uri, it seems - if (tltracks.length == 0) { - console.log('failed to add by playlist, falling back'); - var tracks = getTracksFromUri(playlist_uri); - mopidy.tracklist.add(null, null, null, tracks).then(findAndPlayTrack); - } + mopidy.tracklist.add(null, null, playlist_uri).then(function(tltracks) { + // Can fail for all sorts of reasons. If so, just add individually. + if (tltracks.length == 0) { + var trackUris = getTracksFromUri(playlist_uri, false); + mopidy.tracklist.add(null, null, null, trackUris).then(findAndPlayTrack); + } else { findAndPlayTrack(tltracks); } - ).then(getCurrentPlaylist()); // Updates some state + }); return false; } diff --git a/mopidy_musicbox_webclient/static/js/functionsvars.js b/mopidy_musicbox_webclient/static/js/functionsvars.js index cff7638..58e7a6c 100644 --- a/mopidy_musicbox_webclient/static/js/functionsvars.js +++ b/mopidy_musicbox_webclient/static/js/functionsvars.js @@ -60,6 +60,8 @@ SEARCH_ALBUM_TABLE = '#albumresulttable'; SEARCH_ARTIST_TABLE = '#artistresulttable'; SEARCH_TRACK_TABLE = '#trackresulttable'; +URI_SCHEME = 'mbw'; + PLAY_NOW = 0; PLAY_NEXT = 1; ADD_THIS_BOTTOM = 2; @@ -503,15 +505,18 @@ function validServiceUri(str) { return validUri(str) || isServiceUri(str); } +function getSchemeFromUri(uri) { + return uri.split(":")[0].toLowerCase(); +} + function isStreamUri(uri) { - var uriSplit = uri.split(":"); var a = validUri(uri); - var b = radioExtensionsList.indexOf(uriSplit[0].toLowerCase()) >= 0; + var b = radioExtensionsList.indexOf(getSchemeFromUri(uri)) >= 0; return a || b; } function getMediaClass(uri) { - var uriSplit = uri.split(":")[0].toLowerCase(); + var uriSplit = getSchemeFromUri(uri); for (var i = 0; i < uriClassList.length; i++) { if (uriSplit == uriClassList[i][0]) { return "fa " + uriClassList[i][1]; @@ -521,7 +526,7 @@ function getMediaClass(uri) { } function getMediaHuman(uri) { - var uriSplit = uri.split(":")[0].toLowerCase(); + var uriSplit = getSchemeFromUri(uri); for (var i = 0; i < uriHumanList.length; i++) { if (uriSplit == uriHumanList[i][0]) { return uriHumanList[i][1]; @@ -531,7 +536,7 @@ function getMediaHuman(uri) { } function isServiceUri(uri) { - var uriSplit = uri.split(":")[0].toLowerCase(); + var uriSplit = getSchemeFromUri(uri); var retVal = false; for (var i = 0; i < uriClassList.length; i++) { diff --git a/mopidy_musicbox_webclient/static/js/library.js b/mopidy_musicbox_webclient/static/js/library.js index 03bdc86..71024ee 100644 --- a/mopidy_musicbox_webclient/static/js/library.js +++ b/mopidy_musicbox_webclient/static/js/library.js @@ -23,10 +23,10 @@ function initSearch() { document.activeElement.blur(); $("input").blur(); - delete customTracklists['mbw:allresultscache']; - delete customTracklists['mbw:artistresultscache']; - delete customTracklists['mbw:albumresultscache']; - delete customTracklists['mbw:trackresultscache']; + delete customTracklists[URI_SCHEME+':allresultscache']; + delete customTracklists[URI_SCHEME+':artistresultscache']; + delete customTracklists[URI_SCHEME+':albumresultscache']; + delete customTracklists[URI_SCHEME+':trackresultscache']; $("#searchresults").hide(); if (searchService != 'all') { @@ -113,7 +113,7 @@ function processSearchResults(resultArr) { - customTracklists['mbw:trackresultscache'] = results.tracks; + customTracklists[URI_SCHEME+':trackresultscache'] = results.tracks; if (emptyResult) { toast('No results'); @@ -196,8 +196,8 @@ function processSearchResults(resultArr) { $('#expandsearch').show(); // Track results -// playlisttotable(results.tracks, SEARCH_TRACK_TABLE, 'mbw:trackresultscache'); - resultsToTables(results.tracks, SEARCH_TRACK_TABLE, 'mbw:trackresultscache'); +// playlisttotable(results.tracks, SEARCH_TRACK_TABLE, URI_SCHEME+':trackresultscache'); + resultsToTables(results.tracks, SEARCH_TRACK_TABLE, URI_SCHEME+':trackresultscache'); showLoading(false); }