lib/server/public/js/rdio.js in robut-rdio-0.1.0 vs lib/server/public/js/rdio.js in robut-rdio-0.1.2

- old
+ new

@@ -1,170 +1,300 @@ -RdioPlayer = (function () { - - function initPlayer (options) { - // on page load use SWFObject to load the API swf into div#apiswf - var flashvars = { - 'playbackToken': options.token, // from token.js - 'domain': options.domain, // from token.js - 'listener': options.callbackName // the global name of the object that will receive callbacks from the SWF - }; - var params = { - 'allowScriptAccess': 'always' - }; - var attributes = {}; - swfobject.embedSWF('http://www.rdio.com/api/swf/', // the location of the Rdio Playback API SWF - options.elementId, // the ID of the element that will be replaced with the SWF - 1, 1, '9.0.0', 'expressInstall.swf', flashvars, params, attributes); - } - - var checkCommand = function (callbackObject, element) { - - $.ajax({ - url: '/command.json', - dataType: 'json', - success: function (data) { - if (data.length > 0) { - - if (data[0] == "pause") { - element.rdio_pause(); - } - - if (data[0] == "unpause" || data[0] == "play") { - element.rdio_play(); - } - if (data[0] == "next") { - element.rdio_next(); - } - - if (data[0] == "restart") { - element.rdio_previous(); - } - - if(command == "clear") { - element.rdio_clearQueue(); - element.rdio_next(true); - } - - - } - } - - }); - - setTimeout(function () { - checkCommand(callbackObject, element) - }, 2000); - - } - - var updateQueue = function (callbackObject, element) { - - $.ajax({ - url: '/queue.json', - dataType: 'json', - success: function (data) { - if (data.length > 0) { - - if (!callbackObject.playing) { - element.rdio_play(data[0]); - data = data.slice(1); - } - - for (var i = 0, _length = data.length; i < _length; i++) { - element.rdio_queue(data[i]); - } - - } - } - }); - - setTimeout(function () { - updateQueue(callbackObject, element) - }, 5000); - }; - - function createCallback(rdio, callbackName, elementId) { - var callback = {}; - - callback.ready = function () { - self.ready = true; - var element = document.getElementById(elementId); - rdio.player = element; - updateQueue(callback, element); - checkCommand(callback, element); - } - - callback.playStateChanged = function (playState) { - if (playState === 1 || playState === 3) { - callback.playing = true; - } else { - callback.playing = false; - } - } - - callback.sourceTitle = function (source) { - return source.artist + " - " + source.name; - } - - callback.sourceList = function (source) { - var queue = ""; - for (var i = 0, _length = source.length; i < _length; i++) { - queue += "<li class=\"source\">" + - callback.sourceTitle(source[i]) + - "</li>"; - } - return queue; - } - - callback.queueChanged = function (newQueue) { - $('#queue').html(callback.sourceList(newQueue)); - if (newQueue.length > 0) { - $('#queue_header').show().html('Queue (' + newQueue.length + ')'); - } else { - $('#queue_header').hide(); - } - } - - callback.playingSourceChanged = function (playingSource) { - var source = [] - if (playingSource.tracks) { - source = playingSource.tracks; - } else { - source = [playingSource]; - } - $('#now_playing').html(callback.sourceList(source)); - $('#album_art').attr('src', playingSource.icon); - } - - callback.playingTrackChanged = function(playingTrack, sourcePosition) { - if (playingTrack) { - $('#now_playing li').removeClass('playing'); - $('#now_playing li').eq(sourcePosition).addClass('playing'); - $('title').html(callback.sourceTitle(playingTrack) + " - Powered by Rdio"); - $('#current_track').show().html("Now Playing: " + callback.sourceTitle(playingTrack)); - } else { - $('#current_track').hide(); - } - } - - window[callbackName] = callback; - return callback; - } - - function RdioPlayer (options) { - this.options = options; - this.callback = createCallback(this, options.callbackName, options.elementId); - initPlayer(options); - } - - return RdioPlayer; -})(); - -$(document).ready(function () { - window.rdio = new RdioPlayer({ - token: rdio_token, - domain: rdio_domain, - elementId: 'apiswf', - callbackName: 'rdio_callback' - }); -}); - +RdioPlayer = (function () { + + var playerElement = {}; + + function initPlayer (options) { + // on page load use SWFObject to load the API swf into div#apiswf + var flashvars = { + 'playbackToken': options.token, // from token.js + 'domain': options.domain, // from token.js + 'listener': options.callbackName // the global name of the object that will receive callbacks from the SWF + }; + + var params = { + 'allowScriptAccess': 'always' + }; + + var attributes = {}; + + playerElement = options.elementId; + + swfobject.embedSWF('http://www.rdio.com/api/swf/', // the location of the Rdio Playback API SWF + options.elementId, // the ID of the element that will be replaced with the SWF + 1, 1, '9.0.0', 'expressInstall.swf', flashvars, params, attributes); + } + + function establishControls(rdio) { + + rdio.isPlaying = function () { + return rdio.callback.playing; + } + + rdio.isPaused = function () { + return !rdio.callback.playing; + } + + rdio.play = function () { + rdio.player.rdio_play(); + $(rdio.player).attr("playingState","playing"); + } + + rdio.pause = function () { + rdio.player.rdio_pause(); + $(rdio.player).attr("playingState","paused"); + } + + rdio.toggle = function () { + if ( rdio.isPlaying() ) { + rdio.pause(); + } else { + rdio.play(); + } + } + } + + function reporting(rdio) { + + rdio.announce = function(message,announcementType) { + + announcementType = typeof(announcementType) != 'undefined' ? announcementType : 'announcement'; + + $.ajax({ + url: '/' + announcementType + '/' + message, + dataType: 'json' + }); + } + + + } + + var checkCommand = function (callbackObject, element) { + + $.ajax({ + url: '/command.json', + dataType: 'json', + success: function (data) { + if (data.length > 0) { + var command = data[0]; + if(command == 'next_album'){ + element.rdio_next(true); + } + + if (command == "pause") { + element.rdio_pause(); + } + + if (command == "unpause" || command == "play") { + element.rdio_play(); + } + + if (command == "next") { + element.rdio_next(); + } + + if (command == "restart") { + element.rdio_previous(); + } + + if(command == "clear") { + element.rdio_clearQueue(); + element.rdio_next(true); + } + + + } + } + + }); + + setTimeout(function () { + checkCommand(callbackObject, element) + }, 2000); + + } + + var updateQueue = function (callbackObject, element) { + + $.ajax({ + url: '/queue.json', + dataType: 'json', + success: function (data) { + if (data.length > 0) { + + if (!callbackObject.playing) { + element.rdio_play(data[0]); + data = data.slice(1); + } + + for (var i = 0, _length = data.length; i < _length; i++) { + element.rdio_queue(data[i]); + } + + } + } + }); + + setTimeout(function () { + updateQueue(callbackObject, element) + }, 5000); + }; + + function createCallback(rdio, callbackName, elementId) { + var callback = {}; + + callback.ready = function () { + self.ready = true; + var element = document.getElementById(elementId); + rdio.player = element; + updateQueue(callback, element); + checkCommand(callback, element); + } + + callback.playStateChanged = function (playState) { + if (playState === 0 || playState === 4) { + callback.playing = false; + $('#player_state').html("<img src=\"images/circle-pause.png\">"); + rdio.announce("Pausing for station identification."); + } else if (playState === 1) { + callback.playing = true; + $('#player_state').html("<img src=\"images/circle-play.png\">"); + } else if (playState === 2) { + callback.playing = false; + $('#player_state').html("<img src=\"images/circle-stop.png\">"); + rdio.announce("Stopping for station identification."); + } else if (playState === 3) { + callback.playing = true; + $('#player_state').html("<img src=\"images/buffering.png\">"); + //rdio.announce("We'll continue this song after we go to Traffic with our in the sky Chopper Dave!") + } + } + + callback.playingSomewhereElse = function() { + rdio.announce("The FCC has called our bluff and we are being taken off the air. Good night and good luck!"); + $('#player_state').html("<img src=\"images/disconnected.png\">"); + } + + callback.sourceTitle = function (source) { + return source.artist + " - " + source.name; + } + + callback.sourceList = function (source) { + var queue = ""; + for (var i = 0, _length = source.length; i < _length; i++) { + queue += "<li class=\"source\">" + + callback.sourceTitle(source[i]) + + "</li>"; + } + return queue; + } + + callback.queueChanged = function (newQueue) { + $('#queue').html(callback.sourceList(newQueue)); + if (newQueue.length > 0) { + $('#queue_header').show().html('Queue (' + newQueue.length + ')'); + } else { + $('#queue_header').hide(); + } + } + + callback.playingSourceChanged = function (playingSource) { + var source = [] + if (playingSource.tracks) { + source = playingSource.tracks; + } else { + source = [playingSource]; + } + $('#now_playing').html(callback.sourceList(source)); + $('#album_art').attr('src', playingSource.icon); + } + + callback.playingTrackChanged = function(playingTrack, sourcePosition) { + if (playingTrack) { + var title = callback.sourceTitle(playingTrack); + + // Remove the current playing highlight on the current track and move it + // to the correct track. + + $('#now_playing li').removeClass('playing'); + $('#now_playing li').eq(sourcePosition).addClass('playing'); + + // Update the browser page title + + $('title').html(title + " - Powered by Rdio"); + + // Update the playing header + $('#current_track').show(); + $('#current_track_name').html(title); + + rdio.announce(encodeURIComponent(title),"now_playing"); + + } else { + $('#current_track').hide(); + } + } + + window[callbackName] = callback; + return callback; + } + + function RdioPlayer (options) { + this.options = options; + this.callback = createCallback(this, options.callbackName, options.elementId); + + establishControls(this); + reporting(this); + + initPlayer(options); + } + + return RdioPlayer; +})(); + +function playerKeyboardShortcuts() { + if (window.top.frames.main) return; + + $(document).keydown(function(evt) { + + if (evt.altKey || evt.ctrlKey || evt.metaKey || evt.shiftKey) return; + + if (typeof evt.target !== "undefined" && + (evt.target.nodeName == "INPUT" || + evt.target.nodeName == "TEXTAREA")) return; + + switch (evt.keyCode) { + + // Space Bar is play/pause + case 32: + window.rdio.toggle(); + return false; + break; + + // Previous Track - Left Arrow, P + case 37: case 80: case 112: + window.rdio.player.rdio_previous(); + return false; + break; + + // Next Track - Right Arrow, N + case 39: case 78: case 110: + window.rdio.player.rdio_next(); + return false; + break; + + } + + }); + +} + + +$(document).ready(function () { + window.rdio = new RdioPlayer({ + token: rdio_token, + domain: rdio_domain, + elementId: 'apiswf', + callbackName: 'rdio_callback' + }); + + $(playerKeyboardShortcuts); +}); +