106 lines
2.2 KiB
JavaScript

/**
* File: app/radio.js
* Author: Gerrit Linnemann
*
* Where the magic happens.
*/
// load the things we need
var spawn = require('child_process').spawn;
var App = null;
var Log = null
var Helper = null;
var Conf = null;
var Child = null;
exports.init = function(Express, Configuration) {
App = Express;
Conf = Configuration;
Log = App.get('Log');
Helper = App.get('Helper');
Log.debug('Radio: ' + exports.countChannels() + ' channels configured');
Helper.each(Conf.channels, function(channel, isLast) {
//Log.inspect('Channel', channel);
Log.log('Radio: Found channel ' + channel.title);
});
return this;
}
exports.countChannels = function() {
return Conf.channels.length;
}
exports.getChannels = function() {
return Conf.channels;
}
exports.getChannel = function(idx) {
if(Helper.isDefinedAndNotNull(Conf.channels[idx])) {
return Conf.channels[idx];
} else {
return null;
}
}
exports.play = function(idx) {
var channel = Conf.channels[idx];
if(channel !== undefined) {
var stream2play = channel.stream;
if(Helper.isDefinedAndNotNull(Child)) {
try {
Child.kill();
} catch(err) {
Log.error('Radio: Error killing process');
}
}
/*try {
var parsers = require("playlist-parser");
var M3U = parsers.M3U;
var fs = require("fs");
var playlist = M3U.parse(fs.readFileSync(channel.stream, { encoding: "utf8" }));
Log.inspect('Radio: playlist', playlist);
if(Helper.isDefinedAndNotNull(playlist[0])) {
stream2play = playlist[0].file;
}
} catch(e) {
Log.error(e);
}*/
var Child = spawn(
'mplayer',
[
'-slave',
'-quiet',
'stream2play'
]
);
// listen for any response from the child
Child.stdout.on('data', function(chunk) {
Log.log('Radio: ' + chunk);
});
// listen for any errors
Child.stderr.on('data', function (chunk) {
Log.error('Radio: ' + chunk);
});
/*Child.on('exit', function (code){
Log.log('Radio: Child process exited with exit code ' + code);
});*/
} else {
Log.error('Radio: No channel defined!');
}
}