2018-12-18 17:38:18 +00:00
|
|
|
const path = require('path')
|
|
|
|
const config = require(path.join(__dirname, 'config.js'))
|
|
|
|
const Liquidsoap = require(path.join(__dirname, 'liquidsoap.js'))
|
|
|
|
const Scheduler = require(path.join(__dirname, 'schedule.js'))
|
|
|
|
const rl = require(path.join(__dirname, 'console.js')).rl
|
|
|
|
|
|
|
|
let liq = new Liquidsoap()
|
|
|
|
liq.start()
|
|
|
|
|
|
|
|
let scheduler = new Scheduler(config.calendar)
|
|
|
|
scheduler.startTimers()
|
2019-01-11 02:27:56 +00:00
|
|
|
|
2018-12-18 17:38:18 +00:00
|
|
|
scheduler.runner = function (event) {
|
|
|
|
liq.queue(event.descriptor)
|
|
|
|
}
|
|
|
|
|
2019-01-11 02:27:56 +00:00
|
|
|
scheduler.reload = function (calendar) {
|
|
|
|
liq.sendCommand('schedule.reload').catch((e) => console.error('Failed to reload schedule:', e.message))
|
|
|
|
}
|
|
|
|
|
2018-12-18 17:38:18 +00:00
|
|
|
// User input handler
|
|
|
|
rl.on('line', function (line) {
|
|
|
|
let argv = line.split(' ')
|
|
|
|
|
|
|
|
switch (argv[0]) {
|
|
|
|
case 'stop':
|
|
|
|
console.log('Stopping liquidsoap..')
|
|
|
|
liq.stop()
|
|
|
|
break
|
|
|
|
case 'start':
|
|
|
|
if (liq.running) return
|
|
|
|
console.log('Starting liquidsoap..')
|
|
|
|
liq.start()
|
|
|
|
break
|
|
|
|
case 'restart':
|
|
|
|
console.log('Restarting liquidsoap..')
|
|
|
|
liq.stop()
|
|
|
|
setTimeout(() => liq.start(), 4000)
|
|
|
|
break
|
|
|
|
case 'queue':
|
|
|
|
let qline = line.substring(6)
|
|
|
|
liq.queue(qline)
|
|
|
|
break
|
|
|
|
case 'skip':
|
|
|
|
liq.skip()
|
|
|
|
break
|
|
|
|
case 'status':
|
|
|
|
console.log(liq.running ? 'Liquidsoap is running' : 'Liquidsoap is stopped')
|
|
|
|
break
|
|
|
|
case 'events':
|
|
|
|
console.log('Refreshing scheduler..')
|
|
|
|
scheduler.calendarFetch().catch((e) => console.error('Calendar fetch failed!', e.stack))
|
|
|
|
break
|
2019-01-11 02:27:56 +00:00
|
|
|
case 'reload':
|
|
|
|
console.log('Reloading configuration..')
|
|
|
|
config.read().then(
|
|
|
|
() => {
|
|
|
|
console.log('Configuration reloaded successfully.')
|
|
|
|
|
|
|
|
// Restart scheduler
|
|
|
|
scheduler.stopTimers()
|
|
|
|
scheduler.startTimers()
|
|
|
|
},
|
|
|
|
(e) => console.error('Configuration reload failed:', e.stack)
|
|
|
|
)
|
|
|
|
break
|
2018-12-18 17:38:18 +00:00
|
|
|
default:
|
|
|
|
console.log('Unknown command.')
|
|
|
|
}
|
|
|
|
|
|
|
|
rl.prompt(true)
|
|
|
|
})
|
|
|
|
|
|
|
|
rl.on('close', function () {
|
|
|
|
scheduler.stopTimers()
|
|
|
|
|
|
|
|
if (liq.running) {
|
|
|
|
liq.stop()
|
|
|
|
console.log('Waiting for liquidsoap to exit')
|
|
|
|
setTimeout(function () {
|
|
|
|
if (liq.running) {
|
|
|
|
console.warn('Liquidsoap did not exit in time, forcing..')
|
|
|
|
liq.proc.kill(9)
|
|
|
|
}
|
|
|
|
|
|
|
|
process.stdout.write('\n')
|
|
|
|
process.exit(0)
|
|
|
|
}, 1000)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
console.log('Bye bye!')
|
|
|
|
process.stdout.write('\n')
|
|
|
|
process.exit(0)
|
|
|
|
})
|