From 25a42181952dd13e084e1ad68c932a7d75feb795 Mon Sep 17 00:00:00 2001 From: James Barnsley Date: Tue, 18 Apr 2017 08:52:28 +1200 Subject: [PATCH] Start/update radio as change_radio --- mopidy_iris/core.py | 91 +++++++++++++--------------- src/js/services/pusher/middleware.js | 21 ++++--- 2 files changed, 54 insertions(+), 58 deletions(-) diff --git a/mopidy_iris/core.py b/mopidy_iris/core.py index 2b030442..00d55136 100755 --- a/mopidy_iris/core.py +++ b/mopidy_iris/core.py @@ -21,6 +21,7 @@ class IrisCore(object): spotify_token = False queue_metadata = {} connections = {} + initial_consume = False radio = { "enabled": 0, "seed_artists": [], @@ -252,70 +253,64 @@ class IrisCore(object): 'radio': self.radio } - def start_radio(self, data): + def change_radio(self, data): + + # figure out if we're starting or updating radio mode + if self.radio['enabled']: + starting = False + self.initial_consume = self.core.tracklist.get_consume() + else: + starting = True + + # fetch more tracks from Mopidy-Spotify self.radio = data self.radio['enabled'] = 1; - uris = self.load_more_tracks() - # no uris means we can't play radio - if not uris: - self.radio['enabled'] = 0 - return { - 'status': 0, - 'message': 'No recommendations found', - 'radio': self.radio - } + # make sure we got recommendations + if uris: + if starting: + self.core.tracklist.clear() - # if we got recommendations - else: - self.core.tracklist.clear() - self.core.tracklist.set_consume( True ) - self.core.tracklist.add( uris = uris ) - self.core.playback.play() + self.core.tracklist.set_consume(True) + added = self.core.tracklist.add(uris = uris) - self.broadcast({ - 'type': 'radio_started', - 'radio': self.radio - }) + if added.get(): + if starting: + self.core.playback.play() + self.broadcast({ + 'type': 'radio_started', + 'radio': self.radio + }) + else: + self.broadcast({ + 'type': 'radio_changed', + 'radio': self.radio + }) - return self.get_radio({}) + return self.get_radio({}) - def update_radio(self, data): - self.radio = data - self.radio['enabled'] = 1; - - uris = self.load_more_tracks() - - # no uris means we can't play radio - if not uris: - self.radio['enabled'] = 0 - return { - 'status': 0, - 'message': 'No recommendations found', - 'radio': self.radio - } - - # if we got recommendations - else: - self.core.tracklist.add( uris = uris ) - self.broadcast({ - 'type': 'radio_updated', - 'radio': self.radio - }) - - return self.get_radio({}) + # failed fetching/adding tracks, so no-go + self.radio['enabled'] = 0; + return { + 'status': 0, + 'message': 'Could not start radio', + 'radio': self.radio + } def stop_radio(self, data): + self.radio = { "enabled": 0, "seed_artists": [], "seed_genres": [], "seed_tracks": [] } - - self.core.playback.stop() + + # restore initial consume state + self.core.tracklist.set_consume(self.initial_consume) + self.core.playback.stop() self.broadcast({ 'type': 'radio_stopped', @@ -378,7 +373,7 @@ class IrisCore(object): logger.warning('IrisFrontend: Could not fetch tracklist length') else: - self.core.tracklist.add( uris = uris ) + self.core.tracklist.add(uris = uris) diff --git a/src/js/services/pusher/middleware.js b/src/js/services/pusher/middleware.js index f231f8bf..0f0e645d 100755 --- a/src/js/services/pusher/middleware.js +++ b/src/js/services/pusher/middleware.js @@ -243,16 +243,14 @@ const PusherMiddleware = (function(){ break case 'PUSHER_START_RADIO': - case 'PUSHER_UPDATE_RADIO': - if (action.type == 'PUSHER_UPDATE_RADIO'){ - var method = 'update_radio' - var process_text = 'Updating radio' - } else { - var method = 'start_radio' - var process_text = 'Starting radio' - } + case 'PUSHER_UPDATE_RADIO': - store.dispatch(uiActions.startProcess('PUSHER_RADIO', process_text)) + // start our UI process notification + if (action.type == 'PUSHER_UPDATE_RADIO'){ + store.dispatch(uiActions.startProcess('PUSHER_RADIO', 'Updating radio')) + } else { + store.dispatch(uiActions.startProcess('PUSHER_RADIO', 'Starting radio')) + } var data = { seed_artists: [], @@ -274,8 +272,11 @@ const PusherMiddleware = (function(){ } } - request(store, method, data) + request(store, 'change_radio', data) .then(response => { + if (response.status == 0){ + store.dispatch(uiActions.createNotification(response.message, 'bad')) + } store.dispatch(uiActions.stopProcess('PUSHER_RADIO')) }) break