2015-11-16 15:24:28 +01:00

113 lines
2.5 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 exec = require('child_process').exec;
var fs = require("fs");
var http = require('http');
var wget = require('wget');
var grep = require('simple-grep');
var App = null;
var Log = null
var Helper = null;
var Conf = null;
var volume = '40';
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);
});
// set default volume level
Helper.shspawn('amixer scontrols');
Helper.shspawn('amixer sset \'PCM\' '+volume+'%');
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;
var m3u = '/tmp/kitchenradio.m3u';
try {
fs.unlinkSync(m3u);
} catch(e) {
Log.error('Radio: Error deleting "' + m3u + '".' + e);
}
var download = wget.download(channel.stream, m3u);
download.on('end', function(output) {
Log.inspect('Radio: Download completed', output);
Helper.shspawn(App.get('tools_root')+'action.sh stop');
Helper.shspawn(App.get('tools_root')+'action.sh play');
});
download.on('error', function(err) {
Log.error('Radio: Error downloading playlist. ' + err);
});
} else {
Log.error('Radio: No channel defined!');
}
}
exports.stop = function() {
Log.log('Radio: stop playing');
Helper.shspawn(App.get('tools_root')+'action.sh stop');
}
exports.volumeUp = function() {
exports.volume(5)
}
exports.volumeDown = function() {
exports.volume(-5)
}
exports.volume = function(step) {
Log.log('Radio: volume ' + (step>0 ? 'up' : 'down'));
if(step != 0) {
volume = volume + step;
if(volume > 100) { volume = 100; }
if(volume < 0) { volume = 0; }
Helper.shspawn('amixer sset \'PCM\' '+volume+'%');
}
}