djazz

Everfree Radio command line player

Jan 18th, 2013
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var http = require('http');
  2. var child_process = require('child_process');
  3.  
  4. var radioUrl = 'http://relay1.everfreeradio.com:8000/stream/2/';
  5.  
  6. var playerCmd = "omxplayer.bin";
  7.  
  8. var options = {
  9.     stdio: [null, process.stdout, process.stderr]
  10. };
  11. var player;
  12. function startPlayer() {
  13.     console.log("Started player");
  14.     player = child_process.spawn(playerCmd, [radioUrl], options);
  15.    
  16.     player.on('exit', function () {
  17.         console.log('exit', arguments);
  18.     });
  19.     player.on('close', function () {
  20.         console.log('close', arguments);
  21.         player.kill();
  22.         setTimeout(startPlayer, 5*1000);
  23.     });
  24.     //player.stdout.on('data', function () {console.log(data);});
  25. }
  26.  
  27.  
  28. function getData(cb) {
  29.     var timerData = setTimeout(cb, 10*1000);
  30.     var request = http.get("http://everfree.net/ajax/radioinfo.php", function (res) {
  31.         var data = "";
  32.         res.on('data', function (chunk) { data += chunk.toString('binary'); });
  33.         res.on('end', function () {
  34.             clearTimeout(timerData);
  35.             cb(JSON.parse(data));
  36.         });
  37.         res.on('error', console.log);
  38.     });
  39.     request.on('error', console.log);
  40. }
  41.  
  42. var trackListeners = 0;
  43. var trackTitle = "";
  44. var scrollPos = 0;
  45. var scrollLength = 15;
  46. var scrollTimer;
  47.  
  48. function updateData() {
  49.     getData(function (data) {
  50.         if (data) {
  51.             trackListeners = data.listeners;
  52.             //console.log("Current listeners:", trackListeners);
  53.             if (data.title !== trackTitle) {
  54.                 console.log("NOW PLAYING:", data.title);
  55.                 scrollPos = 0;
  56.                 trackTitle = data.title;
  57.                 updateTitle();
  58.             }
  59.         } else {
  60.             player.kill();
  61.         }
  62.         setTimeout(updateData, 15*1000);   
  63.     });
  64. }
  65.  
  66. function updateTitle() {
  67.     var len = trackTitle.length;
  68.     var maxlen = Math.min(len, scrollLength);
  69.     clearTimeout(scrollTimer);
  70.     process.title = "I>"+(trackTitle.substring(scrollPos, len) /*+ trackTitle.substring(0,
  71. scrollPos)*/).substring(0, maxlen).replace(/\ /g, '_')+"<I";
  72.     //console.log(process.title);
  73.    
  74.     scrollPos++;
  75.     if (scrollPos >= len+1-maxlen) {
  76.         scrollPos = 0;
  77.         //console.log("Extra wait");
  78.         scrollTimer = setTimeout(updateTitle, 2000);
  79.     } else if (scrollPos === 1) {
  80.         scrollTimer = setTimeout(updateTitle, 1500);
  81.     } else {
  82.         scrollTimer = setTimeout(updateTitle, 500);
  83.     }
  84. }
  85.  
  86. console.log("Starting...");
  87. startPlayer();
  88. updateData();
Add Comment
Please, Sign In to add comment