Prevent multiple simultanious recordings per camera
This commit is contained in:
parent
55fb51ae0c
commit
81e1c3de70
21
capture.js
21
capture.js
|
@ -3,6 +3,9 @@ var stream = require('stream');
|
||||||
var logger = require('./logger');
|
var logger = require('./logger');
|
||||||
|
|
||||||
|
|
||||||
|
var runningCams = {};
|
||||||
|
|
||||||
|
|
||||||
function runCommand(command, displayName, callback)
|
function runCommand(command, displayName, callback)
|
||||||
{
|
{
|
||||||
var wait = function()
|
var wait = function()
|
||||||
|
@ -83,11 +86,23 @@ module.exports =
|
||||||
|
|
||||||
start: function(camId, cam, now)
|
start: function(camId, cam, now)
|
||||||
{
|
{
|
||||||
|
if (runningCams[camId] === true)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
|
||||||
|
runningCams[camId] = true;
|
||||||
|
|
||||||
var processor = new (require('./processor-' + cam.processor))(camId, cam, now);
|
var processor = new (require('./processor-' + cam.processor))(camId, cam, now);
|
||||||
var duringCommandsDone = false;
|
var duringCommandsDone = false;
|
||||||
var queueAfterCommand = false;
|
var queueAfterCommand = false;
|
||||||
|
|
||||||
|
|
||||||
|
var unlockCam = function()
|
||||||
|
{
|
||||||
|
runningCams[camId] = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
runCommands(cam.before, 'before', function()
|
runCommands(cam.before, 'before', function()
|
||||||
{
|
{
|
||||||
processor.on('start', function()
|
processor.on('start', function()
|
||||||
|
@ -97,7 +112,7 @@ module.exports =
|
||||||
// Check if the processor has already finished and the
|
// Check if the processor has already finished and the
|
||||||
// 'after' commands should be run immediately.
|
// 'after' commands should be run immediately.
|
||||||
if (queueAfterCommand)
|
if (queueAfterCommand)
|
||||||
runCommands(cam.after, 'after', function() { });
|
runCommands(cam.after, 'after', unlockCam);
|
||||||
else
|
else
|
||||||
duringCommandsDone = true;
|
duringCommandsDone = true;
|
||||||
});
|
});
|
||||||
|
@ -109,12 +124,14 @@ module.exports =
|
||||||
// to be less than the duration of the 'during' commands,
|
// to be less than the duration of the 'during' commands,
|
||||||
// queue it up.
|
// queue it up.
|
||||||
if (duringCommandsDone)
|
if (duringCommandsDone)
|
||||||
runCommands(cam.after, 'after', function() { });
|
runCommands(cam.after, 'after', unlockCam);
|
||||||
else
|
else
|
||||||
queueAfterCommand = true;
|
queueAfterCommand = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
processor.run();
|
processor.run();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
20
index.js
20
index.js
|
@ -102,17 +102,24 @@ app.get('/capture', function(req, res)
|
||||||
{
|
{
|
||||||
var now = moment();
|
var now = moment();
|
||||||
var cams = [];
|
var cams = [];
|
||||||
|
var alreadyRunning = [];
|
||||||
|
|
||||||
for (var camId in config.cams)
|
for (var camId in config.cams)
|
||||||
{
|
{
|
||||||
if (config.cams.hasOwnProperty(camId))
|
if (config.cams.hasOwnProperty(camId))
|
||||||
{
|
{
|
||||||
cams.push(camId);
|
if (capture.start(camId, config.cams[camId], now))
|
||||||
capture.start(camId, config.cams[camId], now);
|
cams.push(camId);
|
||||||
|
else
|
||||||
|
alreadyRunning.push(camId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.info('Started capture for: ' + cams.join(', '));
|
if (cams.length > 0)
|
||||||
|
logger.info('Started capture for: ' + cams.join(', '));
|
||||||
|
|
||||||
|
if (alreadyRunning.length > 0)
|
||||||
|
logger.info('Capture already running for: ' + alreadyRunning.join(', '));
|
||||||
|
|
||||||
res.send(JSON.stringify(cams));
|
res.send(JSON.stringify(cams));
|
||||||
}
|
}
|
||||||
|
@ -131,9 +138,12 @@ app.get('/capture/:camId', function(req, res)
|
||||||
|
|
||||||
if (config.cams.hasOwnProperty(camId))
|
if (config.cams.hasOwnProperty(camId))
|
||||||
{
|
{
|
||||||
capture.start(camId, config.cams[camId], moment());
|
if (capture.start(camId, config.cams[camId], moment()))
|
||||||
|
logger.info('Started capture for: ' + camId);
|
||||||
|
else
|
||||||
|
logger.info('Capture already running for: ' + camId);
|
||||||
|
|
||||||
|
|
||||||
logger.info('Started capture for: ' + camId);
|
|
||||||
res.send(JSON.stringify([camId]));
|
res.send(JSON.stringify([camId]));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue