- /**
- This class...
- @class StationsCollection
- @constructor
- @return {Object} instantiated StationsCollection
- **/
- define(['jquery', 'backbone', 'StationModel', 'simplestorage'], function ($, Backbone, StationModel, simpleStorage) {
-
- /**
- Custom event fired when station name changed
- @event STATION_NAME_CHANGED
- @param {This} caller
- @param {Self} context caller
- @param {Event} rss link
- @static
- @final
- **/
- BB.EVENTS.STATION_NAME_CHANGED = 'STATION_NAME_CHANGED';
-
- var StationsCollection = Backbone.Collection.extend({
-
- model: StationModel,
-
- /**
- Constructor
- @method initialize
- **/
- initialize: function () {
- var self = this;
-
- self.m_simpleStorage = simpleStorage;
- // self.m_blankNameStations = {};
- self.m_pollTimer = self.m_simpleStorage.get('pollStationsTime');
- if (_.isUndefined(self.m_pollTimer)) {
- self.m_pollTimer = 120;
- self.m_simpleStorage.set('pollStationsTime', self.m_pollTimer);
- }
- self.m_refreshHandle = undefined;
- self.resumeGetRemoteStations();
- // _.bind(self._onStationPollTimeChanged,self);
- // _.bindAll(self,'_onStationPollTimeChanged','_populateCollection');
- BB.comBroker.listen(BB.EVENTS['STATIONS_POLL_TIME_CHANGED'], $.proxy(self._onStationPollTimeChanged, self));
- BB.comBroker.listen(BB.EVENTS['STATIONS_POLL_TIME_CHANGED'], self._onStationPollTimeChanged);
- },
-
- /**
- Set how often to poll remote mediaSERVER for station updates, set by global settings component
- @method _onStationPollTimeChanged
- @param {Event} e
- **/
- _onStationPollTimeChanged: function (e) {
- var self = this;
- self.m_pollTimer = e.edata;
- },
-
- /**
- Create the stations collection with data received from remote mediaSERVER, create corresponding Backbone.models
- @method _populateCollection
- @param {Object} i_xmlStations
- **/
- _populateCollection: function (i_xmlStations) {
- var self = this;
- var addedNewStations = false;
- $(i_xmlStations).find('Station').each(function (key, value) {
- var stationID = $(value).attr('id');
- var stationData = {
- stationID: stationID,
- stationName: $(value).attr('name'),
- watchDogConnection: $(value).attr('watchDogConnection') == 1 ? 'on' : 'off',
- status: $(value).attr('status'),
- startTime: $(value).attr('startTime'),
- runningTime: $(value).attr('runningTime'),
- caching: $(value).attr('caching'),
- totalMemory: $(value).attr('totalMemory'),
- peakMemory: $(value).attr('peakMemory'),
- appVersion: $(value).attr('appVersion'),
- airVersion: $(value).attr('airVersion'),
- stationOS: $(value).attr('os'),
- socket: $(value).attr('socket'),
- connection: $(value).attr('connection'),
- connectionStatusChanged: false,
- lastUpdate: $(value).attr('lastUpdate'),
- stationColor: self._getStationIconColor($(value).attr('connection'))
- };
-
- if (_.isEmpty(stationData.stationName))
- self._getUpdatedStationName(stationData.stationID);
-
- var stationModel = self.findWhere({'stationID': stationID});
- if (_.isUndefined(stationModel)) {
- // new station added
- stationModel = new StationModel(stationData);
- self.add(stationModel);
- addedNewStations = true;
- } else {
- // update existing station
- if (stationModel.get('connection') != stationData.connection)
- stationData.connectionStatusChanged = true;
- stationModel.set(stationData);
- }
- });
- if (addedNewStations)
- pepper.sync(function () {
- });
- },
-
- /**
- Name is empty, so we pepper.sync to get updated station name
- @method setPlayerData
- @param {Number} i_playerData
- @return {Number} Unique clientId.
- **/
- _getUpdatedStationName: function (i_stationID) {
- var self = this;
- pepper.getStationNameAsync(i_stationID, function (i_stationName) {
- BB.comBroker.fire(BB.EVENTS.STATION_NAME_CHANGED, this, self,
- {
- stationID: i_stationID,
- stationName: i_stationName
- });
- });
- },
-
- /**
- Return a color string corresponding to the color code received from remote mediaSERVER
- @method _getStationIconColor
- @param {Number} i_connection
- **/
- _getStationIconColor: function (i_connection) {
- switch (i_connection) {
- case '2':
- {
- return 'yellow';
- break;
- }
- case '1':
- {
- return 'green';
- break;
- }
- default:
- {
- return 'red';
- break;
- }
- }
- },
-
- /**
- Pause retrieval of remote mediaSERVER station list and stats
- @method pauseGetRemoteStations
- **/
- pauseGetRemoteStations: function () {
- var self = this;
- clearInterval(self.m_refreshHandle);
- },
-
- /**
- Resume retrieval of remote mediaSERVER station list and stats
- @method resumeGetRemoteStations
- **/
- resumeGetRemoteStations: function () {
- var self = this;
- self.getRemoteStations();
- self.m_pollTimer = parseInt(self.m_pollTimer);
- log('polling on ' + self.m_pollTimer);
- if (_.isNaN(self.m_pollTimer) || _.isUndefined(self.m_pollTimer))
- self.m_pollTimer = 120;
- self.m_refreshHandle = setInterval(function () {
- self.getRemoteStations();
- log('getting station ' + Date.now() + ' ' + self.m_pollTimer);
- }, self.m_pollTimer * 1000);
- },
-
- /**
- Retrieve remote station list and status from remote mediaSERVER
- @method getRemoteStations
- **/
- getRemoteStations: function () {
- var self = this;
- var userData = pepper.getUserData();
- var url = window.g_protocol + userData.domain + '/WebService/getStatus.ashx?user=' + userData.userName + '&password=' + userData.userPass + '&callback=?';
- log(url);
- $.getJSON(url, function (data) {
- var s64 = data['ret'];
- var str = $.base64.decode(s64);
- var xml = $.parseXML(str);
- self._populateCollection(xml);
- }
- );
- }
- });
-
- return StationsCollection;
-
- });
-