Add support for scripting directory
This commit is contained in:
parent
a4e4a119a2
commit
058f57919a
@ -50,5 +50,6 @@ The following keys are available:
|
||||
(`-R`), reading commands from stdin.
|
||||
* `stop_id` -- id of the card that stops playback
|
||||
* `pause_id` -- id of card that pauses playback
|
||||
* `debug` -- true to enable some extra logging
|
||||
|
||||
[1]: https://sixohthree.com/
|
||||
|
@ -4,11 +4,13 @@
|
||||
"mpg321": ["/usr/bin/mpg321", "-R", "-"],
|
||||
|
||||
"media_path": "/path/to/media",
|
||||
"script_path": "/path/to/scripts",
|
||||
|
||||
"play_throttle": 5000,
|
||||
"pause_throttle": 2000,
|
||||
"stop_throttle": 2000,
|
||||
"unknown_throttle": 2000,
|
||||
"global_throttle": 2000,
|
||||
|
||||
"stop_id": "abcdef1234",
|
||||
"pause_id": "567890abcd"
|
||||
|
31
jukebox/scripts.js
Normal file
31
jukebox/scripts.js
Normal file
@ -0,0 +1,31 @@
|
||||
"use strict";
|
||||
|
||||
const { execFile } = require('child_process');
|
||||
const glob = require('glob');
|
||||
const util = require('util');
|
||||
|
||||
const globPromise = util.promisify(glob);
|
||||
|
||||
class ScriptRunner {
|
||||
constructor(config) {
|
||||
this.config = config;
|
||||
}
|
||||
|
||||
find(tag) {
|
||||
return globPromise(this.config.script_path + '/**/' + tag + '*.sh').then(files => {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (files.length === 1) {
|
||||
execFile(files[0]);
|
||||
resolve(true);
|
||||
}
|
||||
resolve(false);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = function(config) {
|
||||
return new ScriptRunner(config);
|
||||
};
|
||||
|
||||
// vim:ts=2 sw=2 et:
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "pi-rfid-jukebox",
|
||||
"version": "1.0.1",
|
||||
"description": "",
|
||||
"version": "1.0.2",
|
||||
"description": "RFID Jukebox powered by Node.js and Python",
|
||||
"main": "player.js",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
18
player.js
18
player.js
@ -8,11 +8,15 @@ const library = require('./jukebox/library');
|
||||
const MediaLibraryFileBackend = require('./jukebox/library/file-backend')(config);
|
||||
const MediaLibrary = new library.Library(config, MediaLibraryFileBackend);
|
||||
|
||||
const ScriptRunner = require('./jukebox/scripts')(config);
|
||||
|
||||
const express = require('express');
|
||||
const morgan = require('morgan')
|
||||
|
||||
const { createLogger, format, transports } = require('winston');
|
||||
|
||||
const { throttle } = require('throttle-debounce');
|
||||
|
||||
var logger = createLogger({
|
||||
transports: [
|
||||
new transports.Console()
|
||||
@ -27,8 +31,6 @@ const play_log = require('./jukebox/library/play-log');
|
||||
|
||||
const PlayLog = new play_log.PlayLog();
|
||||
|
||||
MediaPlayer.throttle();
|
||||
|
||||
var app = express();
|
||||
var server = require('http').createServer();
|
||||
|
||||
@ -54,13 +56,23 @@ function exitHandler(options, err) {
|
||||
process.on('exit', exitHandler.bind(null));
|
||||
process.on('SIGINT', exitHandler.bind(null, {exit:true}));
|
||||
|
||||
const throttledTag = throttle(config.global_throttle, true, tag => {
|
||||
ScriptRunner.find(tag).then((fulfilled) => {
|
||||
if (false === fulfilled) {
|
||||
MediaLibrary.find(tag)
|
||||
}
|
||||
}).catch(err => {
|
||||
logger.error("got an error handling the tag: " + err);
|
||||
});
|
||||
});
|
||||
|
||||
TagReader.on('message', tag => {
|
||||
if (tag == 'E1' || tag == 'E2') {
|
||||
logger.debug("tagreader had rfid read error", { tag: tag });
|
||||
return;
|
||||
}
|
||||
logger.debug("got tag from tagreader", { tag: tag });
|
||||
MediaLibrary.find(tag);
|
||||
throttledTag(tag);
|
||||
});
|
||||
|
||||
if (config.debug) {
|
||||
|
Loading…
Reference in New Issue
Block a user