take plugin class name from the plugin.xml to avoid class name guess work

Project: http://git-wip-us.apache.org/repos/asf/cordova-lib/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-lib/commit/1ae6a863
Tree: http://git-wip-us.apache.org/repos/asf/cordova-lib/tree/1ae6a863
Diff: http://git-wip-us.apache.org/repos/asf/cordova-lib/diff/1ae6a863

Branch: refs/heads/master
Commit: 1ae6a8631a92f58020c3b0139931d784843c281e
Parents: afde15c
Author: David Barth <david.ba...@canonical.com>
Authored: Tue Nov 3 18:13:49 2015 +0100
Committer: David Barth <david.ba...@canonical.com>
Committed: Tue Nov 3 18:13:49 2015 +0100

----------------------------------------------------------------------
 cordova-lib/src/plugman/platforms/ubuntu.js | 49 ++++++++++++++++++++----
 1 file changed, 41 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/1ae6a863/cordova-lib/src/plugman/platforms/ubuntu.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/plugman/platforms/ubuntu.js 
b/cordova-lib/src/plugman/platforms/ubuntu.js
index 78a2f04..0f6cee9 100644
--- a/cordova-lib/src/plugman/platforms/ubuntu.js
+++ b/cordova-lib/src/plugman/platforms/ubuntu.js
@@ -29,14 +29,47 @@ function toCamelCase(str) {
     }).join('');
 }
 
-function findClassName(str) {
+function getPluginXml(plugin_dir) {
+    var et = require('elementtree'),
+    fs = require('fs'),
+    shell = require('shelljs'),
+    path = require('path');
+
+    var pluginxml = undefined;
+    var config_path = path.join(plugin_dir, 'plugin.xml');
+
+    if (fs.existsSync(config_path)) {
+        // Get the current plugin.xml file
+        pluginxml = et.parse(fs.readFileSync(config_path, 'utf-8'));
+    }
+ 
+    return pluginxml;
+}
+
+function findClassName(pluginxml, plugin_id) {
     var class_name;
 
-    if (str.match(/\.[^.]+$/)) {
+    // first check if we have a class-name parameter in the plugin config
+    if (pluginxml) {
+       var platform = pluginxml.find("./platform/[@name='ubuntu']/");
+       if (platform) {
+           var param = 
platform.find("./config-file/[@target='config.xml']/feature/param/[@name='ubuntu-package']");
+           if (param && param.attrib) {
+               class_name = param.attrib.value;
+               return class_name;
+           }
+       }
+    }
+
+    // fallback to guess work, based on the plugin package name
+
+    if (plugin_id.match(/\.[^.]+$/)) {
         // old-style plugin name
-        class_name = str.match(/\.[^.]+$/)[0].substr(1);
+        class_name = plugin_id.match(/\.[^.]+$/)[0].substr(1);
+        class_name = toCamelCase(class_name);
     } else {
-        class_name = str.match(/cordova\-plugin\-([\w\-]+)$/)[0].substr(15);
+        class_name = 
plugin_id.match(/cordova\-plugin\-([\w\-]+)$/)[0].substr(15);
+        class_name = toCamelCase(class_name);
     }
 
     return class_name;
@@ -84,8 +117,9 @@ module.exports = {
             var src = String(fs.readFileSync(plugins));
 
             src = src.replace('INSERT_HEADER_HERE', '#include "plugins/' + 
plugin_id + '/' + path.basename(obj.src) +'"\nINSERT_HEADER_HERE');
-            var class_name = findClassName(plugin_id);
-            class_name = toCamelCase(class_name);
+
+            var pluginxml  = getPluginXml(plugin_dir);
+            var class_name = findClassName(pluginxml, plugin_id);
             src = src.replace('INSERT_PLUGIN_HERE', 'INIT_PLUGIN(' + 
class_name + ');INSERT_PLUGIN_HERE');
 
             fs.writeFileSync(plugins, src);
@@ -98,8 +132,7 @@ module.exports = {
             var src = String(fs.readFileSync(plugins));
 
             src = src.replace('#include "plugins/' + plugin_id + '/' + 
path.basename(obj.src) +'"', '');
-            var class_name = findClassName(plugin_id);
-            class_name = toCamelCase(class_name);
+            var class_name = findClassName(undefined, plugin_id);
             src = src.replace('INIT_PLUGIN(' + class_name + ');', '');
 
             fs.writeFileSync(plugins, src);


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cordova.apache.org
For additional commands, e-mail: commits-h...@cordova.apache.org

Reply via email to