You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by ag...@apache.org on 2014/10/25 03:26:29 UTC

[11/17] git commit: Change config.xml-derived properties in installer into getters

Change config.xml-derived properties in installer into getters


Project: http://git-wip-us.apache.org/repos/asf/cordova-app-harness/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-app-harness/commit/c7bb0ef1
Tree: http://git-wip-us.apache.org/repos/asf/cordova-app-harness/tree/c7bb0ef1
Diff: http://git-wip-us.apache.org/repos/asf/cordova-app-harness/diff/c7bb0ef1

Branch: refs/heads/master
Commit: c7bb0ef1cdbb2ca63eb239458c60491beb4dead4
Parents: 9f5a427
Author: Andrew Grieve <ag...@chromium.org>
Authored: Fri Oct 3 12:56:08 2014 -0400
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Fri Oct 24 21:26:07 2014 -0400

----------------------------------------------------------------------
 www/cdvah/js/Installer.js      | 102 +++++++++++++++++++++++++++---------
 www/cdvah/views/inappmenu.html |   2 +-
 www/cdvah/views/list.html      |   3 +-
 3 files changed, 80 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-app-harness/blob/c7bb0ef1/www/cdvah/js/Installer.js
----------------------------------------------------------------------
diff --git a/www/cdvah/js/Installer.js b/www/cdvah/js/Installer.js
index 44d5d07..fb00d07 100644
--- a/www/cdvah/js/Installer.js
+++ b/www/cdvah/js/Installer.js
@@ -28,13 +28,11 @@
         Installer.prototype.init = function(installPath, /* optional */ appId) {
             var ret = this;
             ret.appType = ret.constructor.type;
-            ret.updatingStatus = null;
+            ret.appId = appId || 'default'; // Stored in apps.json. May be different from id within config.xml.
             ret.lastUpdated = null;
-            // Asset manifest is a cache of what files have been downloaded along with their etags.
-            ret.appId = null; // Read from config.xml
-            ret.appName = null; // Read from config.xml
-            ret.iconURL = null; // Read from config.xml
-            ret.startPage = null; // Read from config.xml
+            // Derived values:
+            ret.updatingStatus = null;
+            ret.configXmlDom = null; // Read from config.xml
             ret.plugins = {}; // Read from orig-cordova_plugins.js
             ret.appId = appId;
             ret.directoryManager = new DirectoryManager();
@@ -50,7 +48,7 @@
             return this.init(json['installPath'], json['appId'])
             .then(function(ret) {
                 ret.lastUpdated = json['lastUpdated'] && new Date(json['lastUpdated']);
-                return self.readConfigXml();
+                return self.readConfigXml_();
             });
         };
 
@@ -63,27 +61,77 @@
             };
         };
 
