var log = require('hlogger').createLogger('loader'); var path = require('path'); var fs = require('fs'); var clitable = require('./clitable'); var loaderActivator = { start(context) { this.context = context; this.manager = context.manager; this.runPath = context.manager.config.runPath; if(!this.runPath ) { log.warn("There is no runPath configured in manager"); return; } context.on('hci-installer:installed',() => { this.loadBundles(); }); this.registerShell(context); }, loadBundles() { var mods = fs.readdirSync(this.runPath); for(var v of mods) { var modPath = path.join(this.runPath , v); this.startPlugin(modPath); } }, startPlugin(plugPath) { var dirparts = path.basename(plugPath).split(path.sep); var dirname = dirparts[dirparts.length-1]; //var plugInfo = require(path.join(plugPath , "package.json")); var plugName = dirname; this.manager.register({name:plugName, bundle:plugPath}); }, registerShell(context) { var prefix = context.prefix(".*:cmd"); prefix.on('lb',(args) => { var tbl = []; for(var k in context.manager.registry) { var v = context.manager.registry[k]; if(v == undefined) { continue; } var modPath = v.modulePath; if(modPath) { modPath = modPath.replace(new RegExp("^" + process.env.PWD + "/"),""); } tbl.push({ id: v.id, name:v.name, state: v.info.state, package: (v.info.pkgInfo)?v.info.pkgInfo.name:"", version: (v.info.pkgInfo)?v.info.pkgInfo.version:"", author: (v.info.pkgInfo)?v.info.pkgInfo.author.name:"", modulePath: modPath, }); } tbl = tbl.sort((a,b) => { return a.id - b.id}); log.info("\n"+clitable(tbl)); }); prefix.on('stop',(args) => { if(args.length < 2) { log.error("Not enough parameters"); return; } var bcontext = context.manager.get(args[1]); if(bcontext == null) { log.error("Bundle not found"); return; } bcontext.stop(); }); prefix.on('start',(args) => { if(args.length < 2) { log.error("Not enough parameters"); return; } var bcontext = context.manager.get(args[1]); if(bcontext == null) { log.error("Bundle not found"); return; } bcontext.start(); }); prefix.on('reload',(args) => { if(args.length < 2) { log.error("Not enough parameters"); return; } var bcontext = context.manager.get(args[1]); if(bcontext == null) { log.error("Bundle not found"); return; } var modulePath = bcontext.modulePath; context.manager.unregister(bcontext); context.manager.register({id:bcontext.id, name:bcontext.name, bundle:bcontext.modulePath}); }); prefix.on('unload',(args) => { if(args.length < 2) { log.error("Not enough parameters"); return; } var bcontext = context.manager.get(args[1]); if(bcontext == null) { log.error("Bundle not found"); return; } var modulePath = bcontext.modulePath; context.manager.unregister(bcontext); }); prefix.on('load',(args) => { if(args.length < 2) { log.error("Not enough parameters"); return; } log.info("Loading module from: " + process.env.PWD); context.manager.load(process.env.PWD + "/" + args[1]); //context.manager.register({name:args[1], bundle:path.resolve(path.join(process.env.PWD, args[2]))}); }); } }; module.exports.bundleActivator = loaderActivator;