Repository: cordova-plugin-geolocation
Updated Branches:
  refs/heads/master 4ab4d3a57 -> a6da270a0


CB-10574: MobileSpec can't get results for WP8.1 Builds

MobileSpec can't get results for WP8.1 Builds


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation/commit/a6da270a
Tree: 
http://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation/tree/a6da270a
Diff: 
http://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation/diff/a6da270a

Branch: refs/heads/master
Commit: a6da270a0bb8d6c83911d8d559c1bb37abe7bbcc
Parents: 4ab4d3a
Author: Sarangan Rajamanickam <[email protected]>
Authored: Thu Feb 11 16:19:04 2016 -0800
Committer: Sarangan Rajamanickam <[email protected]>
Committed: Fri Feb 12 20:22:28 2016 -0800

----------------------------------------------------------------------
 src/windows/GeolocationProxy.js | 75 ++++++++++++++++++------------------
 1 file changed, 37 insertions(+), 38 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation/blob/a6da270a/src/windows/GeolocationProxy.js
----------------------------------------------------------------------
diff --git a/src/windows/GeolocationProxy.js b/src/windows/GeolocationProxy.js
index f6188bc..9670e4f 100644
--- a/src/windows/GeolocationProxy.js
+++ b/src/windows/GeolocationProxy.js
@@ -14,47 +14,43 @@
  * limitations under the License.
  */
 
-var PositionError = require('./PositionError'),
-    ids = {},
-    loc;
+var PositionError   = require('./PositionError');
+var callbacks       = {};
+var locs            = {};
 
-function ensureLocator() {
+function ensureAndCreateLocator() {
     var deferral;
 
-    if (!loc) {
-        loc = new Windows.Devices.Geolocation.Geolocator();
+    loc = new Windows.Devices.Geolocation.Geolocator();
 
-        if (typeof Windows.Devices.Geolocation.Geolocator.requestAccessAsync 
=== 'function') {
-            deferral = 
Windows.Devices.Geolocation.Geolocator.requestAccessAsync().then(function 
(result) {
-                if (result === 
Windows.Devices.Geolocation.GeolocationAccessStatus.allowed) {
-                    return loc;
-                }
+    if (typeof Windows.Devices.Geolocation.Geolocator.requestAccessAsync === 
'function') {
+        deferral = 
Windows.Devices.Geolocation.Geolocator.requestAccessAsync().then(function 
(result) {
+            if (result === 
Windows.Devices.Geolocation.GeolocationAccessStatus.allowed) {
+                return loc;
+            }
 
-                return WinJS.Promise.wrapError({
-                    code: PositionError.PERMISSION_DENIED,
-                    message: 'Geolocation access has not been allowed by user.'
-                });
+            return WinJS.Promise.wrapError({
+                code: PositionError.PERMISSION_DENIED,
+                message: 'Geolocation access has not been allowed by user.'
             });
-        } else {
-            deferral = WinJS.Promise.wrap(loc);
-        }
+        });
     } else {
         deferral = WinJS.Promise.wrap(loc);
-    }    
+    }
 
     return deferral;
 }
 
-function createErrorCode() {
+function createErrorCode(loc) {
     switch (loc.locationStatus) {
         case Windows.Devices.Geolocation.PositionStatus.initializing:
             // This status indicates that a location device is still 
initializing
         case Windows.Devices.Geolocation.PositionStatus.noData:
-            // No location data is currently available 
+            // No location data is currently available
         case Windows.Devices.Geolocation.PositionStatus.notInitialized:
             // This status indicates that the app has not yet requested
-            // location data by calling GetGeolocationAsync() or 
-            // registering an event handler for the positionChanged event. 
+            // location data by calling GetGeolocationAsync() or
+            // registering an event handler for the positionChanged event.
         case Windows.Devices.Geolocation.PositionStatus.notAvailable:
             // Location is not available on this version of Windows
             return PositionError.POSITION_UNAVAILABLE;
@@ -76,7 +72,7 @@ function createResult(pos) {
         altitudeAccuracy: pos.coordinate.altitudeAccuracy,
         timestamp: pos.coordinate.timestamp
     };
-    
+
     if (pos.coordinate.point) {
         res.latitude = pos.coordinate.point.position.latitude;
         res.longitude = pos.coordinate.point.position.longitude;
@@ -86,13 +82,13 @@ function createResult(pos) {
         res.longitude = pos.coordinate.longitude;
         res.altitude = pos.coordinate.altitude;
     }
-    
+
     return res;
 }
 
 module.exports = {
     getLocation: function (success, fail, args, env) {
-        ensureLocator().done(function () {
+        ensureAndCreateLocator().done(function (loc) {
             if (loc) {
                 var highAccuracy = args[0],
                     maxAge = args[1];
@@ -109,7 +105,7 @@ module.exports = {
                     },
                     function (err) {
                         fail({
-                            code: createErrorCode(),
+                            code: createErrorCode(loc),
                             message: err.message
                         });
                     }
@@ -125,9 +121,9 @@ module.exports = {
     },
 
     addWatch: function (success, fail, args, env) {
-        ensureLocator().done(function () {
-            var clientId = args[0],
-            highAccuracy = args[1],
+        ensureAndCreateLocator().done(function (loc) {
+            var clientId = args[0];
+            var highAccuracy = args[1];
 
             onPositionChanged = function (e) {
                 success(createResult(e.position), { keepCallback: true });
@@ -172,19 +168,22 @@ module.exports = {
             loc.addEventListener("positionchanged", onPositionChanged);
             loc.addEventListener("statuschanged", onStatusChanged);
 
-            ids[clientId] = { pos: onPositionChanged, status: onStatusChanged 
};
-        }, fail);        
+            callbacks[clientId] = { pos: onPositionChanged, status: 
onStatusChanged };
+            locs[clientId] = loc;
+        }, fail);
     },
 
     clearWatch: function (success, fail, args, env) {
-        var clientId = args[0],
-            callbacks = ids[clientId];
+        var clientId = args[0];
+        var callback = callbacks[clientId];
+        var loc      = locs[clientId]
 
-        if (callbacks) {
-            loc.removeEventListener("positionchanged", callbacks.pos);
-            loc.removeEventListener("statuschanged", callbacks.status);
+        if (callback && loc) {
+            loc.removeEventListener("positionchanged", callback.pos);
+            loc.removeEventListener("statuschanged", callback.status);
 
-            delete ids[clientId];
+            delete callbacks[clientId];
+            delete locs[clientId];
         }
 
         success();


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to