From 94012898021ec77fc40bd7996bf8774edf0327d7 Mon Sep 17 00:00:00 2001 From: James Barnsley Date: Tue, 14 Feb 2017 21:41:13 +1300 Subject: [PATCH] When added, backend broadcasts --- mopidy_iris/frontend.py | 19 +++++++++++-------- src/js/helpers.js | 11 ++++++++++- src/js/services/pusher/middleware.js | 16 ++++------------ src/js/services/ui/reducer.js | 15 +++++++++++++-- 4 files changed, 38 insertions(+), 23 deletions(-) diff --git a/mopidy_iris/frontend.py b/mopidy_iris/frontend.py index 5198383c..6ae1022d 100755 --- a/mopidy_iris/frontend.py +++ b/mopidy_iris/frontend.py @@ -84,7 +84,7 @@ class IrisFrontend(pykka.ThreadingActor, CoreListener): # Listen for core events, and update our frontend as required ## def track_playback_ended( self, tl_track, time_position ): - self.check_for_radio_update() + self.check_for_radio_update() ## @@ -190,15 +190,15 @@ class IrisFrontend(pykka.ThreadingActor, CoreListener): def get_spotify_token( self ): return self.spotify_token - - # get queue metadata + + ## + # Queue metadata + ## + def get_queue_metadata( self ): return self.queue_metadata - - # add queue metadata def add_queue_metadata( self, tlids, added_from, added_by ): - queue_metadata = self.queue_metadata for tlid in tlids: item = { @@ -206,9 +206,12 @@ class IrisFrontend(pykka.ThreadingActor, CoreListener): 'added_from': added_from, 'added_by': added_by } - queue_metadata['tlid_'+str(tlid)] = item + self.queue_metadata['tlid_'+str(tlid)] = item - return queue_metadata + # broadcast to all clients + pusher.broadcast('queue_metadata', {'queue_metadata': self.queue_metadata}) + + return self.queue_metadata # get our config values diff --git a/src/js/helpers.js b/src/js/helpers.js index 86e13b88..7ccbfb1c 100755 --- a/src/js/helpers.js +++ b/src/js/helpers.js @@ -182,7 +182,7 @@ export let getFromUri = function(element,uri){ export let uriType = function( uri ){ var exploded = uri.split(':'); - if( exploded[0] == 'spotify' ){ + if (exploded[0] == 'spotify'){ switch( exploded[1] ){ case 'track': return 'track' @@ -199,6 +199,15 @@ export let uriType = function( uri ){ return null break; } + } else if (exploded[0] == 'local'){ + switch( exploded[1] ){ + case 'album': + return 'album' + break; + case 'artist': + return 'artist' + break; + } } return null; diff --git a/src/js/services/pusher/middleware.js b/src/js/services/pusher/middleware.js index 2705c7e3..9cce3556 100755 --- a/src/js/services/pusher/middleware.js +++ b/src/js/services/pusher/middleware.js @@ -154,12 +154,9 @@ const PusherMiddleware = (function(){ store.dispatch({ type: 'RADIO', data: response.data }) } ) - request({ action: 'get_queue_metadata'}) - .then( - response => { - store.dispatch({ type: 'QUEUE_METADATA', queue_metadata: response.data.queue_metadata }) - } - ) + + store.dispatch(pusherActions.getQueueMetadata()) + return next(action); break; @@ -171,18 +168,13 @@ const PusherMiddleware = (function(){ request({ action: 'get_queue_metadata'}) .then( response => { - store.dispatch({ type: 'QUEUE_METADATA', queue_metadata: response.data.queue_metadata }) + store.dispatch({ type: 'QUEUE_METADATA', data: response.data }) } ) break; case 'PUSHER_ADD_QUEUE_METADATA': request({ action: 'add_queue_metadata', tlids: action.tlids, added_from: action.from_uri }) - .then( - response => { - store.dispatch({ type: 'QUEUE_METADATA', queue_metadata: response.data.queue_metadata }) - } - ) break; case 'START_UPGRADE': diff --git a/src/js/services/ui/reducer.js b/src/js/services/ui/reducer.js index 9ad0f8dd..991dc4f1 100755 --- a/src/js/services/ui/reducer.js +++ b/src/js/services/ui/reducer.js @@ -131,8 +131,19 @@ export default function reducer(ui = {}, action){ }); case 'QUEUE_METADATA': - console.log(action); - return Object.assign({}, ui, { queue_metadata: action.queue_metadata }); + var tracklist = Object.assign([], ui.current_tracklist) + for( var i = 0; i < tracklist.length; i++ ){ + + // load our metadata (if we have any for that tlid) + if (typeof(action.data.queue_metadata['tlid_'+tracklist[i].tlid]) !== 'undefined'){ + tracklist[i] = Object.assign( + {}, + tracklist[i], + action.data.queue_metadata['tlid_'+tracklist[i].tlid], + ) + } + } + return Object.assign({}, ui, { current_tracklist: tracklist, queue_metadata: action.data.queue_metadata }); case 'RADIO': case 'START_RADIO':