diff --git a/src/index.html b/src/index.html
index 987d207a..6cdea50d 100755
--- a/src/index.html
+++ b/src/index.html
@@ -45,7 +45,7 @@
// Identify whether we're in test mode, and need to fetch non-minified assets
var ui = JSON.parse( localStorage.getItem('ui') );
- if (typeof(ui) === 'undefined' || typeof(ui.test_mode) === 'undefined' || !ui.test_mode){
+ if (typeof(ui) === 'undefined' || !ui || typeof(ui.test_mode) === 'undefined' || !ui.test_mode){
js.src = '/iris/app.min.js?v='+build_name;
css.href = '/iris/app.min.css?v='+build_name;
} else {
diff --git a/src/js/services/mopidy/middleware.js b/src/js/services/mopidy/middleware.js
index bb503aa7..5a9e6eae 100755
--- a/src/js/services/mopidy/middleware.js
+++ b/src/js/services/mopidy/middleware.js
@@ -282,14 +282,14 @@ const MopidyMiddleware = (function(){
// make sure we didn't get this playlist from Mopidy-Spotify
// if we did, we'd have a cached version on server so no need to fetch
if (!store.getState().core.playlists[action.uri].is_mopidy){
- store.dispatch(spotifyActions.getAllPlaylistTracks(action.uri))
+ store.dispatch(spotifyActions.getPlaylistTracksForPlaying(action.uri))
break
}
// it's a spotify playlist that we haven't loaded
// we need to fetch via HTTP API to avoid timeout
} else if (helpers.uriSource(action.uri) == 'spotify' && store.getState().spotify.enabled){
- store.dispatch(spotifyActions.getAllPlaylistTracks(action.uri))
+ store.dispatch(spotifyActions.getPlaylistTracksForPlaying(action.uri))
break
// Not in index, and Spotify HTTP not enabled, so just play it as-is
@@ -348,10 +348,17 @@ const MopidyMiddleware = (function(){
))
break
- case 'MOPIDY_ENQUEUE_URIS_PROCESSOR':
+ case 'MOPIDY_ENQUEUE_URIS_PROCESSOR':
+
+ var last_run = store.getState().ui.processes.MOPIDY_ENQUEUE_URIS_PROCESSOR
+
+ // Cancelling
+ if (last_run && last_run.status == 'cancelling'){
+ store.dispatch(uiActions.processCancelled('MOPIDY_ENQUEUE_URIS_PROCESSOR'))
+ return
// make sure we have some uris in the queue
- if (action.data.batches && action.data.batches.length > 0){
+ } else if (action.data.batches && action.data.batches.length > 0){
var batches = Object.assign([],action.data.batches)
var batch = batches[0]
diff --git a/src/js/services/spotify/actions.js b/src/js/services/spotify/actions.js
index 08883fa4..d3eea7d8 100755
--- a/src/js/services/spotify/actions.js
+++ b/src/js/services/spotify/actions.js
@@ -1236,27 +1236,68 @@ export function getPlaylist(uri){
*
* Recursively get .next until we have all tracks
**/
-function loadNextPlaylistTracksBatch(dispatch, getState, uri, tracks, lastResponse){
- if( lastResponse.next ){
- sendRequest(dispatch, getState, lastResponse.next)
- .then( response => {
- tracks = [...tracks, ...response.items]
- loadNextPlaylistTracksBatch(dispatch, getState, uri, tracks, response)
- });
- }else{
- dispatch({
- type: 'SPOTIFY_ALL_PLAYLIST_TRACKS_LOADED_FOR_PLAYING',
- uri: uri,
- tracks: tracks
- });
+
+export function getPlaylistTracksForPlaying(uri){
+ return (dispatch, getState) => {
+ dispatch(uiActions.startProcess(
+ 'SPOTIFY_GET_PLAYLIST_TRACKS_FOR_PLAYING_PROCESSOR',
+ 'Loading playlist tracks',
+ {
+ next: 'users/'+ helpers.getFromUri('userid',uri) +'/playlists/'+ helpers.getFromUri('playlistid',uri) +'/tracks?market='+getState().core.country
+ }
+ ))
}
}
-export function getAllPlaylistTracks(uri){
+export function getPlaylistTracksForPlayingProcessor(data){
return (dispatch, getState) => {
- sendRequest(dispatch, getState, 'users/'+ helpers.getFromUri('userid',uri) +'/playlists/'+ helpers.getFromUri('playlistid',uri) +'/tracks?market='+getState().core.country)
+ sendRequest(dispatch, getState, data.next)
.then( response => {
- loadNextPlaylistTracksBatch(dispatch, getState, uri, response.items, response)
+
+ // Check to see if we've been cancelled
+ if (getState().ui.processes['SPOTIFY_GET_PLAYLIST_TRACKS_FOR_PLAYING_PROCESSOR'] !== undefined){
+ var processor = getState().ui.processes['SPOTIFY_GET_PLAYLIST_TRACKS_FOR_PLAYING_PROCESSOR']
+
+ if (processor.status == 'cancelling'){
+ dispatch(uiActions.processCancelled('SPOTIFY_GET_PLAYLIST_TRACKS_FOR_PLAYING_PROCESSOR'))
+ return false
+ }
+ }
+
+ // Add on our new batch of loaded tracks
+ var uris = []
+ var new_uris = []
+ for (var i = 0; i < response.items.length; i++){
+ new_uris.push(response.items[i].track.uri)
+ }
+ if (data.uris){
+ uris = [...data.uris, ...new_uris];
+ } else {
+ uris = new_uris;
+ }
+
+ // We got a next link, so we've got more work to be done
+ if (response.next){
+ dispatch(uiActions.updateProcess(
+ 'SPOTIFY_GET_PLAYLIST_TRACKS_FOR_PLAYING_PROCESSOR',
+ 'Loading '+(response.total-uris.length)+' playlist tracks',
+ {
+ next: response.next,
+ total: response.total,
+ remaining: response.total - uris.length
+ }
+ ))
+ dispatch(uiActions.runProcess(
+ 'SPOTIFY_GET_PLAYLIST_TRACKS_FOR_PLAYING_PROCESSOR',
+ {
+ next: response.next,
+ uris: uris
+ }
+ ))
+ } else {
+ dispatch(mopidyActions.playURIs(uris))
+ dispatch(uiActions.processFinished('SPOTIFY_GET_PLAYLIST_TRACKS_FOR_PLAYING_PROCESSOR'))
+ }
});
}
}
diff --git a/src/js/services/spotify/middleware.js b/src/js/services/spotify/middleware.js
index ad7b211e..af0fd92e 100755
--- a/src/js/services/spotify/middleware.js
+++ b/src/js/services/spotify/middleware.js
@@ -245,6 +245,10 @@ const SpotifyMiddleware = (function(){
store.dispatch(spotifyActions.getLibraryAlbumsProcessor(action.data))
break
+ case 'SPOTIFY_GET_PLAYLIST_TRACKS_FOR_PLAYING_PROCESSOR':
+ store.dispatch(spotifyActions.getPlaylistTracksForPlayingProcessor(action.data))
+ break
+
case 'SPOTIFY_LIBRARY_ALBUMS_LOADED':
var albums = []
for (var i = 0; i < action.albums.length; i++){