silk-gui
Version:
GUI for developers and Node OS
116 lines (107 loc) • 3.14 kB
JavaScript
/**
* @file setups up Silk if it is a fresh install or didn't finish last time it was started
*/
var async = require('async'),
fs = require('fs'),
jsonFile = require('json-file'),
ghDownload = require('download-github-repo'),
retry = [],
path = require('path');
var __root = path.resolve(__dirname, '../../');
// load settings or create if it doesn't exist
try {
var data = jsonFile.read(__root + '/core/settings/setup.json');
} catch (e) {
fs.writeFileSync(__root + '/core/settings/setup.json', '{"done" : false}');
var data = jsonFile.read(__root + '/core/settings/setup.json');
}
function installWM(repo, cb) {
console.log('installing the window manager');
var options = {
username: repo.split('/')[0],
repo: repo.split('/')[1],
output: __root + '/window-manager/'
};
ghDownload(repo, __root + '/window-manager', function(err) {
console.log('finished');
console.log(err);
return cb(err);
});
}
function installApps(list, cb) {
console.log('installing apps into ' + __root + '/apps/');
async.eachSeries(list, function(item, next) {
console.log('installing ', item);
var options = {
username: item.split('/')[0],
repo: item.split('/')[1],
output: __root + '/apps/' + item.replace('/', '-')
};
ghDownload(item, __root + '/apps/' + item.replace('/', '-'), function(err) {
if(!err){
console.log('finished');
}
return next(err);
});
}, function(err, result) {
if (err) {
console.log('error installing apps');
return cb(err);
}
console.log('finished installing apps');
data.set('done', true);
data.writeSync();
cb(err);
});
}
/**
* Installs apps listed in setup.json into app folder
*/
module.exports = function(cb) {
cb = cb || function() {};
var list;
console.log('setting up');
data.writeSync();
// get list of apps
try {
list = fs.readFileSync(__root + '/config.json');
list = JSON.parse(list);
} catch (e) {
return cb(e);
}
installWM(list.windowManager, function(err) {
if(err) {
return cb(err);
}
console.log('installing apps');
installApps(list.apps, function(err){
return cb(err);
});
});
};
/**
* @returns {boolean} if the setup is done
*/
module.exports.ready = function() {
return data.get('done');
};
if(module.parent === null) {
// run with npm run setup[-force]
if(module.exports.ready() === true) {
console.log('Silk is already setup.');
if(process.argv[2] !== "--force") {
return console.log('Use "npm run setup-force" to setup again');
}
// force is so we can continue
console.log('Ran with --force. Continueing ...');
}
module.exports(function (err) {
if(err) {
console.log('error setting up silk: ', err);
console.log('please report this at https://github.com/Silk-GUI/Silk/issues');
// throwing so prepublish script cancels publishing
throw err;
}
console.log('finished setting up!');
});
}