domotz-remote-pawn
Version:
Domotz Agent
79 lines (70 loc) • 2.54 kB
JavaScript
var jamDevicesFileManager = function (macListFile, myConsole) {
'use strict';
var fs = require('fs');
var previousMacAddresses = null;
var internetPauseAvailable = null;
var INTERNET_PAUSE_SUFFIX = ',internet-pause';
function listChanged(macAddresses) {
if (!previousMacAddresses) {
return true;
}
if (macAddresses.length !== previousMacAddresses.length) {
return true;
} else {
for (var i = macAddresses.length; i-- > 0; ) {
if (macAddresses[i] !== previousMacAddresses[i]) {
return true;
}
}
}
return false;
}
function writeFile(contents) {
myConsole.debug('Synchronously writing file %s', macListFile);
try {
fs.writeFileSync(macListFile, contents + '\n');
myConsole.debug('File written %s (%s)', macListFile, JSON.stringify(contents));
return contents.length > 0;
} catch (e) {
myConsole.error('Cannot write file %s, killing fing', macListFile);
return false;
}
}
function writeFileIfListChanged(macAddresses) {
/**
* Using the macAddresses list, writes its contents in the macListFile.
* @returns boolean true if the fing process should run after the update
*/
if (listChanged(macAddresses)) {
myConsole.info('Jammed device list changed');
} else {
return macAddresses.length > 0;
}
previousMacAddresses = macAddresses;
var contents = '';
if (internetPauseAvailable && macAddresses.length > 0) {
contents = macAddresses.join(INTERNET_PAUSE_SUFFIX + '\n') + INTERNET_PAUSE_SUFFIX;
} else {
contents = macAddresses.join('\n');
}
return writeFile(contents);
}
function setInternetPauseAvailable(value) {
myConsole.info('Setting internet pause availability as: %s', value);
internetPauseAvailable = value;
}
function isInternetPauseAvailable() {
/*
* returns null if the information is not available yet,
* true for versions >= 4.x, false otherwise
*
* */
return internetPauseAvailable;
}
return {
write: writeFileIfListChanged,
setInternetPauseAvailable: setInternetPauseAvailable,
isInternetPauseAvailable: isInternetPauseAvailable,
};
};
module.exports = jamDevicesFileManager;