UNPKG

silk-gui

Version:

GUI for developers and Node OS

137 lines (117 loc) 3.7 kB
var express = require('express'); var appLoader = require(__dirname + '/app_loader.js'), db = require(__root + '/core/db.js'), methods = require(__dirname + "/ws2fork_com.js"), log = require('../console.js').log, apiData = require('../api_data.js'), connId = 0, apps; // get list of external apps; var externalApps = db.collection("external_apps"); function loadExternalApps(app) { function externalApp(item) { log.debug('loading external app ' + item.path); appLoader.add(item.path, app, function (err, data) { if(err) { console.log('error loading app'); console.log(err); } }); } externalApps.find() .toArray(function (err, docs) { if(err) { // the setting folder doesn't exist if(err.code === 'ENOENT') { var settingsDir = process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE; settingsDir += "/.silk-gui"; console.log('creating settings folder at ' + settingsDir); var mkdirp = require('mkdirp'); mkdirp.sync(settingsDir + '/core/database'); // try again return loadExternalApps(); } console.trace('err with external list', err); return; } //console.dir(docs); for (var i = 0; i < docs.length; ++i) { externalApp(docs[i]); } }); } module.exports = function (app, wss, next) { // external apps loadExternalApps(app); //internal apps appLoader.compileFolder(__root + '/apps', app, function (err) { next(err, appLoader.clean); }); apiData.set("apps/list", appLoader.apps); apiData.set('apps/clean', appLoader.clean); apiData.set('apps/add', appLoader.add); appLoader.on("added", function (app) { apiData.set('apps/clean', appLoader.clean); apiData.set('apps/list', appLoader.apps); if(app.state === 'running' || app.state === 'starting') { // methods.addFork(app.fork); return; } else { app.once('ready', function (err) { if(err) { console.log(err); return; } // methods.addFork(app.fork); }); } }); appLoader.on('change', function (app) { if(app.state === 'running' || app.state === 'starting') { methods.addFork(app.fork); } apiData.set('apps/clean', appLoader.clean); apiData.set('apps/list', appLoader.apps); }); wss.on('connection', function (conn) { conn.id = connId++; log.debug("connected"); conn.on('data', function (message) { log.debug("websocket message: " + message); methods.call(conn, message); }); }); }; // load window manager as an app module.exports.startWindowManager = function (path, expressApp, callback) { // check if path is local or a github repository var localPath = false; if(path.indexOf('/') === 0) { localPath = true; } else if(path.indexOf('./') === 0) { localPath = true; } else if(path.indexOf('../') === 0) { localPath = true; } else if(path.indexOf('~/') === 0) { localPath = true; } if(localPath === false) { //TODO: setup should install window manager in a subfolder that is name@githubUser path = __root + '/window-manager'; } else { console.log('Loading window manager from ' + path); } var app = new appLoader.App(path, expressApp, '/'); app.init({ createRouter: false }, function (e, d) { expressApp.use(express.static(path + "/public")); expressApp.get('/', function (req, res) { res.sendFile(path + "/public/index.html"); }); app.start(function (e, d) { methods.addFork(app.fork); callback(e, d); }); }); };