From 7de06dcea87efcc579aa17016fa8daeb71cc5e91 Mon Sep 17 00:00:00 2001 From: Dan Barber Date: Wed, 8 Jan 2014 12:18:06 +0000 Subject: [PATCH] Refactor events into server singleton. --- assets/js/components/app.js | 3 +-- assets/js/constructs/events.js | 24 ------------------------ assets/js/helpers/server.js | 5 +++++ assets/js/models/queueSong.js | 11 +++++++++++ assets/js/models/status.js | 16 ++++++++++++++++ assets/js/mpd-client.js | 2 +- 6 files changed, 34 insertions(+), 27 deletions(-) delete mode 100644 assets/js/constructs/events.js create mode 100644 assets/js/helpers/server.js diff --git a/assets/js/components/app.js b/assets/js/components/app.js index e16befd..c043563 100644 --- a/assets/js/components/app.js +++ b/assets/js/components/app.js @@ -6,13 +6,12 @@ can.Component.extend({ scope: { queueSongs: new QueueSong.List(), - status: new Status + status: new can.Map() }, events: { init: function(element, options) { Status.findOne({}, this.updateStatus.bind(this)); - this.scope.attr('events', new Events(this.scope)); this.fetch(); }, diff --git a/assets/js/constructs/events.js b/assets/js/constructs/events.js deleted file mode 100644 index d52ee0a..0000000 --- a/assets/js/constructs/events.js +++ /dev/null @@ -1,24 +0,0 @@ -var Events = can.Construct.extend({ - - init: function(scope) { - this.events = new EventSource('/api/stream') - - self = this - - this.events.onmessage = function(e) { - response = JSON.parse(e.data); - switch (response.type) { - case 'status': - scope.attr('status').attr(response.data); - break; - case 'queue': - scope.attr('queueSongs', response.data); - break; - case 'time': - scope.attr('status.time', response.data); - break; - } - } - }, - -}); diff --git a/assets/js/helpers/server.js b/assets/js/helpers/server.js new file mode 100644 index 0000000..aa5f739 --- /dev/null +++ b/assets/js/helpers/server.js @@ -0,0 +1,5 @@ +window.server = { + + eventSource: new EventSource('/api/stream'), + +} diff --git a/assets/js/models/queueSong.js b/assets/js/models/queueSong.js index e3bf2f5..24ddf1d 100644 --- a/assets/js/models/queueSong.js +++ b/assets/js/models/queueSong.js @@ -12,6 +12,17 @@ var QueueSong = can.Model.extend({ QueueSong.List = can.List.extend({ + init: function() { + server.eventSource.addEventListener('message', this.updateQueue.bind(this)); + }, + + updateQueue: function(event) { + var response = JSON.parse(event.data); + if (response.type === 'queue') { + this.attr(response.data, true); + } + }, + updatePlaying: function(newSong) { this.each(function(item) { item.attr('playing', false); diff --git a/assets/js/models/status.js b/assets/js/models/status.js index 0791990..981882e 100644 --- a/assets/js/models/status.js +++ b/assets/js/models/status.js @@ -4,6 +4,22 @@ var Status = can.Model.extend({ }, { + init: function() { + server.eventSource.addEventListener('message', this.updateStatus.bind(this)); + }, + + updateStatus: function(event) { + var response = JSON.parse(event.data); + switch (response.type) { + case 'status': + this.attr(response.data); + break; + case 'time': + this.attr('time', response.data); + break; + } + }, + playing: function() { return this.attr('state') === 'play' }, diff --git a/assets/js/mpd-client.js b/assets/js/mpd-client.js index 9971027..3e3b82a 100644 --- a/assets/js/mpd-client.js +++ b/assets/js/mpd-client.js @@ -3,8 +3,8 @@ //= require ./libs/can.ejs.js //= require ./routes.js -//= require_tree ./models/ //= require_tree ./helpers/ +//= require_tree ./models/ //= require_tree ./controls/ //= require_tree ./constructs/ //= require_tree ./components/