radio.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. /**** Last-fm API ****/
  2. (function( $ ) {
  3. $.fn.lfmr = function(options){
  4. var urla = "https://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user=windhamdavid&api_key=e12ea1d0253898ee9a93edfe42ffdeab&format=json&limit=100";
  5. var tracks = [];
  6. function isLoadedr (recentElement) {
  7. for (var i = 0; i < tracks.length; i++){
  8. var markup = $("<li class='list-group-item'>" + tracks[i].artist + " - <span class='artist'>" + tracks[i].title + " : " + tracks[i].album + "</li>");
  9. recentElement.append(markup);
  10. }
  11. }
  12. return this.each(function(){
  13. var $this = $(this);
  14. $.getJSON( urla, function(data){
  15. $(data.recenttracks.track).each(function(){
  16. tracks.push ({
  17. artist: this.artist["#text"],
  18. title: this.name,
  19. album: this.album["#text"]
  20. });
  21. });
  22. isLoadedr($this);
  23. });
  24. });
  25. };
  26. $('.recent').lfmr();
  27. $.fn.lfya = function(options){
  28. var urla = "https://ws.audioscrobbler.com/2.0/?method=user.gettopartists&user=windhamdavid&api_key=e12ea1d0253898ee9a93edfe42ffdeab&period=12month&format=json&limit=100";
  29. var artists = [];
  30. function isLoadeda (artistElement) {
  31. for (var i = 0; i < artists.length; i++){
  32. var markup = $("<li class='list-group-item'>" + artists[i].aname + "<span class='badge'>" + artists[i].played + "</span></li>");
  33. artistElement.append(markup);
  34. }
  35. }
  36. return this.each(function(){
  37. var $this = $(this);
  38. $.getJSON( urla, function(data){
  39. $(data.topartists.artist).each(function(){
  40. artists.push ({
  41. aname: this.name,
  42. played: this.playcount
  43. });
  44. });
  45. isLoadeda($this);
  46. });
  47. });
  48. };
  49. $('.artists').lfya();
  50. $.fn.lfyt = function(options){
  51. var urla = "https://ws.audioscrobbler.com/2.0/?method=user.gettoptracks&user=windhamdavid&api_key=e12ea1d0253898ee9a93edfe42ffdeab&period=12month&format=json&limit=100";
  52. var tracks = [];
  53. function isLoadedt (tracksElement) {
  54. for (var i = 0; i < tracks.length; i++){
  55. var markup = $("<li class='list-group-item'>" + tracks[i].artist + " - <span class='artist'>" + tracks[i].title + "</span><span class='badge'>" + tracks[i].played + "</span></li>");
  56. tracksElement.append(markup);
  57. }
  58. }
  59. return this.each(function(){
  60. var $this = $(this);
  61. $.getJSON( urla, function(data){
  62. $(data.toptracks.track).each(function(){
  63. tracks.push ({
  64. title: this.name,
  65. artist: this.artist.name,
  66. played: this.playcount,
  67. });
  68. });
  69. isLoadedt($this);
  70. });
  71. });
  72. };
  73. $('.tracks').lfyt();
  74. })( jQuery );
  75. /**** Audio Player ****/
  76. amplitude_config = {
  77. // amplitude_songs: []
  78. "amplitude_songs": [{
  79. "url": "http://stream.davidawindham.com:8008/stream",
  80. "live": true
  81. }],
  82. "amplitude_volume": 90
  83. }
  84. function get_radio_tower() {return 'img/radio.gif';}
  85. function get_radio_none() {return 'img/none.svg';}
  86. function get_radio_eq() {return 'img/eq.gif';}
  87. function get_radio_eq_none() {return 'img/1.png';}
  88. var interval = null;
  89. $(document).ready(function() {
  90. interval = setInterval(radioTitle,20000); // every 20 seconds or stop polling
  91. $('#error-reconnecting').hide();
  92. $('#connection-error-retry').on('click', function () {
  93. var $btn = $(this).button('reconnecting...')
  94. radioTitle();
  95. $('#error-reconnecting').show();
  96. $('#connection-error-reconnecting').progressbar();
  97. $btn.button('reset')
  98. })
  99. });
  100. radioTitle(); // call it once on load to avoid 20s delay
  101. function radioTitle() {
  102. var url = 'http://stream.davidawindham.com/status2.xsl';
  103. var mountpoint = '/stream';
  104. $.ajax({ type: 'GET',
  105. url: url,
  106. async: true,
  107. jsonpCallback: 'parseMusic',
  108. contentType: "application/json",
  109. dataType: 'jsonp',
  110. success: function(json){
  111. if(json[mountpoint] == null) {
  112. $('#connection-error').modal('show');
  113. }
  114. else {
  115. $('#track').text(json[mountpoint].title);
  116. $('#listeners').text(json[mountpoint].listeners);
  117. $('#peak-listeners').text(json[mountpoint].peak_listeners);
  118. $('#bitrate').text(json[mountpoint].bitrate);
  119. $('#radio').attr('src', get_radio_tower()).fadeIn(300);
  120. $('#eq').attr('src', get_radio_eq()).fadeIn(300);
  121. $('#connection-error').modal('hide');
  122. }
  123. },
  124. error: function(e){
  125. $('#connection-error').modal('show');
  126. clearInterval(interval);
  127. $('#radio').attr('src', get_radio_none()).fadeIn(300);
  128. $('#eq').attr('src', get_radio_eq_none()).fadeIn(300);
  129. }
  130. });
  131. $('#radio').attr('src', get_radio_none()).fadeIn(300);
  132. $('#eq').attr('src', get_radio_eq_none()).fadeIn(300);
  133. }
  134. /**** Page Features ****/
  135. $(document).ready(function() {
  136. function spectrum() {
  137. var randomColor = Math.floor(Math.random()*16777215).toString(16);
  138. $("span#user-label").css({ backgroundColor: '#' + randomColor });
  139. };
  140. $('ul.nav-tabs a').tooltip();
  141. });