From d38c754103e6f4c1cf216433d32b2c84831e709e Mon Sep 17 00:00:00 2001 From: James Barnsley Date: Thu, 10 Aug 2017 16:41:19 +1200 Subject: [PATCH] More universal processor style --- src/js/services/mopidy/actions.js | 12 ------------ src/js/services/mopidy/middleware.js | 16 +++++++--------- src/js/services/mopidy/reducer.js | 5 +++-- src/js/services/ui/actions.js | 18 ++++++++++++++++-- src/js/services/ui/middleware.js | 16 ++++++++++------ src/js/services/ui/reducer.js | 3 ++- 6 files changed, 38 insertions(+), 32 deletions(-) diff --git a/src/js/services/mopidy/actions.js b/src/js/services/mopidy/actions.js index 15d79d83..e405203d 100755 --- a/src/js/services/mopidy/actions.js +++ b/src/js/services/mopidy/actions.js @@ -64,24 +64,12 @@ export function enqueueURIs(uris, from_uri = null, next = false, at_position = n } } -export function enqueueURIsCancel(){ - return { - type: 'MOPIDY_ENQUEUE_URIS_CANCEL' - } -} - export function enqueueURIsBatchDone(){ return { type: 'MOPIDY_ENQUEUE_URIS_BATCH_DONE' } } -export function enqueueUrisProcessor(){ - return { - type: 'MOPIDY_ENQUEUE_URIS_PROCESSOR' - } -} - export function playPlaylist(uri){ return { type: 'MOPIDY_PLAY_PLAYLIST', diff --git a/src/js/services/mopidy/middleware.js b/src/js/services/mopidy/middleware.js index 872638b7..cc5f7bb8 100755 --- a/src/js/services/mopidy/middleware.js +++ b/src/js/services/mopidy/middleware.js @@ -272,7 +272,6 @@ 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(uiActions.startProcess('MOPIDY_ENQUEUE_URIS', 'Fetching tracks')) store.dispatch(spotifyActions.getAllPlaylistTracks(action.uri)) break } @@ -280,7 +279,6 @@ const MopidyMiddleware = (function(){ // 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(uiActions.startProcess('MOPIDY_ENQUEUE_URIS', 'Fetching tracks')) store.dispatch(spotifyActions.getAllPlaylistTracks(action.uri)) break @@ -329,7 +327,7 @@ const MopidyMiddleware = (function(){ next(action) // start our processor - store.dispatch(mopidyActions.enqueueUrisProcessor()) + store.dispatch(uiActions.startProcess('MOPIDY_ENQUEUE_URIS_PROCESSOR', 'Adding '+action.uris.length+' URI(s)')) break case 'MOPIDY_ENQUEUE_URIS_PROCESSOR': @@ -343,11 +341,11 @@ const MopidyMiddleware = (function(){ for (var i = 0; i < batches.length; i++){ total_uris += batches[i].uris.length } - store.dispatch(uiActions.startProcess('MOPIDY_ENQUEUE_URIS', 'Adding '+total_uris+' URI(s)')) + store.dispatch(uiActions.updateProcess('MOPIDY_ENQUEUE_URIS_PROCESSOR', 'Adding '+total_uris+' URI(s)')) // no batches means we're done here } else { - store.dispatch(uiActions.stopProcess('MOPIDY_ENQUEUE_URIS')) + store.dispatch(uiActions.processFinished('MOPIDY_ENQUEUE_URIS_PROCESSOR')) break } @@ -400,7 +398,7 @@ const MopidyMiddleware = (function(){ setTimeout( function(){ store.dispatch(mopidyActions.enqueueURIsBatchDone()) - store.dispatch(mopidyActions.enqueueUrisProcessor()) + store.dispatch(uiActions.runProcess(action.type)) }, 100 ) @@ -846,7 +844,7 @@ const MopidyMiddleware = (function(){ }); // Start our process to load the full album objects - store.dispatch(mopidyActions.runProcessor('MOPIDY_LIBRARY_ALBUMS_PROCESSOR')); + store.dispatch(uiActions.runProcess('MOPIDY_LIBRARY_ALBUMS_PROCESSOR')); }) break; @@ -856,7 +854,7 @@ const MopidyMiddleware = (function(){ var processor = store.getState().ui.processes['MOPIDY_LIBRARY_ALBUMS'] if (processor.cancelling){ - store.dispatch(uiActions.stopProcess('MOPIDY_LIBRARY_ALBUMS')) + store.dispatch(uiActions.processFinished('MOPIDY_LIBRARY_ALBUMS')) return false } } @@ -876,7 +874,7 @@ const MopidyMiddleware = (function(){ if (to_load.length > 0){ store.dispatch(mopidyActions.getAlbums(to_load, 'MOPIDY_LIBRARY_ALBUMS_PROCESSOR')) } else { - store.dispatch(uiActions.stopProcess('MOPIDY_LIBRARY_ALBUMS')) + store.dispatch(uiActions.processFinished('MOPIDY_LIBRARY_ALBUMS')) } break diff --git a/src/js/services/mopidy/reducer.js b/src/js/services/mopidy/reducer.js index f1a4a9b2..a3b75df8 100755 --- a/src/js/services/mopidy/reducer.js +++ b/src/js/services/mopidy/reducer.js @@ -104,15 +104,16 @@ export default function reducer(mopidy = {}, action){ enqueue_uris_batches: batches }); - case 'MOPIDY_ENQUEUE_URIS_CANCEL': + case 'MOPIDY_ENQUEUE_URIS_PROCESSOR_CANCEL': return Object.assign({}, mopidy, { enqueue_uris_batches: [] }); case 'MOPIDY_ENQUEUE_URIS_BATCH_DONE': if (!mopidy.enqueue_uris_batches || mopidy.enqueue_uris_batches.length <= 0){ + + // Batches empty, so we've been cancelled var batches = [] - console.error('Cannot remove batch when queue empty',action) } else { var batches = mopidy.enqueue_uris_batches batches.shift() diff --git a/src/js/services/ui/actions.js b/src/js/services/ui/actions.js index 260a312f..fba640db 100755 --- a/src/js/services/ui/actions.js +++ b/src/js/services/ui/actions.js @@ -176,6 +176,20 @@ export function startProcess(key,content){ } } +export function updateProcess(key,content){ + return { + type: 'UPDATE_PROCESS', + key: key, + content: content + } +} + +export function runProcess(key){ + return { + type: key + } +} + export function cancelProcess(key){ return { type: 'CANCEL_PROCESS', @@ -183,9 +197,9 @@ export function cancelProcess(key){ } } -export function stopProcess(key){ +export function processFinished(key){ return { - type: 'STOP_PROCESS', + type: 'PROCESS_FINISHED', key: key } } diff --git a/src/js/services/ui/middleware.js b/src/js/services/ui/middleware.js index a86195a0..4913c2ef 100755 --- a/src/js/services/ui/middleware.js +++ b/src/js/services/ui/middleware.js @@ -122,13 +122,17 @@ const UIMiddleware = (function(){ next(action) break + case 'START_PROCESS': + store.dispatch({ + type: action.key + }) + next(action) + break + case 'CANCEL_PROCESS': - if (action.key == 'MOPIDY_ENQUEUE_URIS'){ - store.dispatch(mopidyActions.enqueueURIsCancel()) - } - if (action.key == 'MOPIDY_LIBRARY_ALBUMS_PROCESSOR'){ - store.dispatch(mopidyActions.cancelProcessor(action.key)) - } + store.dispatch({ + type: action.key+'_CANCEL' + }) next(action) break diff --git a/src/js/services/ui/reducer.js b/src/js/services/ui/reducer.js index efd55e24..60bf8d62 100755 --- a/src/js/services/ui/reducer.js +++ b/src/js/services/ui/reducer.js @@ -126,6 +126,7 @@ export default function reducer(ui = {}, action){ return Object.assign({}, ui, {load_queue: load_queue}) case 'START_PROCESS': + case 'UPDATE_PROCESS': var processes = Object.assign({}, (ui.processes ? ui.processes : [])) processes[action.key] = { key: action.key, @@ -146,7 +147,7 @@ export default function reducer(ui = {}, action){ } return Object.assign({}, ui, {processes: processes}) - case 'STOP_PROCESS': + case 'PROCESS_FINISHED': var processes = Object.assign({}, (ui.processes ? ui.processes : {})) if (processes[action.key]){ delete processes[action.key]