diff --git a/mopidy_musicbox_webclient/static/js/controls.js b/mopidy_musicbox_webclient/static/js/controls.js index e2c035d..7adade2 100644 --- a/mopidy_musicbox_webclient/static/js/controls.js +++ b/mopidy_musicbox_webclient/static/js/controls.js @@ -1,45 +1,59 @@ /******************************************************** * play tracks from a browse list *********************************************************/ -function playBrowsedTracks(addtoqueue, trackIndex) { +function playBrowsedTracks(action, trackIndex) { $('#popupBrowse').popup('close'); toast('Loading...'); if (typeof trackIndex === 'undefined') { trackIndex = $('#popupBrowse').data("tlid"); } - var trackUri = browseTracks[trackIndex].uri; - + if (action == PLAY_ALL) { + mopidy.tracklist.clear(); + } + var trackUris = []; + switch (action) { + case PLAY_NOW: + case PLAY_NEXT: + case ADD_THIS_BOTTOM: + trackUris.push(browseTracks[trackIndex].uri); + break; + case ADD_ALL_BOTTOM: + case PLAY_ALL: + trackUris = getUris(browseTracks); + break; + default: + break; + } + // For radio streams we just add the selected URI. // TODO: Why? //if (isStreamUri(trackUri)) { //mopidy.tracklist.add(null, null, trackUri); //return false; //} - - switch (addtoqueue) { + + switch (action) { case PLAY_NOW: case PLAY_NEXT: mopidy.tracklist.index(songdata).then(function(currentIndex) { - mopidy.tracklist.add(null, currentIndex + 1, trackUri).then(function(tlTracks) { - if (addtoqueue == PLAY_NOW) { + var addFunc = mopidy.tracklist.add(null, currentIndex + 1, null, trackUris); + if (action == PLAY_NOW) { + addFunc.then(function(tlTracks) { mopidy.playback.play(tlTracks[0]); - } - }); + }); + }; }); break; case ADD_THIS_BOTTOM: - mopidy.tracklist.add(null, null, trackUri); - break; case ADD_ALL_BOTTOM: - mopidy.tracklist.add(browseTracks); - break; case PLAY_ALL: - mopidy.tracklist.clear(); - // TODO: Use uris parameter in v1.0 API (faster?). - mopidy.tracklist.add(browseTracks).then(function(tlTracks) { - mopidy.playback.play(tlTracks[trackIndex]); - }); + var addFunc = mopidy.tracklist.add(null, null, null, trackUris); + if (action == PLAY_ALL) { + addFunc.then(function(tlTracks) { + mopidy.playback.play(tlTracks[trackIndex]); + }); + } break; default: break; @@ -51,71 +65,56 @@ function playBrowsedTracks(addtoqueue, trackIndex) { /******************************************************** * play an uri from a tracklist *********************************************************/ -function playTrack(addtoqueue) { +function playTrack(action) { var hash = document.location.hash.split('?'); var divid = hash[0].substr(1); - if (!addtoqueue) { - addtoqueue = PLAY_NOW; - } - - // console.log(addtoqueue, divid); - - //stop directly, for user feedback. If searchresults, also clear queue - if (!addtoqueue || ((addtoqueue == PLAY_NOW) && (divid == 'search'))) { + // Clearing also stops playback. + if (action == PLAY_NOW) { mopidy.tracklist.clear(); + if (divid == 'search') { + action = PLAY_NOW_SEARCH; + } } + $('#popupTracks').popup('close'); $('#controlspopup').popup('close'); toast('Loading...'); playlisturi = $('#popupTracks').data("list"); - uri = $('#popupTracks').data("track"); - var trackslist = new Array(); - var track, tracksbefore, tracksafter; - var tracks = getTracksFromUri(playlisturi); - + var trackUris = getTracksFromUri(playlisturi); //find track that was selected - for (var selected = 0; selected < tracks.length; selected++) { - if (tracks[selected].uri == uri) { + for (var selected = 0; selected < trackUris.length; selected++) { + if (trackUris[selected] == uri) { break; } } - - //switch popup options - switch (addtoqueue) { - case PLAY_NOW: - if (divid == 'search') { - mopidy.tracklist.add(tracks.slice(selected, selected + 1)); - mopidy.playback.play(); - return false; - } + switch (action) { case ADD_THIS_BOTTOM: - mopidy.tracklist.add(tracks.slice(selected, selected + 1)); - return false; + case PLAY_NEXT: + case PLAY_NOW_SEARCH: + trackUris = [trackUris[selected]]; + selected = 0; + } + switch (action) { + case PLAY_NOW: + case PLAY_NOW_SEARCH: + mopidy.tracklist.add(null, null, null, trackUris).then(function(tlTracks) { + mopidy.playback.play(tlTracks[selected]) + }); + break; case PLAY_NEXT: mopidy.tracklist.index(songdata).then(function(currentIndex) { - mopidy.tracklist.add(tracks.slice(selected, selected + 1), currentIndex + 1); + mopidy.tracklist.add(null, currentIndex + 1, null, trackUris); }); - return false; + break; + case ADD_THIS_BOTTOM: case ADD_ALL_BOTTOM: - mopidy.tracklist.add(tracks); - return false; + mopidy.tracklist.add(null, null, null, trackUris); + break; } - // PLAY_NOW, play the selected track - // mopidy.tracklist.add(null, null, uri); //tracks); - mopidy.tracklist.add(tracks); - - if (!addtoqueue) { - mopidy.playback.stop(); - for (var i = 0; i <= selected; i++) { - mopidy.playback.next(); - } - mopidy.playback.play(); - } - return false; } @@ -155,8 +154,9 @@ function playTrackByUri(track_uri, playlist_uri) { 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(tracks).then(findAndPlayTrack); + mopidy.tracklist.add(null, null, null, tracks).then(findAndPlayTrack); } findAndPlayTrack(tltracks); } diff --git a/mopidy_musicbox_webclient/static/js/functionsvars.js b/mopidy_musicbox_webclient/static/js/functionsvars.js index 556f79a..0060f3e 100644 --- a/mopidy_musicbox_webclient/static/js/functionsvars.js +++ b/mopidy_musicbox_webclient/static/js/functionsvars.js @@ -65,6 +65,7 @@ PLAY_NEXT = 1; ADD_THIS_BOTTOM = 2; ADD_ALL_BOTTOM = 3; PLAY_ALL = 4; +PLAY_NOW_SEARCH = 5; MAX_TABLEROWS = 50; @@ -409,14 +410,28 @@ function getPlaylistFromUri(uri) { } } -function getTracksFromUri(uri) { - var pl = getPlaylistFromUri(uri); - if (pl) { - return pl.tracks; - } else if (customTracklists[uri]) { - return customTracklists[uri]; +function getUris(tracks) { + var results = []; + for (var i = 0; i < tracks.length; i++) { + results.push(tracks[i].uri); + } + return results; +} + +function getTracksFromUri(uri, full_track_data) { + full_track_data = full_track_data || false; + var pl = getPlaylistFromUri(uri); + var tracks = []; + if (pl) { + tracks = pl.tracks; + } else if (customTracklists[uri]) { + tracks = customTracklists[uri]; + } + if (full_track_data) { + return tracks; + } else { + return getUris(tracks); } - return []; } //convert time to human readable format diff --git a/mopidy_musicbox_webclient/static/js/library.js b/mopidy_musicbox_webclient/static/js/library.js index 16f6bf0..03bdc86 100644 --- a/mopidy_musicbox_webclient/static/js/library.js +++ b/mopidy_musicbox_webclient/static/js/library.js @@ -220,10 +220,10 @@ function getBrowseDir(rootdir) { // get directory to browse showLoading(true); if (!rootdir) { - browseStack.pop(); - rootdir = browseStack[browseStack.length - 1]; + browseStack.pop(); + rootdir = browseStack[browseStack.length - 1]; } else { - browseStack.push(rootdir); + browseStack.push(rootdir); } mopidy.library.browse(rootdir).then(processBrowseDir, console.error); } @@ -300,7 +300,7 @@ function showAlbum(uri) { $('#controlsmodal').popup('close'); $(ALBUM_TABLE).empty(); //fill from cache - var pl = getTracksFromUri(uri); + var pl = getTracksFromUri(uri, true); if (pl.length>0) { albumTracksToTable(pl, ALBUM_TABLE, uri); var albumname = getAlbum(pl);