From 4ec05486965a62bcf171b1d51b116534a7a6ed9a Mon Sep 17 00:00:00 2001 From: Ruben Daniels Date: Thu, 16 Apr 2015 22:28:31 +0000 Subject: [PATCH] Have Cloud9 Bundles show up in the plugin manager --- plugins/c9.ide.plugins/debug.js | 189 +++++++++++------- plugins/c9.ide.plugins/manager.js | 4 + .../mock/c9.ide.example3/package.json | 4 +- 3 files changed, 118 insertions(+), 79 deletions(-) diff --git a/plugins/c9.ide.plugins/debug.js b/plugins/c9.ide.plugins/debug.js index 99da11a3..4d78cfeb 100644 --- a/plugins/c9.ide.plugins/debug.js +++ b/plugins/c9.ide.plugins/debug.js @@ -124,87 +124,105 @@ define(function(require, exports, module) { } var resourceHolder = new Plugin(); - // Fetch package.json - async.parallel([ - function(next){ - fs.readFile("~/.c9/plugins/" + name + "/package.json", function(err, data){ - if (err) - return next(err); - - try { - var options = JSON.parse(data); - if (!options.plugins) - throw new Error("Missing plugins property in package.json of " + name); - } - catch(e){ - return next(err); - } - - var host = vfs.baseUrl + "/"; - var base = join(String(c9.projectId), - "plugins", auth.accessToken); - - var pathConfig = {}; - - pathConfig["plugins/" + name] = host + join(base, name); - // Add the plugin to the config - Object.keys(options.plugins).forEach(function(path){ - var pluginPath = name + "/" + path; - - // Watch project path - watch("~/.c9/plugins/" + pluginPath); - var cfg = options.plugins[path]; - cfg.packagePath = "plugins/" + name + "/" + path; - cfg.staticPrefix = host + join(base, name); - cfg.apikey = "0000000000000000000000000000="; - - config.push(cfg); - }); - - requirejs.config({paths: pathConfig}); - - // Start the installer if one is included - if (options.installer) { - addStaticPlugin("installer", name, options.installer, - null, resourceHolder); - } - - next(); - }); - }, - function(next){ - var path = join(c9.home, "plugins", name); - var rePath = new RegExp("^" + util.escapeRegExp(path), "g"); - find.getFileList({ - path: path, - nocache: true, - buffer: true - }, function(err, data){ - if (err) - return next(err); - - - // Remove the base path - data = data.replace(rePath, ""); - - if (data.indexOf("/__installed__.js") !== -1) - return next("installed"); - - // Process all the submodules - var parallel = processModules(path, data, resourceHolder); - async.parallel(parallel, function(err, data){ + var resourceVersion = ""; + + resourceHolder.freezePublicAPI({ + get version(){ return resourceVersion }, + set version(v){ resourceVersion = v; } + }); + + var inited = false; + resourceHolder.on("load", function(){ + async.parallel([ + function(next){ + // Fetch package.json + fs.readFile("~/.c9/plugins/" + name + "/package.json", function(err, data){ if (err) return next(err); - // Done + try { + var options = JSON.parse(data); + if (!options.plugins) + throw new Error("Missing plugins property in package.json of " + name); + } + catch(e){ + return next(err); + } + + var host = vfs.baseUrl + "/"; + var base = join(String(c9.projectId), + "plugins", auth.accessToken); + + var pathConfig = {}; + + pathConfig["plugins/" + name] = host + join(base, name); + // Add the plugin to the config + Object.keys(options.plugins).forEach(function(path){ + var pluginPath = name + "/" + path; + + // Watch project path + watch("~/.c9/plugins/" + pluginPath); + var cfg = options.plugins[path]; + cfg.packagePath = "plugins/" + name + "/" + path; + cfg.staticPrefix = host + join(base, name); + cfg.apikey = "0000000000000000000000000000="; + + config.push(cfg); + }); + + requirejs.config({paths: pathConfig}); + + resourceHolder.version = options.version; + + // Start the installer if one is included + if (options.installer) { + addStaticPlugin("installer", name, options.installer, + null, resourceHolder); + } + next(); }); - }); - } - ], function(err, results){ - if (err) console.error(err); - next(); + }, + function(next){ + var path = join(c9.home, "plugins", name); + var rePath = new RegExp("^" + util.escapeRegExp(path), "g"); + find.getFileList({ + path: path, + nocache: true, + buffer: true + }, function(err, data){ + if (err) + return next(err); + + + // Remove the base path + data = data.replace(rePath, ""); + + if (data.indexOf("/__installed__.js") !== -1) + return next("installed"); + + // Process all the submodules + var parallel = processModules(path, data, resourceHolder); + async.parallel(parallel, function(err, data){ + if (err) + return next(err); + + // Done + next(); + }); + }); + } + ], function(err, results){ + if (err) console.error(err); + + if (!inited) { + next(); + inited = true; + } + }); }); + + resourceHolder.load("Cloud9 Bundle"); } function finish(){ @@ -260,7 +278,26 @@ define(function(require, exports, module) { function addStaticPlugin(type, pluginName, filename, data, plugin) { var services = architect.services; - var path = "plugins/" + pluginName + "/" + type + "/" + filename.replace(/\.js$/, ""); + var path = "plugins/" + pluginName + "/" + + (type == "installer" ? "" : type + "/") + + filename.replace(/\.js$/, ""); + + if (!services[plugin.name] && type !== "installer") { + services[plugin.name] = plugin; + architect.lut["~/.c9/plugins/" + pluginName] = { + provides: [] + }; + architect.pluginToPackage[plugin.name] = { + path: plugin.packagePath, + package: pluginName, + version: plugin.version, + isAdditionalMode: true + }; + if (!architect.packages[pluginName]) + architect.packages[pluginName] = []; + architect.packages[pluginName].push(name); + } + switch (type) { case "builders": data = util.safeParseJson(data, function() {}); diff --git a/plugins/c9.ide.plugins/manager.js b/plugins/c9.ide.plugins/manager.js index f75904ab..ae190189 100644 --- a/plugins/c9.ide.plugins/manager.js +++ b/plugins/c9.ide.plugins/manager.js @@ -134,6 +134,10 @@ define(function(require, exports, module) { } }), 210, plugin); }); + + ext.on("register", function(){ + reloadModel(); + }); } } diff --git a/plugins/c9.ide.plugins/mock/c9.ide.example3/package.json b/plugins/c9.ide.plugins/mock/c9.ide.example3/package.json index f2e46dca..324c2714 100644 --- a/plugins/c9.ide.plugins/mock/c9.ide.example3/package.json +++ b/plugins/c9.ide.plugins/mock/c9.ide.example3/package.json @@ -13,9 +13,7 @@ "type": "git", "url": "http://github.com/c9/newclient.git" }, - "plugins": { - "example": {} - }, + "plugins": {}, "installer": "install.js", "categories": [ "misc"