]> git.donarmstrong.com Git - dactyl.git/blobdiff - common/components/commandline-handler.js
Import 1.0rc1 supporting Firefox up to 11.*
[dactyl.git] / common / components / commandline-handler.js
index 918d7bf300b8980c2d0d50e676f7c29224467b89..0fd118958e77d4b873c26ed3e8da0b65f6152f9e 100644 (file)
@@ -11,37 +11,72 @@ function reportError(e) {
 
 var global = this;
 var NAME = "command-line-handler";
-var Cc = Components.classes;
-var Ci = Components.interfaces;
-var Cu = Components.utils;
+var { classes: Cc, interfaces: Ci, utils: Cu } = Components;
 
 Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
 
+function init() {
+    Cu.import("resource://dactyl/bootstrap.jsm");
+    if (!JSMLoader.initialized)
+        JSMLoader.init();
+    JSMLoader.load("base.jsm", global);
+    require(global, "config");
+    require(global, "util");
+}
+
 function CommandLineHandler() {
     this.wrappedJSObject = this;
-
-    Cu.import("resource://dactyl/base.jsm");
-    require(global, "util");
-    require(global, "config");
 }
 CommandLineHandler.prototype = {
 
-    classDescription: "Dactyl Command-line Handler",
+    classDescription: "Dactyl command line Handler",
 
     classID: Components.ID("{16dc34f7-6d22-4aa4-a67f-2921fb5dcb69}"),
 
     contractID: "@mozilla.org/commandlinehandler/general-startup;1?type=dactyl",
 
-    _xpcom_categories: [{
-        category: "command-line-handler",
-        entry: "m-dactyl"
-    }],
+    _xpcom_categories: [
+        {
+            category: "command-line-handler",
+            entry: "m-dactyl"
+        },
 
-    QueryInterface: XPCOMUtils.generateQI([Components.interfaces.nsICommandLineHandler]),
+        // FIXME: Belongs elsewhere
+         {
+            category: "profile-after-change",
+            entry: "m-dactyl"
+        }
+    ],
+
+    observe: function observe(subject, topic, data) {
+        if (topic === "profile-after-change") {
+            init();
+            require(global, "main");
+        }
+    },
+
+    QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver, Ci.nsICommandLineHandler]),
 
     handle: function (commandLine) {
+        init();
+        try {
+            var remote = commandLine.handleFlagWithParam(config.name + "-remote", false);
+        }
+        catch (e) {
+            util.dump("option '-" + config.name + "-remote' requires an argument\n");
+        }
+
+        try {
+            if (remote) {
+                commandLine.preventDefault = true;
+                require(global, "services");
+                util.dactyl.execute(remote);
+            }
+        }
+        catch(e) {
+            util.reportError(e)
+        };
 
-        // TODO: handle remote launches differently?
         try {
             this.optionValue = commandLine.handleFlagWithParam(config.name, false);
         }