-        Installer.prototype.readConfigXml = function() {
+        Installer.prototype.readConfigXml_ = function() {
             var self = this;
             return ResourcesLoader.readFileContents(this.directoryManager.rootURL + 'config.xml')
             .then(function(configStr) {
-                function lastEl(els) {
-                    return els[els.length - 1];
-                }
-                var xmlDoc = new DOMParser().parseFromString(configStr, 'text/xml');
-                self.appId = xmlDoc.firstChild.getAttribute('id');
-                var el = lastEl(xmlDoc.getElementsByTagName('content'));
-                self.startPage = el ? el.getAttribute('src') : 'index.html';
-                el = lastEl(xmlDoc.getElementsByTagName('icon'));
-                self.iconURL = el ? el.getAttribute('src') : null;
-                if (self.iconURL) {
-                    self.iconURL = self.directoryManager.rootURL + self.iconURL;
-                }
-                el = lastEl(xmlDoc.getElementsByTagName('name'));
-                self.appName = el ? el.textContent : null;
+                self.configXmlDom = new DOMParser().parseFromString(configStr, 'text/xml');
             });
         };
 
+        function lastEl(els) {
+            return els[els.length - 1];
+        }
+
+        Installer.prototype.getAppName = function() {
+            if (!this.configXmlDom) {
+                return '';
+            }
+            var el = lastEl(this.configXmlDom.getElementsByTagName('name'));
+            return el && el.textContent;
+        };
+
+        Installer.prototype.getIconUrl = function() {
+            if (!this.configXmlDom) {
+                return '';
+            }
+            var el = lastEl(this.configXmlDom.getElementsByTagName('icon'));
+            var ret = el && el.getAttribute('src');
+            // Don't set icon until the file exists.
+            if (!ret || !this.directoryManager.getAssetEtag(ret)) {
+                return '';
+            }
+            ret = this.directoryManager.rootURL + ret;
+            return ret;
+        };
+
+        Installer.prototype.getStartPage = function() {
+            var el = lastEl(this.configXmlDom.getElementsByTagName('content'));
+            var ret = el ? el.getAttribute('src') : 'index.html';
+            return ret;
+        };
+
+        Installer.prototype.getVersion = function() {
+            if (!this.configXmlDom) {
+                return '';
+            }
+            var widgetEl = this.configXmlDom.lastChild;
+            return widgetEl.getAttribute('version');
+        };
+
+        Installer.prototype.getConfigXmlId = function() {
+            if (!this.configXmlDom) {
+                return '';
+            }
+            var widgetEl = this.configXmlDom.lastChild;
+            return widgetEl.getAttribute('id');
+        };
+
+        Installer.prototype.getAndroidVersionCode = function() {
+            // copied from android_parser.js
+            function defaultVersionCode(version) {
+                var nums = version.split('-')[0].split('.').map(Number);
+                var versionCode = nums[0] * 10000 + nums[1] * 100 + nums[2];
+                return versionCode;
+            }
+
+            var versionCode = this.configXmlDom.lastChild.getAttribute('android-versionCode');
+            if (versionCode) {
+                return +versionCode;
+            }
+            return defaultVersionCode(this.getVersion() || '0.0.1');
+        };
+
         Installer.prototype.updateCordovaPluginsFile = function(etag) {
             var self = this;
             return $q.when(self.getPluginMetadata())
@@ -97,7 +145,7 @@
 
         Installer.prototype.onFileAdded = function(path) {
             if (path == 'config.xml') {
-                return this.readConfigXml();
+                return this.readConfigXml_();
             }
         };
 
@@ -118,14 +166,18 @@
             return $q.when();
         };
 
+        Installer.prototype.getWwwDir = function() {
+            return this.directoryManager.rootURL + 'www/';
+        };
+
         Installer.prototype.launch = function() {
             var self = this;
             return $q.when(this._prepareForLaunch())
             .then(function() {
                 var urlutil = cordova.require('cordova/urlutil');
                 var harnessWwwUrl = urlutil.makeAbsolute(location.pathname).replace(/\/[^\/]*\/[^\/]*$/, '/');
-                var appWwwUrl = self.directoryManager.rootURL + 'www/';
-                var startLocation = urlutil.makeAbsolute(self.startPage).replace('/cdvah/', '/');
+                var appWwwUrl = self.getWwwDir();
+                var startLocation = urlutil.makeAbsolute(self.getStartPage()).replace('/cdvah/', '/');
                 var realStartLocation = startLocation.replace(harnessWwwUrl, appWwwUrl);
                 var useRemapper = platformId == 'android';
 

http://git-wip-us.apache.org/repos/asf/cordova-app-harness/blob/c7bb0ef1/www/cdvah/views/inappmenu.html
----------------------------------------------------------------------
diff --git a/www/cdvah/views/inappmenu.html b/www/cdvah/views/inappmenu.html
index 2b0fd4c..c520b23 100644
--- a/www/cdvah/views/inappmenu.html
+++ b/www/cdvah/views/inappmenu.html
@@ -17,7 +17,7 @@
   under the License.
 -->
 <div class="in-app-menu-container">
-  <h1>{{app.appName || app.appId}}</h1>
+  <h1>{{app.getAppName() || app.getConfigXmlId() || app.appId}}</h1>
   <button ng-click="restartApp()">Restart App</button><br>
   <button ng-click="quitApp()">Quit App</button>
 </div>

http://git-wip-us.apache.org/repos/asf/cordova-app-harness/blob/c7bb0ef1/www/cdvah/views/list.html
----------------------------------------------------------------------
diff --git a/www/cdvah/views/list.html b/www/cdvah/views/list.html
index ac4c1df..7d74ad2 100644
--- a/www/cdvah/views/list.html
+++ b/www/cdvah/views/list.html
@@ -23,7 +23,7 @@
     <h3 class="topcoat-list__header">Installed Apps</h3>
     <ul class="topcoat-list">
         <li class="topcoat-list__item" ng-repeat="app in appList">
-            <div>{{app.appId}}</div>
+            <div>{{app.getAppName() || app.getConfigXmlId() || app.appId}}</div>
             <div ng-show="app.updatingStatus === null">Last updated: <span am-time-ago="app.lastUpdated"></span></div>
             <div ng-show="app.updatingStatus !== null">Update in progress: {{app.updatingStatus}}%</div>
             <div ng-show="app.plugins.missing.length + app.plugins.newer.length + app.plugins.older.length > 0">
@@ -39,6 +39,7 @@
             <button ng-click="showDetails($index)">Details</button>
         </li>
     </ul>
+  </div>
 </div>
 
 


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