APIs

Show:
  1. /**
  2. This class...
  3. @class StationsCollection
  4. @constructor
  5. @return {Object} instantiated StationsCollection
  6. **/
  7. define(['jquery', 'backbone', 'StationModel', 'simplestorage'], function ($, Backbone, StationModel, simpleStorage) {
  8.  
  9. /**
  10. Custom event fired when station name changed
  11. @event STATION_NAME_CHANGED
  12. @param {This} caller
  13. @param {Self} context caller
  14. @param {Event} rss link
  15. @static
  16. @final
  17. **/
  18. BB.EVENTS.STATION_NAME_CHANGED = 'STATION_NAME_CHANGED';
  19.  
  20. var StationsCollection = Backbone.Collection.extend({
  21.  
  22. model: StationModel,
  23.  
  24. /**
  25. Constructor
  26. @method initialize
  27. **/
  28. initialize: function () {
  29. var self = this;
  30.  
  31. self.m_simpleStorage = simpleStorage;
  32. // self.m_blankNameStations = {};
  33. self.m_pollTimer = self.m_simpleStorage.get('pollStationsTime');
  34. if (_.isUndefined(self.m_pollTimer)) {
  35. self.m_pollTimer = 120;
  36. self.m_simpleStorage.set('pollStationsTime', self.m_pollTimer);
  37. }
  38. self.m_refreshHandle = undefined;
  39. self.resumeGetRemoteStations();
  40. // _.bind(self._onStationPollTimeChanged,self);
  41. // _.bindAll(self,'_onStationPollTimeChanged','_populateCollection');
  42. BB.comBroker.listen(BB.EVENTS['STATIONS_POLL_TIME_CHANGED'], $.proxy(self._onStationPollTimeChanged, self));
  43. BB.comBroker.listen(BB.EVENTS['STATIONS_POLL_TIME_CHANGED'], self._onStationPollTimeChanged);
  44. },
  45.  
  46. /**
  47. Set how often to poll remote mediaSERVER for station updates, set by global settings component
  48. @method _onStationPollTimeChanged
  49. @param {Event} e
  50. **/
  51. _onStationPollTimeChanged: function (e) {
  52. var self = this;
  53. self.m_pollTimer = e.edata;
  54. },
  55.  
  56. /**
  57. Create the stations collection with data received from remote mediaSERVER, create corresponding Backbone.models
  58. @method _populateCollection
  59. @param {Object} i_xmlStations
  60. **/
  61. _populateCollection: function (i_xmlStations) {
  62. var self = this;
  63. var addedNewStations = false;
  64. $(i_xmlStations).find('Station').each(function (key, value) {
  65. var stationID = $(value).attr('id');
  66. var stationData = {
  67. stationID: stationID,
  68. stationName: $(value).attr('name'),
  69. watchDogConnection: $(value).attr('watchDogConnection') == 1 ? 'on' : 'off',
  70. status: $(value).attr('status'),
  71. startTime: $(value).attr('startTime'),
  72. runningTime: $(value).attr('runningTime'),
  73. caching: $(value).attr('caching'),
  74. totalMemory: $(value).attr('totalMemory'),
  75. peakMemory: $(value).attr('peakMemory'),
  76. appVersion: $(value).attr('appVersion'),
  77. airVersion: $(value).attr('airVersion'),
  78. stationOS: $(value).attr('os'),
  79. socket: $(value).attr('socket'),
  80. connection: $(value).attr('connection'),
  81. connectionStatusChanged: false,
  82. lastUpdate: $(value).attr('lastUpdate'),
  83. stationColor: self._getStationIconColor($(value).attr('connection'))
  84. };
  85.  
  86. if (_.isEmpty(stationData.stationName))
  87. self._getUpdatedStationName(stationData.stationID);
  88.  
  89. var stationModel = self.findWhere({'stationID': stationID});
  90. if (_.isUndefined(stationModel)) {
  91. // new station added
  92. stationModel = new StationModel(stationData);
  93. self.add(stationModel);
  94. addedNewStations = true;
  95. } else {
  96. // update existing station
  97. if (stationModel.get('connection') != stationData.connection)
  98. stationData.connectionStatusChanged = true;
  99. stationModel.set(stationData);
  100. }
  101. });
  102. if (addedNewStations)
  103. pepper.sync(function () {
  104. });
  105. },
  106.  
  107. /**
  108. Name is empty, so we pepper.sync to get updated station name
  109. @method setPlayerData
  110. @param {Number} i_playerData
  111. @return {Number} Unique clientId.
  112. **/
  113. _getUpdatedStationName: function (i_stationID) {
  114. var self = this;
  115. pepper.getStationNameAsync(i_stationID, function (i_stationName) {
  116. BB.comBroker.fire(BB.EVENTS.STATION_NAME_CHANGED, this, self,
  117. {
  118. stationID: i_stationID,
  119. stationName: i_stationName
  120. });
  121. });
  122. },
  123.  
  124. /**
  125. Return a color string corresponding to the color code received from remote mediaSERVER
  126. @method _getStationIconColor
  127. @param {Number} i_connection
  128. **/
  129. _getStationIconColor: function (i_connection) {
  130. switch (i_connection) {
  131. case '2':
  132. {
  133. return 'yellow';
  134. break;
  135. }
  136. case '1':
  137. {
  138. return 'green';
  139. break;
  140. }
  141. default:
  142. {
  143. return 'red';
  144. break;
  145. }
  146. }
  147. },
  148.  
  149. /**
  150. Pause retrieval of remote mediaSERVER station list and stats
  151. @method pauseGetRemoteStations
  152. **/
  153. pauseGetRemoteStations: function () {
  154. var self = this;
  155. clearInterval(self.m_refreshHandle);
  156. },
  157.  
  158. /**
  159. Resume retrieval of remote mediaSERVER station list and stats
  160. @method resumeGetRemoteStations
  161. **/
  162. resumeGetRemoteStations: function () {
  163. var self = this;
  164. self.getRemoteStations();
  165. self.m_pollTimer = parseInt(self.m_pollTimer);
  166. log('polling on ' + self.m_pollTimer);
  167. if (_.isNaN(self.m_pollTimer) || _.isUndefined(self.m_pollTimer))
  168. self.m_pollTimer = 120;
  169. self.m_refreshHandle = setInterval(function () {
  170. self.getRemoteStations();
  171. log('getting station ' + Date.now() + ' ' + self.m_pollTimer);
  172. }, self.m_pollTimer * 1000);
  173. },
  174.  
  175. /**
  176. Retrieve remote station list and status from remote mediaSERVER
  177. @method getRemoteStations
  178. **/
  179. getRemoteStations: function () {
  180. var self = this;
  181. var userData = pepper.getUserData();
  182. var url = window.g_protocol + userData.domain + '/WebService/getStatus.ashx?user=' + userData.userName + '&password=' + userData.userPass + '&callback=?';
  183. log(url);
  184. $.getJSON(url, function (data) {
  185. var s64 = data['ret'];
  186. var str = $.base64.decode(s64);
  187. var xml = $.parseXML(str);
  188. self._populateCollection(xml);
  189. }
  190. );
  191. }
  192. });
  193.  
  194. return StationsCollection;
  195.  
  196. });