67 lines
2.0 KiB
JavaScript
67 lines
2.0 KiB
JavaScript
/* jslint node: true */
|
|
'use strict';
|
|
|
|
const Config = require('./config.js').get;
|
|
const ConfigCache = require('./config_cache.js');
|
|
const Events = require('./events.js');
|
|
|
|
// deps
|
|
const paths = require('path');
|
|
const async = require('async');
|
|
|
|
exports.init = init;
|
|
exports.getFullConfig = getFullConfig;
|
|
|
|
function getConfigPath(filePath) {
|
|
// |filePath| is assumed to be in the config path if it's only a file name
|
|
if('.' === paths.dirname(filePath)) {
|
|
filePath = paths.join(Config().paths.config, filePath);
|
|
}
|
|
return filePath;
|
|
}
|
|
|
|
function init(cb) {
|
|
// pre-cache menu.hjson and prompt.hjson + establish events
|
|
const changed = ( { fileName, fileRoot } ) => {
|
|
const reCachedPath = paths.join(fileRoot, fileName);
|
|
if(reCachedPath === getConfigPath(Config().general.menuFile)) {
|
|
Events.emit(Events.getSystemEvents().MenusChanged);
|
|
} else if(reCachedPath === getConfigPath(Config().general.promptFile)) {
|
|
Events.emit(Events.getSystemEvents().PromptsChanged);
|
|
}
|
|
};
|
|
|
|
const config = Config();
|
|
async.series(
|
|
[
|
|
function menu(callback) {
|
|
return ConfigCache.getConfigWithOptions(
|
|
{
|
|
filePath : getConfigPath(config.general.menuFile),
|
|
callback : changed,
|
|
},
|
|
callback
|
|
);
|
|
},
|
|
function prompt(callback) {
|
|
return ConfigCache.getConfigWithOptions(
|
|
{
|
|
filePath : getConfigPath(config.general.promptFile),
|
|
callback : changed,
|
|
},
|
|
callback
|
|
);
|
|
}
|
|
],
|
|
err => {
|
|
return cb(err);
|
|
}
|
|
);
|
|
}
|
|
|
|
function getFullConfig(filePath, cb) {
|
|
ConfigCache.getConfig(getConfigPath(filePath), (err, config) => {
|
|
return cb(err, config);
|
|
});
|
|
}
|