/**
* GPII SettingsDir.js
*
* Determines the user's settings directory on a variety of platforms,
* and manages establishment of a subdirectory "/gpii" to hold writable files
* for the system's journal and other purposes
*
* Copyright 2016 Raising the Floor - International
*
* Licensed under the New BSD license. You may not use this file except in
* compliance with this License.
*
*/
"use strict";
var fluid = require("infusion"),
gpii = fluid.registerNamespace("gpii"),
os = require("os"),
fs = require("fs");
fluid.defaults("gpii.settingsDir", {
gradeNames: ["fluid.component", "fluid.contextAware"],
contextAwareness: {
platform: {
checks: {
test: {
contextValue: "{gpii.contexts.test}",
gradeNames: "gpii.settingsDir.temp",
priority: "first"
},
windows: {
contextValue: "{gpii.contexts.windows}",
gradeNames: "gpii.settingsDir.windows"
},
linux: {
contextValue: "{gpii.contexts.linux}",
gradeNames: "gpii.settingsDir.standard"
}
},
defaultGradeNames: "gpii.settingsDir.temp"
}
},
members: {
gpiiSettingsDir: "@expand:{that}.getGpiiSettingsDir()"
},
invokers: {
getGpiiSettingsDir: "gpii.settingsDir.gpii({that}.getBaseSettingsDir)",
getBaseSettingsDir: "fluid.notImplemented"
},
listeners: {
"onCreate.createGpiiDir": "gpii.settingsDir.createGpii"
}
});
fluid.defaults("gpii.settingsDir.temp", {
invokers: {
getBaseSettingsDir: "gpii.settingsDir.baseDir.temp"
}
});
fluid.defaults("gpii.settingsDir.windows", {
invokers: {
getBaseSettingsDir: "gpii.settingsDir.baseDir.windows"
}
});
fluid.defaults("gpii.settingsDir.standard", {
invokers: {
getBaseSettingsDir: "gpii.settingsDir.baseDir.standard"
}
});
gpii.settingsDir.createGpii = function (that) {
fluid.log(fluid.logLevel.WARN, "Creating GPII settings directory in ", that.gpiiSettingsDir);
try { // See code skeleton in http://stackoverflow.com/questions/13696148/node-js-create-folder-or-use-existing
fs.mkdirSync(that.gpiiSettingsDir);
} catch (e) {
Iif (e.code !== "EEXIST") {
fluid.fail("Unable to create GPII settings directory, code is " + e.code + ": exception ", e);
}
}
};
gpii.settingsDir.gpii = function (getBaseSettingsDir) {
return getBaseSettingsDir() + "/gpii";
};
fluid.registerNamespace("gpii.settingsDir.baseDir");
gpii.settingsDir.baseDir.windows = function () {
return process.env.APPDATA;
};
gpii.settingsDir.baseDir.standard = function () {
return os.homedir();
};
gpii.settingsDir.baseDir.temp = function () {
return os.tmpdir();
};
|