silk-gui
Version:
GUI for developers and Node OS
136 lines (111 loc) • 3.04 kB
JavaScript
var methods = Silk.methods;
var defaults = {};
var djson = __dirname + "/settings/app-defaults.json";
var windows;
// load defaults from file
function loadDefaults() {
var fs = require("fs");
var fileName = djson;
fs.exists(fileName, function (exists) {
// TODO create file if it doesn't exist
if (!exists) {
fs.writeFileSync(djson, '{}')
}
fs.stat(fileName, function (err, stats) {
if (err) return console.log(err);
if (stats.isDirectory())
return;
fs.readFile(fileName, function (err, data) {
if (err) return;
var info = JSON.parse(data.toString("utf-8")),
item;
for (item in info) {
if (info[item].default == "") continue;
if (item in defaults) {
defaults[item].default = info[item].default;
} else {
defaults[item] = {};
defaults[item] = {
default: info[item].default,
available: []
};
}
}
})
});
});
}
// saves defaults in file
function saveDefaults() {
var fs = require("fs"),
path = djson,
contents = {},
item;
for (item in defaults) {
// TODO only save items that have a default
contents[item] = {};
contents[item].default = defaults[item].default;
contents[item].available = [];
}
contents = JSON.stringify(contents);
fs.writeFile(path, contents, function (err) {
if (err) return console.log(err);
console.log("saved: " + path);
});
}
function initialize(windows) {
for (var i = 0; i < windows.length; ++i) {
if (!("opens" in windows[i])) continue;
var opens = windows[i].opens;
//for each mime listed in windows
for (var x = 0; x < opens.length; ++x) {
if (opens[x] in defaults) {
// don't add duplicate apps
if (defaults[opens[x]].available.indexOf(windows[i].title) < 0) {
defaults[opens[x]].available.push(windows[i].title);
}
} else {
// create object for defaults
defaults[opens[x]] = {};
defaults[opens[x]] = {
default: "",
available: [windows[i].title]
};
}
}
}
loadDefaults();
//console.log(JSON.stringify(defaults, null, 4));
methods.add({
"Silk/appDefaults": function (mime) {
if (mime in defaults) {
return defaults[mime];
} else {
var ret = defaults["*"];
ret.mime = "*";
return ret
}
},
"Silk/setDefault": function (data) {
if (data.mime in defaults) {
defaults[data.mime].default = data.app;
} else {
defaults[data.mime] = {};
defaults[data.mime] = {
default: data.app,
available: []
};
}
saveDefaults();
}
});
}
// get windows from Server API and initialize
Silk.api.call('apps/list', {}, function (err, windows) {
if(err){
console.log(err);
console.log('unable to load app defaults');
return;
}
initialize(windows);
});