@nitra/geolocation 7.1.6 → 8.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NitraGeolocation.podspec +3 -3
- package/Package.swift +6 -10
- package/README.md +102 -11
- package/android/build.gradle +51 -22
- package/android/src/main/kotlin/com/capacitorjs/plugins/geolocation/GeolocationErrors.kt +10 -0
- package/android/src/main/kotlin/com/capacitorjs/plugins/geolocation/GeolocationPlugin.kt +230 -29
- package/dist/docs.json +37 -5
- package/dist/esm/definitions.d.ts +87 -7
- package/dist/esm/definitions.js.map +1 -1
- package/dist/esm/web.d.ts +4 -0
- package/dist/esm/web.js +62 -2
- package/dist/esm/web.js.map +1 -1
- package/dist/plugin.cjs.js +66 -9
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +66 -9
- package/dist/plugin.js.map +1 -1
- package/ios/Sources/GeolocationPlugin/GeolocationCallbackManager.swift +9 -0
- package/ios/Sources/GeolocationPlugin/GeolocationConstants.swift +5 -0
- package/ios/Sources/GeolocationPlugin/GeolocationError.swift +4 -1
- package/ios/Sources/GeolocationPlugin/GeolocationPlugin.swift +51 -12
- package/ios/Sources/GeolocationPlugin/IONGLOCPositionModel+JSONTransformer.swift +8 -3
- package/package.json +23 -21
package/dist/esm/web.js
CHANGED
|
@@ -1,9 +1,69 @@
|
|
|
1
1
|
import { WebPlugin } from '@capacitor/core';
|
|
2
2
|
export class GeolocationWeb extends WebPlugin {
|
|
3
|
+
constructor() {
|
|
4
|
+
super();
|
|
5
|
+
this.latestOrientation = null;
|
|
6
|
+
if (typeof window !== 'undefined') {
|
|
7
|
+
const win = window;
|
|
8
|
+
if ('ondeviceorientationabsolute' in win) {
|
|
9
|
+
win.addEventListener('deviceorientationabsolute', (event) => this.updateOrientation(event, true), true);
|
|
10
|
+
}
|
|
11
|
+
else if ('ondeviceorientation' in win) {
|
|
12
|
+
win.addEventListener('deviceorientation', (event) => this.updateOrientation(event, false), true);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
updateOrientation(event, isAbsolute) {
|
|
17
|
+
let trueHeading = null;
|
|
18
|
+
let magneticHeading = null;
|
|
19
|
+
let headingAccuracy = null;
|
|
20
|
+
if (isAbsolute && event.alpha !== null) {
|
|
21
|
+
trueHeading = (360 - event.alpha) % 360;
|
|
22
|
+
}
|
|
23
|
+
else if (event.webkitCompassHeading !== undefined && event.webkitCompassHeading !== null) {
|
|
24
|
+
magneticHeading = event.webkitCompassHeading;
|
|
25
|
+
headingAccuracy = event.webkitCompassAccuracy;
|
|
26
|
+
}
|
|
27
|
+
else if (event.alpha !== null && event.absolute === true) {
|
|
28
|
+
trueHeading = (360 - event.alpha) % 360;
|
|
29
|
+
}
|
|
30
|
+
else if (event.alpha !== null) {
|
|
31
|
+
magneticHeading = (360 - event.alpha) % 360;
|
|
32
|
+
}
|
|
33
|
+
if (trueHeading !== null || magneticHeading !== null) {
|
|
34
|
+
this.latestOrientation = {
|
|
35
|
+
trueHeading,
|
|
36
|
+
magneticHeading,
|
|
37
|
+
headingAccuracy,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
augmentPosition(pos, isWatch = false) {
|
|
42
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
43
|
+
const coords = pos.coords;
|
|
44
|
+
const orientation = isWatch ? this.latestOrientation : null;
|
|
45
|
+
const heading = (_c = (_b = (_a = orientation === null || orientation === void 0 ? void 0 : orientation.trueHeading) !== null && _a !== void 0 ? _a : orientation === null || orientation === void 0 ? void 0 : orientation.magneticHeading) !== null && _b !== void 0 ? _b : (isWatch ? coords.heading : null)) !== null && _c !== void 0 ? _c : null;
|
|
46
|
+
return {
|
|
47
|
+
timestamp: null,
|
|
48
|
+
coords: {
|
|
49
|
+
latitude: coords.latitude,
|
|
50
|
+
longitude: coords.longitude,
|
|
51
|
+
accuracy: coords.accuracy,
|
|
52
|
+
altitude: coords.altitude,
|
|
53
|
+
altitudeAccuracy: coords.altitudeAccuracy,
|
|
54
|
+
speed: coords.speed,
|
|
55
|
+
heading: heading,
|
|
56
|
+
magneticHeading: (_d = orientation === null || orientation === void 0 ? void 0 : orientation.magneticHeading) !== null && _d !== void 0 ? _d : null,
|
|
57
|
+
trueHeading: (_e = orientation === null || orientation === void 0 ? void 0 : orientation.trueHeading) !== null && _e !== void 0 ? _e : null,
|
|
58
|
+
headingAccuracy: (_f = orientation === null || orientation === void 0 ? void 0 : orientation.headingAccuracy) !== null && _f !== void 0 ? _f : null,
|
|
59
|
+
course: (_g = (isWatch ? coords.heading : null)) !== null && _g !== void 0 ? _g : null,
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
}
|
|
3
63
|
async getCurrentPosition(options) {
|
|
4
64
|
return new Promise((resolve, reject) => {
|
|
5
65
|
navigator.geolocation.getCurrentPosition((pos) => {
|
|
6
|
-
resolve(pos);
|
|
66
|
+
resolve(this.augmentPosition(pos, false));
|
|
7
67
|
}, (err) => {
|
|
8
68
|
reject(err);
|
|
9
69
|
}, Object.assign({ enableHighAccuracy: false, timeout: 10000, maximumAge: 0 }, options));
|
|
@@ -11,7 +71,7 @@ export class GeolocationWeb extends WebPlugin {
|
|
|
11
71
|
}
|
|
12
72
|
async watchPosition(options, callback) {
|
|
13
73
|
const id = navigator.geolocation.watchPosition((pos) => {
|
|
14
|
-
callback(pos);
|
|
74
|
+
callback(this.augmentPosition(pos, true));
|
|
15
75
|
}, (err) => {
|
|
16
76
|
callback(null, err);
|
|
17
77
|
}, Object.assign({ enableHighAccuracy: false, timeout: 10000, maximumAge: 0, minimumUpdateInterval: 5000 }, options));
|
package/dist/esm/web.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAW5C,MAAM,OAAO,cAAe,SAAQ,SAAS;
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"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","sourcesContent":["import { WebPlugin } from '@capacitor/core';\n\nimport type {\n CallbackID,\n GeolocationPlugin,\n PermissionStatus,\n Position,\n PositionOptions,\n WatchPositionCallback,\n} from './definitions';\n\nexport class GeolocationWeb extends WebPlugin implements GeolocationPlugin {\n private latestOrientation: {\n magneticHeading: number | null;\n trueHeading: number | null;\n headingAccuracy: number | null;\n } | null = null;\n\n constructor() {\n super();\n if (typeof window !== 'undefined') {\n const win = window as any;\n if ('ondeviceorientationabsolute' in win) {\n win.addEventListener('deviceorientationabsolute', (event: any) => this.updateOrientation(event, true), true);\n } else if ('ondeviceorientation' in win) {\n win.addEventListener('deviceorientation', (event: any) => this.updateOrientation(event, false), true);\n }\n }\n }\n\n private updateOrientation(event: any, isAbsolute: boolean) {\n let trueHeading: number | null = null;\n let magneticHeading: number | null = null;\n let headingAccuracy: number | null = null;\n\n if (isAbsolute && event.alpha !== null) {\n trueHeading = (360 - event.alpha) % 360;\n } else if (event.webkitCompassHeading !== undefined && event.webkitCompassHeading !== null) {\n magneticHeading = event.webkitCompassHeading;\n headingAccuracy = event.webkitCompassAccuracy;\n } else if (event.alpha !== null && event.absolute === true) {\n trueHeading = (360 - event.alpha) % 360;\n } else if (event.alpha !== null) {\n magneticHeading = (360 - event.alpha) % 360;\n }\n\n if (trueHeading !== null || magneticHeading !== null) {\n this.latestOrientation = {\n trueHeading,\n magneticHeading,\n headingAccuracy,\n };\n }\n }\n\n private augmentPosition(pos: globalThis.GeolocationPosition, isWatch = false): Position {\n const coords = pos.coords;\n const orientation = isWatch ? this.latestOrientation : null;\n\n const heading =\n orientation?.trueHeading ?? orientation?.magneticHeading ?? (isWatch ? coords.heading : null) ?? null;\n\n return {\n timestamp: null,\n coords: {\n latitude: coords.latitude,\n longitude: coords.longitude,\n accuracy: coords.accuracy,\n altitude: coords.altitude,\n altitudeAccuracy: (coords as any).altitudeAccuracy,\n speed: coords.speed,\n heading: heading,\n magneticHeading: orientation?.magneticHeading ?? null,\n trueHeading: orientation?.trueHeading ?? null,\n headingAccuracy: orientation?.headingAccuracy ?? null,\n course: (isWatch ? coords.heading : null) ?? null,\n },\n };\n }\n\n async getCurrentPosition(options?: PositionOptions): Promise<Position> {\n return new Promise((resolve, reject) => {\n navigator.geolocation.getCurrentPosition(\n (pos) => {\n resolve(this.augmentPosition(pos, false));\n },\n (err) => {\n reject(err);\n },\n {\n enableHighAccuracy: false,\n timeout: 10000,\n maximumAge: 0,\n ...options,\n },\n );\n });\n }\n\n async watchPosition(options: PositionOptions, callback: WatchPositionCallback): Promise<CallbackID> {\n const id = navigator.geolocation.watchPosition(\n (pos) => {\n callback(this.augmentPosition(pos, true));\n },\n (err) => {\n callback(null, err);\n },\n {\n enableHighAccuracy: false,\n timeout: 10000,\n maximumAge: 0,\n minimumUpdateInterval: 5000,\n ...options,\n },\n );\n\n return `${id}`;\n }\n\n async clearWatch(options: { id: string }): Promise<void> {\n navigator.geolocation.clearWatch(parseInt(options.id, 10));\n }\n\n async checkPermissions(): Promise<PermissionStatus> {\n if (typeof navigator === 'undefined' || !navigator.permissions) {\n throw this.unavailable('Permissions API not available in this browser');\n }\n\n const permission = await navigator.permissions.query({\n name: 'geolocation',\n });\n return { location: permission.state, coarseLocation: permission.state };\n }\n\n async requestPermissions(): Promise<PermissionStatus> {\n throw this.unimplemented('Not implemented on web.');\n }\n}\n\nconst Geolocation = new GeolocationWeb();\n\nexport { Geolocation };\n"]}
|
package/dist/plugin.cjs.js
CHANGED
|
@@ -1,20 +1,78 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
3
|
var core = require('@capacitor/core');
|
|
6
4
|
var synapse = require('@capacitor/synapse');
|
|
7
5
|
|
|
8
|
-
const Geolocation
|
|
6
|
+
const Geolocation = core.registerPlugin('Geolocation', {
|
|
9
7
|
web: () => Promise.resolve().then(function () { return web; }).then((m) => new m.GeolocationWeb()),
|
|
10
8
|
});
|
|
11
9
|
synapse.exposeSynapse();
|
|
12
10
|
|
|
13
11
|
class GeolocationWeb extends core.WebPlugin {
|
|
12
|
+
constructor() {
|
|
13
|
+
super();
|
|
14
|
+
this.latestOrientation = null;
|
|
15
|
+
if (typeof window !== 'undefined') {
|
|
16
|
+
const win = window;
|
|
17
|
+
if ('ondeviceorientationabsolute' in win) {
|
|
18
|
+
win.addEventListener('deviceorientationabsolute', (event) => this.updateOrientation(event, true), true);
|
|
19
|
+
}
|
|
20
|
+
else if ('ondeviceorientation' in win) {
|
|
21
|
+
win.addEventListener('deviceorientation', (event) => this.updateOrientation(event, false), true);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
updateOrientation(event, isAbsolute) {
|
|
26
|
+
let trueHeading = null;
|
|
27
|
+
let magneticHeading = null;
|
|
28
|
+
let headingAccuracy = null;
|
|
29
|
+
if (isAbsolute && event.alpha !== null) {
|
|
30
|
+
trueHeading = (360 - event.alpha) % 360;
|
|
31
|
+
}
|
|
32
|
+
else if (event.webkitCompassHeading !== undefined && event.webkitCompassHeading !== null) {
|
|
33
|
+
magneticHeading = event.webkitCompassHeading;
|
|
34
|
+
headingAccuracy = event.webkitCompassAccuracy;
|
|
35
|
+
}
|
|
36
|
+
else if (event.alpha !== null && event.absolute === true) {
|
|
37
|
+
trueHeading = (360 - event.alpha) % 360;
|
|
38
|
+
}
|
|
39
|
+
else if (event.alpha !== null) {
|
|
40
|
+
magneticHeading = (360 - event.alpha) % 360;
|
|
41
|
+
}
|
|
42
|
+
if (trueHeading !== null || magneticHeading !== null) {
|
|
43
|
+
this.latestOrientation = {
|
|
44
|
+
trueHeading,
|
|
45
|
+
magneticHeading,
|
|
46
|
+
headingAccuracy,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
augmentPosition(pos, isWatch = false) {
|
|
51
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
52
|
+
const coords = pos.coords;
|
|
53
|
+
const orientation = isWatch ? this.latestOrientation : null;
|
|
54
|
+
const heading = (_c = (_b = (_a = orientation === null || orientation === void 0 ? void 0 : orientation.trueHeading) !== null && _a !== void 0 ? _a : orientation === null || orientation === void 0 ? void 0 : orientation.magneticHeading) !== null && _b !== void 0 ? _b : (isWatch ? coords.heading : null)) !== null && _c !== void 0 ? _c : null;
|
|
55
|
+
return {
|
|
56
|
+
timestamp: null,
|
|
57
|
+
coords: {
|
|
58
|
+
latitude: coords.latitude,
|
|
59
|
+
longitude: coords.longitude,
|
|
60
|
+
accuracy: coords.accuracy,
|
|
61
|
+
altitude: coords.altitude,
|
|
62
|
+
altitudeAccuracy: coords.altitudeAccuracy,
|
|
63
|
+
speed: coords.speed,
|
|
64
|
+
heading: heading,
|
|
65
|
+
magneticHeading: (_d = orientation === null || orientation === void 0 ? void 0 : orientation.magneticHeading) !== null && _d !== void 0 ? _d : null,
|
|
66
|
+
trueHeading: (_e = orientation === null || orientation === void 0 ? void 0 : orientation.trueHeading) !== null && _e !== void 0 ? _e : null,
|
|
67
|
+
headingAccuracy: (_f = orientation === null || orientation === void 0 ? void 0 : orientation.headingAccuracy) !== null && _f !== void 0 ? _f : null,
|
|
68
|
+
course: (_g = (isWatch ? coords.heading : null)) !== null && _g !== void 0 ? _g : null,
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
}
|
|
14
72
|
async getCurrentPosition(options) {
|
|
15
73
|
return new Promise((resolve, reject) => {
|
|
16
74
|
navigator.geolocation.getCurrentPosition((pos) => {
|
|
17
|
-
resolve(pos);
|
|
75
|
+
resolve(this.augmentPosition(pos, false));
|
|
18
76
|
}, (err) => {
|
|
19
77
|
reject(err);
|
|
20
78
|
}, Object.assign({ enableHighAccuracy: false, timeout: 10000, maximumAge: 0 }, options));
|
|
@@ -22,7 +80,7 @@ class GeolocationWeb extends core.WebPlugin {
|
|
|
22
80
|
}
|
|
23
81
|
async watchPosition(options, callback) {
|
|
24
82
|
const id = navigator.geolocation.watchPosition((pos) => {
|
|
25
|
-
callback(pos);
|
|
83
|
+
callback(this.augmentPosition(pos, true));
|
|
26
84
|
}, (err) => {
|
|
27
85
|
callback(null, err);
|
|
28
86
|
}, Object.assign({ enableHighAccuracy: false, timeout: 10000, maximumAge: 0, minimumUpdateInterval: 5000 }, options));
|
|
@@ -44,13 +102,12 @@ class GeolocationWeb extends core.WebPlugin {
|
|
|
44
102
|
throw this.unimplemented('Not implemented on web.');
|
|
45
103
|
}
|
|
46
104
|
}
|
|
47
|
-
|
|
105
|
+
new GeolocationWeb();
|
|
48
106
|
|
|
49
107
|
var web = /*#__PURE__*/Object.freeze({
|
|
50
108
|
__proto__: null,
|
|
51
|
-
GeolocationWeb: GeolocationWeb
|
|
52
|
-
Geolocation: Geolocation
|
|
109
|
+
GeolocationWeb: GeolocationWeb
|
|
53
110
|
});
|
|
54
111
|
|
|
55
|
-
exports.Geolocation = Geolocation
|
|
112
|
+
exports.Geolocation = Geolocation;
|
|
56
113
|
//# sourceMappingURL=plugin.cjs.js.map
|
package/dist/plugin.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.cjs.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nimport { exposeSynapse } from '@capacitor/synapse';\nconst Geolocation = registerPlugin('Geolocation', {\n web: () => import('./web').then((m) => new m.GeolocationWeb()),\n});\nexposeSynapse();\nexport * from './definitions';\nexport { Geolocation };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nexport class GeolocationWeb extends WebPlugin {\n async getCurrentPosition(options) {\n return new Promise((resolve, reject) => {\n navigator.geolocation.getCurrentPosition((pos) => {\n resolve(pos);\n }, (err) => {\n reject(err);\n }, Object.assign({ enableHighAccuracy: false, timeout: 10000, maximumAge: 0 }, options));\n });\n }\n async watchPosition(options, callback) {\n const id = navigator.geolocation.watchPosition((pos) => {\n callback(pos);\n }, (err) => {\n callback(null, err);\n }, Object.assign({ enableHighAccuracy: false, timeout: 10000, maximumAge: 0, minimumUpdateInterval: 5000 }, options));\n return `${id}`;\n }\n async clearWatch(options) {\n navigator.geolocation.clearWatch(parseInt(options.id, 10));\n }\n async checkPermissions() {\n if (typeof navigator === 'undefined' || !navigator.permissions) {\n throw this.unavailable('Permissions API not available in this browser');\n }\n const permission = await navigator.permissions.query({\n name: 'geolocation',\n });\n return { location: permission.state, coarseLocation: permission.state };\n }\n async requestPermissions() {\n throw this.unimplemented('Not implemented on web.');\n }\n}\nconst Geolocation = new GeolocationWeb();\nexport { Geolocation };\n//# sourceMappingURL=web.js.map"],"names":["
|
|
1
|
+
{"version":3,"file":"plugin.cjs.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nimport { exposeSynapse } from '@capacitor/synapse';\nconst Geolocation = registerPlugin('Geolocation', {\n web: () => import('./web').then((m) => new m.GeolocationWeb()),\n});\nexposeSynapse();\nexport * from './definitions';\nexport { Geolocation };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nexport class GeolocationWeb extends WebPlugin {\n constructor() {\n super();\n this.latestOrientation = null;\n if (typeof window !== 'undefined') {\n const win = window;\n if ('ondeviceorientationabsolute' in win) {\n win.addEventListener('deviceorientationabsolute', (event) => this.updateOrientation(event, true), true);\n }\n else if ('ondeviceorientation' in win) {\n win.addEventListener('deviceorientation', (event) => this.updateOrientation(event, false), true);\n }\n }\n }\n updateOrientation(event, isAbsolute) {\n let trueHeading = null;\n let magneticHeading = null;\n let headingAccuracy = null;\n if (isAbsolute && event.alpha !== null) {\n trueHeading = (360 - event.alpha) % 360;\n }\n else if (event.webkitCompassHeading !== undefined && event.webkitCompassHeading !== null) {\n magneticHeading = event.webkitCompassHeading;\n headingAccuracy = event.webkitCompassAccuracy;\n }\n else if (event.alpha !== null && event.absolute === true) {\n trueHeading = (360 - event.alpha) % 360;\n }\n else if (event.alpha !== null) {\n magneticHeading = (360 - event.alpha) % 360;\n }\n if (trueHeading !== null || magneticHeading !== null) {\n this.latestOrientation = {\n trueHeading,\n magneticHeading,\n headingAccuracy,\n };\n }\n }\n augmentPosition(pos, isWatch = false) {\n var _a, _b, _c, _d, _e, _f, _g;\n const coords = pos.coords;\n const orientation = isWatch ? this.latestOrientation : null;\n const heading = (_c = (_b = (_a = orientation === null || orientation === void 0 ? void 0 : orientation.trueHeading) !== null && _a !== void 0 ? _a : orientation === null || orientation === void 0 ? void 0 : orientation.magneticHeading) !== null && _b !== void 0 ? _b : (isWatch ? coords.heading : null)) !== null && _c !== void 0 ? _c : null;\n return {\n timestamp: null,\n coords: {\n latitude: coords.latitude,\n longitude: coords.longitude,\n accuracy: coords.accuracy,\n altitude: coords.altitude,\n altitudeAccuracy: coords.altitudeAccuracy,\n speed: coords.speed,\n heading: heading,\n magneticHeading: (_d = orientation === null || orientation === void 0 ? void 0 : orientation.magneticHeading) !== null && _d !== void 0 ? _d : null,\n trueHeading: (_e = orientation === null || orientation === void 0 ? void 0 : orientation.trueHeading) !== null && _e !== void 0 ? _e : null,\n headingAccuracy: (_f = orientation === null || orientation === void 0 ? void 0 : orientation.headingAccuracy) !== null && _f !== void 0 ? _f : null,\n course: (_g = (isWatch ? coords.heading : null)) !== null && _g !== void 0 ? _g : null,\n },\n };\n }\n async getCurrentPosition(options) {\n return new Promise((resolve, reject) => {\n navigator.geolocation.getCurrentPosition((pos) => {\n resolve(this.augmentPosition(pos, false));\n }, (err) => {\n reject(err);\n }, Object.assign({ enableHighAccuracy: false, timeout: 10000, maximumAge: 0 }, options));\n });\n }\n async watchPosition(options, callback) {\n const id = navigator.geolocation.watchPosition((pos) => {\n callback(this.augmentPosition(pos, true));\n }, (err) => {\n callback(null, err);\n }, Object.assign({ enableHighAccuracy: false, timeout: 10000, maximumAge: 0, minimumUpdateInterval: 5000 }, options));\n return `${id}`;\n }\n async clearWatch(options) {\n navigator.geolocation.clearWatch(parseInt(options.id, 10));\n }\n async checkPermissions() {\n if (typeof navigator === 'undefined' || !navigator.permissions) {\n throw this.unavailable('Permissions API not available in this browser');\n }\n const permission = await navigator.permissions.query({\n name: 'geolocation',\n });\n return { location: permission.state, coarseLocation: permission.state };\n }\n async requestPermissions() {\n throw this.unimplemented('Not implemented on web.');\n }\n}\nconst Geolocation = new GeolocationWeb();\nexport { Geolocation };\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","exposeSynapse","WebPlugin"],"mappings":"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"}
|
package/dist/plugin.js
CHANGED
|
@@ -1,16 +1,76 @@
|
|
|
1
1
|
var capacitorGeolocationPluginCapacitor = (function (exports, core, synapse) {
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
const Geolocation
|
|
4
|
+
const Geolocation = core.registerPlugin('Geolocation', {
|
|
5
5
|
web: () => Promise.resolve().then(function () { return web; }).then((m) => new m.GeolocationWeb()),
|
|
6
6
|
});
|
|
7
7
|
synapse.exposeSynapse();
|
|
8
8
|
|
|
9
9
|
class GeolocationWeb extends core.WebPlugin {
|
|
10
|
+
constructor() {
|
|
11
|
+
super();
|
|
12
|
+
this.latestOrientation = null;
|
|
13
|
+
if (typeof window !== 'undefined') {
|
|
14
|
+
const win = window;
|
|
15
|
+
if ('ondeviceorientationabsolute' in win) {
|
|
16
|
+
win.addEventListener('deviceorientationabsolute', (event) => this.updateOrientation(event, true), true);
|
|
17
|
+
}
|
|
18
|
+
else if ('ondeviceorientation' in win) {
|
|
19
|
+
win.addEventListener('deviceorientation', (event) => this.updateOrientation(event, false), true);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
updateOrientation(event, isAbsolute) {
|
|
24
|
+
let trueHeading = null;
|
|
25
|
+
let magneticHeading = null;
|
|
26
|
+
let headingAccuracy = null;
|
|
27
|
+
if (isAbsolute && event.alpha !== null) {
|
|
28
|
+
trueHeading = (360 - event.alpha) % 360;
|
|
29
|
+
}
|
|
30
|
+
else if (event.webkitCompassHeading !== undefined && event.webkitCompassHeading !== null) {
|
|
31
|
+
magneticHeading = event.webkitCompassHeading;
|
|
32
|
+
headingAccuracy = event.webkitCompassAccuracy;
|
|
33
|
+
}
|
|
34
|
+
else if (event.alpha !== null && event.absolute === true) {
|
|
35
|
+
trueHeading = (360 - event.alpha) % 360;
|
|
36
|
+
}
|
|
37
|
+
else if (event.alpha !== null) {
|
|
38
|
+
magneticHeading = (360 - event.alpha) % 360;
|
|
39
|
+
}
|
|
40
|
+
if (trueHeading !== null || magneticHeading !== null) {
|
|
41
|
+
this.latestOrientation = {
|
|
42
|
+
trueHeading,
|
|
43
|
+
magneticHeading,
|
|
44
|
+
headingAccuracy,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
augmentPosition(pos, isWatch = false) {
|
|
49
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
50
|
+
const coords = pos.coords;
|
|
51
|
+
const orientation = isWatch ? this.latestOrientation : null;
|
|
52
|
+
const heading = (_c = (_b = (_a = orientation === null || orientation === void 0 ? void 0 : orientation.trueHeading) !== null && _a !== void 0 ? _a : orientation === null || orientation === void 0 ? void 0 : orientation.magneticHeading) !== null && _b !== void 0 ? _b : (isWatch ? coords.heading : null)) !== null && _c !== void 0 ? _c : null;
|
|
53
|
+
return {
|
|
54
|
+
timestamp: null,
|
|
55
|
+
coords: {
|
|
56
|
+
latitude: coords.latitude,
|
|
57
|
+
longitude: coords.longitude,
|
|
58
|
+
accuracy: coords.accuracy,
|
|
59
|
+
altitude: coords.altitude,
|
|
60
|
+
altitudeAccuracy: coords.altitudeAccuracy,
|
|
61
|
+
speed: coords.speed,
|
|
62
|
+
heading: heading,
|
|
63
|
+
magneticHeading: (_d = orientation === null || orientation === void 0 ? void 0 : orientation.magneticHeading) !== null && _d !== void 0 ? _d : null,
|
|
64
|
+
trueHeading: (_e = orientation === null || orientation === void 0 ? void 0 : orientation.trueHeading) !== null && _e !== void 0 ? _e : null,
|
|
65
|
+
headingAccuracy: (_f = orientation === null || orientation === void 0 ? void 0 : orientation.headingAccuracy) !== null && _f !== void 0 ? _f : null,
|
|
66
|
+
course: (_g = (isWatch ? coords.heading : null)) !== null && _g !== void 0 ? _g : null,
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
}
|
|
10
70
|
async getCurrentPosition(options) {
|
|
11
71
|
return new Promise((resolve, reject) => {
|
|
12
72
|
navigator.geolocation.getCurrentPosition((pos) => {
|
|
13
|
-
resolve(pos);
|
|
73
|
+
resolve(this.augmentPosition(pos, false));
|
|
14
74
|
}, (err) => {
|
|
15
75
|
reject(err);
|
|
16
76
|
}, Object.assign({ enableHighAccuracy: false, timeout: 10000, maximumAge: 0 }, options));
|
|
@@ -18,7 +78,7 @@ var capacitorGeolocationPluginCapacitor = (function (exports, core, synapse) {
|
|
|
18
78
|
}
|
|
19
79
|
async watchPosition(options, callback) {
|
|
20
80
|
const id = navigator.geolocation.watchPosition((pos) => {
|
|
21
|
-
callback(pos);
|
|
81
|
+
callback(this.augmentPosition(pos, true));
|
|
22
82
|
}, (err) => {
|
|
23
83
|
callback(null, err);
|
|
24
84
|
}, Object.assign({ enableHighAccuracy: false, timeout: 10000, maximumAge: 0, minimumUpdateInterval: 5000 }, options));
|
|
@@ -40,17 +100,14 @@ var capacitorGeolocationPluginCapacitor = (function (exports, core, synapse) {
|
|
|
40
100
|
throw this.unimplemented('Not implemented on web.');
|
|
41
101
|
}
|
|
42
102
|
}
|
|
43
|
-
|
|
103
|
+
new GeolocationWeb();
|
|
44
104
|
|
|
45
105
|
var web = /*#__PURE__*/Object.freeze({
|
|
46
106
|
__proto__: null,
|
|
47
|
-
GeolocationWeb: GeolocationWeb
|
|
48
|
-
Geolocation: Geolocation
|
|
107
|
+
GeolocationWeb: GeolocationWeb
|
|
49
108
|
});
|
|
50
109
|
|
|
51
|
-
exports.Geolocation = Geolocation
|
|
52
|
-
|
|
53
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
110
|
+
exports.Geolocation = Geolocation;
|
|
54
111
|
|
|
55
112
|
return exports;
|
|
56
113
|
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nimport { exposeSynapse } from '@capacitor/synapse';\nconst Geolocation = registerPlugin('Geolocation', {\n web: () => import('./web').then((m) => new m.GeolocationWeb()),\n});\nexposeSynapse();\nexport * from './definitions';\nexport { Geolocation };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nexport class GeolocationWeb extends WebPlugin {\n async getCurrentPosition(options) {\n return new Promise((resolve, reject) => {\n navigator.geolocation.getCurrentPosition((pos) => {\n resolve(pos);\n }, (err) => {\n reject(err);\n }, Object.assign({ enableHighAccuracy: false, timeout: 10000, maximumAge: 0 }, options));\n });\n }\n async watchPosition(options, callback) {\n const id = navigator.geolocation.watchPosition((pos) => {\n callback(pos);\n }, (err) => {\n callback(null, err);\n }, Object.assign({ enableHighAccuracy: false, timeout: 10000, maximumAge: 0, minimumUpdateInterval: 5000 }, options));\n return `${id}`;\n }\n async clearWatch(options) {\n navigator.geolocation.clearWatch(parseInt(options.id, 10));\n }\n async checkPermissions() {\n if (typeof navigator === 'undefined' || !navigator.permissions) {\n throw this.unavailable('Permissions API not available in this browser');\n }\n const permission = await navigator.permissions.query({\n name: 'geolocation',\n });\n return { location: permission.state, coarseLocation: permission.state };\n }\n async requestPermissions() {\n throw this.unimplemented('Not implemented on web.');\n }\n}\nconst Geolocation = new GeolocationWeb();\nexport { Geolocation };\n//# sourceMappingURL=web.js.map"],"names":["
|
|
1
|
+
{"version":3,"file":"plugin.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nimport { exposeSynapse } from '@capacitor/synapse';\nconst Geolocation = registerPlugin('Geolocation', {\n web: () => import('./web').then((m) => new m.GeolocationWeb()),\n});\nexposeSynapse();\nexport * from './definitions';\nexport { Geolocation };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nexport class GeolocationWeb extends WebPlugin {\n constructor() {\n super();\n this.latestOrientation = null;\n if (typeof window !== 'undefined') {\n const win = window;\n if ('ondeviceorientationabsolute' in win) {\n win.addEventListener('deviceorientationabsolute', (event) => this.updateOrientation(event, true), true);\n }\n else if ('ondeviceorientation' in win) {\n win.addEventListener('deviceorientation', (event) => this.updateOrientation(event, false), true);\n }\n }\n }\n updateOrientation(event, isAbsolute) {\n let trueHeading = null;\n let magneticHeading = null;\n let headingAccuracy = null;\n if (isAbsolute && event.alpha !== null) {\n trueHeading = (360 - event.alpha) % 360;\n }\n else if (event.webkitCompassHeading !== undefined && event.webkitCompassHeading !== null) {\n magneticHeading = event.webkitCompassHeading;\n headingAccuracy = event.webkitCompassAccuracy;\n }\n else if (event.alpha !== null && event.absolute === true) {\n trueHeading = (360 - event.alpha) % 360;\n }\n else if (event.alpha !== null) {\n magneticHeading = (360 - event.alpha) % 360;\n }\n if (trueHeading !== null || magneticHeading !== null) {\n this.latestOrientation = {\n trueHeading,\n magneticHeading,\n headingAccuracy,\n };\n }\n }\n augmentPosition(pos, isWatch = false) {\n var _a, _b, _c, _d, _e, _f, _g;\n const coords = pos.coords;\n const orientation = isWatch ? this.latestOrientation : null;\n const heading = (_c = (_b = (_a = orientation === null || orientation === void 0 ? void 0 : orientation.trueHeading) !== null && _a !== void 0 ? _a : orientation === null || orientation === void 0 ? void 0 : orientation.magneticHeading) !== null && _b !== void 0 ? _b : (isWatch ? coords.heading : null)) !== null && _c !== void 0 ? _c : null;\n return {\n timestamp: null,\n coords: {\n latitude: coords.latitude,\n longitude: coords.longitude,\n accuracy: coords.accuracy,\n altitude: coords.altitude,\n altitudeAccuracy: coords.altitudeAccuracy,\n speed: coords.speed,\n heading: heading,\n magneticHeading: (_d = orientation === null || orientation === void 0 ? void 0 : orientation.magneticHeading) !== null && _d !== void 0 ? _d : null,\n trueHeading: (_e = orientation === null || orientation === void 0 ? void 0 : orientation.trueHeading) !== null && _e !== void 0 ? _e : null,\n headingAccuracy: (_f = orientation === null || orientation === void 0 ? void 0 : orientation.headingAccuracy) !== null && _f !== void 0 ? _f : null,\n course: (_g = (isWatch ? coords.heading : null)) !== null && _g !== void 0 ? _g : null,\n },\n };\n }\n async getCurrentPosition(options) {\n return new Promise((resolve, reject) => {\n navigator.geolocation.getCurrentPosition((pos) => {\n resolve(this.augmentPosition(pos, false));\n }, (err) => {\n reject(err);\n }, Object.assign({ enableHighAccuracy: false, timeout: 10000, maximumAge: 0 }, options));\n });\n }\n async watchPosition(options, callback) {\n const id = navigator.geolocation.watchPosition((pos) => {\n callback(this.augmentPosition(pos, true));\n }, (err) => {\n callback(null, err);\n }, Object.assign({ enableHighAccuracy: false, timeout: 10000, maximumAge: 0, minimumUpdateInterval: 5000 }, options));\n return `${id}`;\n }\n async clearWatch(options) {\n navigator.geolocation.clearWatch(parseInt(options.id, 10));\n }\n async checkPermissions() {\n if (typeof navigator === 'undefined' || !navigator.permissions) {\n throw this.unavailable('Permissions API not available in this browser');\n }\n const permission = await navigator.permissions.query({\n name: 'geolocation',\n });\n return { location: permission.state, coarseLocation: permission.state };\n }\n async requestPermissions() {\n throw this.unimplemented('Not implemented on web.');\n }\n}\nconst Geolocation = new GeolocationWeb();\nexport { Geolocation };\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","exposeSynapse","WebPlugin"],"mappings":";;;AAEK,UAAC,WAAW,GAAGA,mBAAc,CAAC,aAAa,EAAE;IAClD,IAAI,GAAG,EAAE,MAAM,mDAAe,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;IAClE,CAAC;AACDC,yBAAa,EAAE;;ICJR,MAAM,cAAc,SAASC,cAAS,CAAC;IAC9C,IAAI,WAAW,GAAG;IAClB,QAAQ,KAAK,EAAE;IACf,QAAQ,IAAI,CAAC,iBAAiB,GAAG,IAAI;IACrC,QAAQ,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;IAC3C,YAAY,MAAM,GAAG,GAAG,MAAM;IAC9B,YAAY,IAAI,6BAA6B,IAAI,GAAG,EAAE;IACtD,gBAAgB,GAAG,CAAC,gBAAgB,CAAC,2BAA2B,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;IACvH,YAAY;IACZ,iBAAiB,IAAI,qBAAqB,IAAI,GAAG,EAAE;IACnD,gBAAgB,GAAG,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC;IAChH,YAAY;IACZ,QAAQ;IACR,IAAI;IACJ,IAAI,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE;IACzC,QAAQ,IAAI,WAAW,GAAG,IAAI;IAC9B,QAAQ,IAAI,eAAe,GAAG,IAAI;IAClC,QAAQ,IAAI,eAAe,GAAG,IAAI;IAClC,QAAQ,IAAI,UAAU,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE;IAChD,YAAY,WAAW,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,IAAI,GAAG;IACnD,QAAQ;IACR,aAAa,IAAI,KAAK,CAAC,oBAAoB,KAAK,SAAS,IAAI,KAAK,CAAC,oBAAoB,KAAK,IAAI,EAAE;IAClG,YAAY,eAAe,GAAG,KAAK,CAAC,oBAAoB;IACxD,YAAY,eAAe,GAAG,KAAK,CAAC,qBAAqB;IACzD,QAAQ;IACR,aAAa,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,EAAE;IAClE,YAAY,WAAW,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,IAAI,GAAG;IACnD,QAAQ;IACR,aAAa,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE;IACvC,YAAY,eAAe,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,IAAI,GAAG;IACvD,QAAQ;IACR,QAAQ,IAAI,WAAW,KAAK,IAAI,IAAI,eAAe,KAAK,IAAI,EAAE;IAC9D,YAAY,IAAI,CAAC,iBAAiB,GAAG;IACrC,gBAAgB,WAAW;IAC3B,gBAAgB,eAAe;IAC/B,gBAAgB,eAAe;IAC/B,aAAa;IACb,QAAQ;IACR,IAAI;IACJ,IAAI,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,KAAK,EAAE;IAC1C,QAAQ,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IACtC,QAAQ,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM;IACjC,QAAQ,MAAM,WAAW,GAAG,OAAO,GAAG,IAAI,CAAC,iBAAiB,GAAG,IAAI;IACnE,QAAQ,MAAM,OAAO,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC,WAAW,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC,eAAe,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI;IAC9V,QAAQ,OAAO;IACf,YAAY,SAAS,EAAE,IAAI;IAC3B,YAAY,MAAM,EAAE;IACpB,gBAAgB,QAAQ,EAAE,MAAM,CAAC,QAAQ;IACzC,gBAAgB,SAAS,EAAE,MAAM,CAAC,SAAS;IAC3C,gBAAgB,QAAQ,EAAE,MAAM,CAAC,QAAQ;IACzC,gBAAgB,QAAQ,EAAE,MAAM,CAAC,QAAQ;IACzC,gBAAgB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;IACzD,gBAAgB,KAAK,EAAE,MAAM,CAAC,KAAK;IACnC,gBAAgB,OAAO,EAAE,OAAO;IAChC,gBAAgB,eAAe,EAAE,CAAC,EAAE,GAAG,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC,eAAe,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI;IACnK,gBAAgB,WAAW,EAAE,CAAC,EAAE,GAAG,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC,WAAW,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI;IAC3J,gBAAgB,eAAe,EAAE,CAAC,EAAE,GAAG,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC,eAAe,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI;IACnK,gBAAgB,MAAM,EAAE,CAAC,EAAE,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI;IACtG,aAAa;IACb,SAAS;IACT,IAAI;IACJ,IAAI,MAAM,kBAAkB,CAAC,OAAO,EAAE;IACtC,QAAQ,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;IAChD,YAAY,SAAS,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,GAAG,KAAK;IAC9D,gBAAgB,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACzD,YAAY,CAAC,EAAE,CAAC,GAAG,KAAK;IACxB,gBAAgB,MAAM,CAAC,GAAG,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,kBAAkB,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACpG,QAAQ,CAAC,CAAC;IACV,IAAI;IACJ,IAAI,MAAM,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE;IAC3C,QAAQ,MAAM,EAAE,GAAG,SAAS,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,GAAG,KAAK;IAChE,YAAY,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACrD,QAAQ,CAAC,EAAE,CAAC,GAAG,KAAK;IACpB,YAAY,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,kBAAkB,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,qBAAqB,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;IAC7H,QAAQ,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IACtB,IAAI;IACJ,IAAI,MAAM,UAAU,CAAC,OAAO,EAAE;IAC9B,QAAQ,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAClE,IAAI;IACJ,IAAI,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;IACxE,YAAY,MAAM,IAAI,CAAC,WAAW,CAAC,+CAA+C,CAAC;IACnF,QAAQ;IACR,QAAQ,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC;IAC7D,YAAY,IAAI,EAAE,aAAa;IAC/B,SAAS,CAAC;IACV,QAAQ,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK,EAAE,cAAc,EAAE,UAAU,CAAC,KAAK,EAAE;IAC/E,IAAI;IACJ,IAAI,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,MAAM,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC;IAC3D,IAAI;IACJ;IACoB,IAAI,cAAc;;;;;;;;;;;;;;;"}
|
|
@@ -24,6 +24,7 @@ final class GeolocationCallbackManager {
|
|
|
24
24
|
private(set) var requestPermissionsCallbacks: [CAPPluginCall]
|
|
25
25
|
private(set) var locationCallbacks: [CAPPluginCall]
|
|
26
26
|
private(set) var watchCallbacks: [String: CAPPluginCall]
|
|
27
|
+
private(set) var timeout: Int?
|
|
27
28
|
private let capacitorBridge: CAPBridgeProtocol?
|
|
28
29
|
|
|
29
30
|
private var allCallbackGroups: [GeolocationCallbackGroup] {
|
|
@@ -52,11 +53,15 @@ final class GeolocationCallbackManager {
|
|
|
52
53
|
func addLocationCallback(capacitorCall call: CAPPluginCall) {
|
|
53
54
|
capacitorBridge?.saveCall(call)
|
|
54
55
|
locationCallbacks.append(call)
|
|
56
|
+
let timeout = call.getInt(Constants.Arguments.timeout)
|
|
57
|
+
self.timeout = timeout
|
|
55
58
|
}
|
|
56
59
|
|
|
57
60
|
func addWatchCallback(_ watchId: String, capacitorCall call: CAPPluginCall) {
|
|
58
61
|
capacitorBridge?.saveCall(call)
|
|
59
62
|
watchCallbacks[watchId] = call
|
|
63
|
+
let timeout = call.getInt(Constants.Arguments.timeout)
|
|
64
|
+
self.timeout = timeout
|
|
60
65
|
}
|
|
61
66
|
|
|
62
67
|
func clearRequestPermissionsCallbacks() {
|
|
@@ -109,6 +114,10 @@ final class GeolocationCallbackManager {
|
|
|
109
114
|
|
|
110
115
|
func sendError(_ error: GeolocationError) {
|
|
111
116
|
createPluginResult(status: .error(error.toCodeMessagePair()))
|
|
117
|
+
|
|
118
|
+
if case .timeout = error {
|
|
119
|
+
watchCallbacks.keys.forEach { clearWatchCallbackIfExists($0) }
|
|
120
|
+
}
|
|
112
121
|
}
|
|
113
122
|
}
|
|
114
123
|
|
|
@@ -2,6 +2,7 @@ enum Constants {
|
|
|
2
2
|
enum Arguments {
|
|
3
3
|
static let enableHighAccuracy = "enableHighAccuracy"
|
|
4
4
|
static let id = "id"
|
|
5
|
+
static let timeout = "timeout"
|
|
5
6
|
}
|
|
6
7
|
|
|
7
8
|
enum AuthorisationStatus {
|
|
@@ -32,5 +33,9 @@ enum Constants {
|
|
|
32
33
|
static let speed: String = "speed"
|
|
33
34
|
static let timestamp: String = "timestamp"
|
|
34
35
|
static let altitudeAccuracy: String = "altitudeAccuracy"
|
|
36
|
+
static let magneticHeading: String = "magneticHeading"
|
|
37
|
+
static let trueHeading: String = "trueHeading"
|
|
38
|
+
static let headingAccuracy: String = "headingAccuracy"
|
|
39
|
+
static let course: String = "course"
|
|
35
40
|
}
|
|
36
41
|
}
|
|
@@ -10,6 +10,7 @@ enum GeolocationError: Error {
|
|
|
10
10
|
case permissionRestricted
|
|
11
11
|
case positionUnavailable
|
|
12
12
|
case inputArgumentsIssue(target: GeolocationMethod)
|
|
13
|
+
case timeout
|
|
13
14
|
|
|
14
15
|
func toCodeMessagePair() -> (String, String) {
|
|
15
16
|
("OS-PLUG-GLOC-\(String(format: "%04d", code))", description)
|
|
@@ -29,16 +30,18 @@ private extension GeolocationError {
|
|
|
29
30
|
case .watchPosition: 5
|
|
30
31
|
case .clearWatch: 6
|
|
31
32
|
}
|
|
33
|
+
case .timeout: 10
|
|
32
34
|
}
|
|
33
35
|
}
|
|
34
36
|
|
|
35
37
|
var description: String {
|
|
36
38
|
switch self {
|
|
37
|
-
case .positionUnavailable: "There was
|
|
39
|
+
case .positionUnavailable: "There was an error trying to obtain the location."
|
|
38
40
|
case .permissionDenied: "Location permission request was denied."
|
|
39
41
|
case .locationServicesDisabled: "Location services are not enabled."
|
|
40
42
|
case .permissionRestricted: "Application's use of location services was restricted."
|
|
41
43
|
case .inputArgumentsIssue(let target): "The '\(target.rawValue)' input parameters aren't valid."
|
|
44
|
+
case .timeout: "Could not obtain location in time. Try with a higher timeout."
|
|
42
45
|
}
|
|
43
46
|
}
|
|
44
47
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import Capacitor
|
|
2
2
|
import IONGeolocationLib
|
|
3
|
-
|
|
3
|
+
import UIKit
|
|
4
4
|
import Combine
|
|
5
5
|
|
|
6
6
|
@objc(GeolocationPlugin)
|
|
@@ -17,6 +17,8 @@ public class GeolocationPlugin: CAPPlugin, CAPBridgedPlugin {
|
|
|
17
17
|
|
|
18
18
|
private var locationService: (any IONGLOCService)?
|
|
19
19
|
private var cancellables = Set<AnyCancellable>()
|
|
20
|
+
private var locationCancellable: AnyCancellable?
|
|
21
|
+
private var timeoutCancellable: AnyCancellable?
|
|
20
22
|
private var callbackManager: GeolocationCallbackManager?
|
|
21
23
|
private var statusInitialized = false
|
|
22
24
|
private var locationInitialized: Bool = false
|
|
@@ -24,6 +26,32 @@ public class GeolocationPlugin: CAPPlugin, CAPBridgedPlugin {
|
|
|
24
26
|
override public func load() {
|
|
25
27
|
self.locationService = IONGLOCManagerWrapper()
|
|
26
28
|
self.callbackManager = .init(capacitorBridge: bridge)
|
|
29
|
+
|
|
30
|
+
NotificationCenter.default.addObserver(
|
|
31
|
+
self,
|
|
32
|
+
selector: #selector(appDidBecomeActive),
|
|
33
|
+
name: UIApplication.didBecomeActiveNotification,
|
|
34
|
+
object: nil
|
|
35
|
+
)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
@objc private func appDidBecomeActive() {
|
|
39
|
+
if let watchCallbacksEmpty = callbackManager?.watchCallbacks.isEmpty, !watchCallbacksEmpty {
|
|
40
|
+
print("App became active. Restarting location monitoring for watch callbacks.")
|
|
41
|
+
locationCancellable?.cancel()
|
|
42
|
+
locationCancellable = nil
|
|
43
|
+
timeoutCancellable?.cancel()
|
|
44
|
+
timeoutCancellable = nil
|
|
45
|
+
locationInitialized = false
|
|
46
|
+
|
|
47
|
+
locationService?.stopMonitoringLocation()
|
|
48
|
+
locationService?.startMonitoringLocation(options: IONGLOCRequestOptionsModel(timeout: callbackManager?.timeout))
|
|
49
|
+
bindLocationPublisher()
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
deinit {
|
|
54
|
+
NotificationCenter.default.removeObserver(self)
|
|
27
55
|
}
|
|
28
56
|
|
|
29
57
|
@objc func getCurrentPosition(_ call: CAPPluginCall) {
|
|
@@ -49,6 +77,11 @@ public class GeolocationPlugin: CAPPlugin, CAPBridgedPlugin {
|
|
|
49
77
|
|
|
50
78
|
if (callbackManager?.watchCallbacks.isEmpty) ?? false {
|
|
51
79
|
locationService?.stopMonitoringLocation()
|
|
80
|
+
locationCancellable?.cancel()
|
|
81
|
+
locationCancellable = nil
|
|
82
|
+
timeoutCancellable?.cancel()
|
|
83
|
+
timeoutCancellable = nil
|
|
84
|
+
locationInitialized = false
|
|
52
85
|
}
|
|
53
86
|
|
|
54
87
|
callbackManager?.sendSuccess(call)
|
|
@@ -113,18 +146,23 @@ private extension GeolocationPlugin {
|
|
|
113
146
|
func bindLocationPublisher() {
|
|
114
147
|
guard !locationInitialized else { return }
|
|
115
148
|
locationInitialized = true
|
|
116
|
-
locationService?.currentLocationPublisher
|
|
117
|
-
.
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
149
|
+
locationCancellable = locationService?.currentLocationPublisher
|
|
150
|
+
.catch { [weak self] error -> AnyPublisher<IONGLOCPositionModel, Never> in
|
|
151
|
+
print("An error was found while retrieving the location: \(error)")
|
|
152
|
+
self?.callbackManager?.sendError(.positionUnavailable)
|
|
153
|
+
return Empty<IONGLOCPositionModel, Never>().eraseToAnyPublisher()
|
|
154
|
+
}
|
|
155
|
+
.sink(receiveValue: { [weak self] position in
|
|
156
|
+
self?.callbackManager?.sendSuccess(with: position)
|
|
157
|
+
})
|
|
158
|
+
timeoutCancellable = locationService?.locationTimeoutPublisher
|
|
159
|
+
.sink(receiveValue: { [weak self] error in
|
|
160
|
+
if case .timeout = error {
|
|
161
|
+
self?.callbackManager?.sendError(.timeout)
|
|
162
|
+
} else {
|
|
122
163
|
self?.callbackManager?.sendError(.positionUnavailable)
|
|
123
164
|
}
|
|
124
|
-
}, receiveValue: { [weak self] position in
|
|
125
|
-
self?.callbackManager?.sendSuccess(with: position)
|
|
126
165
|
})
|
|
127
|
-
.store(in: &cancellables)
|
|
128
166
|
}
|
|
129
167
|
|
|
130
168
|
func requestLocationAuthorisation(type requestType: IONGLOCAuthorisationRequestType) {
|
|
@@ -165,14 +203,15 @@ private extension GeolocationPlugin {
|
|
|
165
203
|
callbackManager?.sendRequestPermissionsSuccess(Constants.AuthorisationStatus.Status.granted)
|
|
166
204
|
}
|
|
167
205
|
if shouldRequestCurrentPosition {
|
|
168
|
-
locationService?.requestSingleLocation()
|
|
206
|
+
locationService?.requestSingleLocation(options: IONGLOCRequestOptionsModel(timeout: callbackManager?.timeout))
|
|
169
207
|
}
|
|
170
208
|
if shouldRequestLocationMonitoring {
|
|
171
|
-
locationService?.startMonitoringLocation()
|
|
209
|
+
locationService?.startMonitoringLocation(options: IONGLOCRequestOptionsModel(timeout: callbackManager?.timeout))
|
|
172
210
|
}
|
|
173
211
|
}
|
|
174
212
|
|
|
175
213
|
func handleLocationRequest(_ enableHighAccuracy: Bool, watchUUID: String? = nil, call: CAPPluginCall) {
|
|
214
|
+
bindLocationPublisher()
|
|
176
215
|
let configurationModel = IONGLOCConfigurationModel(enableHighAccuracy: enableHighAccuracy)
|
|
177
216
|
locationService?.updateConfiguration(configurationModel)
|
|
178
217
|
|
|
@@ -4,15 +4,20 @@ import IONGeolocationLib
|
|
|
4
4
|
extension IONGLOCPositionModel {
|
|
5
5
|
func toJSObject() -> JSObject {
|
|
6
6
|
[
|
|
7
|
-
Constants.Position.timestamp:
|
|
7
|
+
Constants.Position.timestamp: NSNull(),
|
|
8
8
|
Constants.Position.coords: coordsJSObject
|
|
9
9
|
]
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
private var coordsJSObject: JSObject {
|
|
13
|
-
|
|
13
|
+
let headingValue = trueHeading ?? magneticHeading ?? (course != -1.0 ? course : nil)
|
|
14
|
+
return [
|
|
14
15
|
Constants.Position.altitude: altitude,
|
|
15
|
-
Constants.Position.heading:
|
|
16
|
+
Constants.Position.heading: headingValue ?? NSNull(),
|
|
17
|
+
Constants.Position.magneticHeading: magneticHeading ?? NSNull(),
|
|
18
|
+
Constants.Position.trueHeading: trueHeading ?? NSNull(),
|
|
19
|
+
Constants.Position.headingAccuracy: headingAccuracy ?? NSNull(),
|
|
20
|
+
Constants.Position.course: course != -1.0 ? course : NSNull(),
|
|
16
21
|
Constants.Position.accuracy: horizontalAccuracy,
|
|
17
22
|
Constants.Position.latitude: latitude,
|
|
18
23
|
Constants.Position.longitude: longitude,
|