@josuelmm/capacitor-background-geolocation 1.0.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/JosuelmmCapacitorBackgroundGeolocation.podspec +34 -0
- package/LICENSE +17 -0
- package/NOTICE.md +32 -0
- package/Package.swift +45 -0
- package/README.md +402 -0
- package/android/build.gradle +79 -0
- package/android/proguard-rules.pro +1 -0
- package/android/src/main/AndroidManifest.xml +83 -0
- package/android/src/main/java/com/evgenii/jsevaluator/HandlerWrapper.java +18 -0
- package/android/src/main/java/com/evgenii/jsevaluator/JavaScriptInterface.java +22 -0
- package/android/src/main/java/com/evgenii/jsevaluator/JsEvaluator.java +133 -0
- package/android/src/main/java/com/evgenii/jsevaluator/JsFunctionCallFormatter.java +37 -0
- package/android/src/main/java/com/evgenii/jsevaluator/WebViewWrapper.java +71 -0
- package/android/src/main/java/com/evgenii/jsevaluator/interfaces/CallJavaResultInterface.java +8 -0
- package/android/src/main/java/com/evgenii/jsevaluator/interfaces/HandlerWrapperInterface.java +5 -0
- package/android/src/main/java/com/evgenii/jsevaluator/interfaces/JsCallback.java +10 -0
- package/android/src/main/java/com/evgenii/jsevaluator/interfaces/JsEvaluatorInterface.java +18 -0
- package/android/src/main/java/com/evgenii/jsevaluator/interfaces/WebViewWrapperInterface.java +14 -0
- package/android/src/main/java/com/josuelmm/capacitor/backgroundgeolocation/BackgroundGeolocationPlugin.java +898 -0
- package/android/src/main/java/com/josuelmm/capacitor/backgroundgeolocation/ConfigMapper.java +303 -0
- package/android/src/main/java/com/josuelmm/capacitor/backgroundgeolocation/HeadlessTaskRegistry.java +34 -0
- package/android/src/main/java/com/josuelmm/capacitor/backgroundgeolocation/JsEvaluatorTaskRunner.java +63 -0
- package/android/src/main/java/com/marianhello/bgloc/BackgroundGeolocationFacade.java +699 -0
- package/android/src/main/java/com/marianhello/bgloc/BootCompletedReceiver.java +103 -0
- package/android/src/main/java/com/marianhello/bgloc/Config.java +1155 -0
- package/android/src/main/java/com/marianhello/bgloc/ConnectivityListener.java +5 -0
- package/android/src/main/java/com/marianhello/bgloc/HttpPostService.java +362 -0
- package/android/src/main/java/com/marianhello/bgloc/LocationManager.java +138 -0
- package/android/src/main/java/com/marianhello/bgloc/PluginDelegate.java +45 -0
- package/android/src/main/java/com/marianhello/bgloc/PluginException.java +38 -0
- package/android/src/main/java/com/marianhello/bgloc/PostLocationTask.java +238 -0
- package/android/src/main/java/com/marianhello/bgloc/ResourceResolver.java +55 -0
- package/android/src/main/java/com/marianhello/bgloc/data/AbstractLocationTemplate.java +69 -0
- package/android/src/main/java/com/marianhello/bgloc/data/ArrayListLocationTemplate.java +88 -0
- package/android/src/main/java/com/marianhello/bgloc/data/BackgroundActivity.java +108 -0
- package/android/src/main/java/com/marianhello/bgloc/data/BackgroundLocation.java +1088 -0
- package/android/src/main/java/com/marianhello/bgloc/data/ConfigJsonMapper.java +211 -0
- package/android/src/main/java/com/marianhello/bgloc/data/ConfigurationDAO.java +13 -0
- package/android/src/main/java/com/marianhello/bgloc/data/DAOFactory.java +17 -0
- package/android/src/main/java/com/marianhello/bgloc/data/HashMapLocationTemplate.java +82 -0
- package/android/src/main/java/com/marianhello/bgloc/data/LocationDAO.java +27 -0
- package/android/src/main/java/com/marianhello/bgloc/data/LocationTemplate.java +12 -0
- package/android/src/main/java/com/marianhello/bgloc/data/LocationTemplateFactory.java +71 -0
- package/android/src/main/java/com/marianhello/bgloc/data/LocationTransform.java +19 -0
- package/android/src/main/java/com/marianhello/bgloc/data/SessionLocationDAO.java +18 -0
- package/android/src/main/java/com/marianhello/bgloc/data/provider/ContentProviderLocationDAO.java +406 -0
- package/android/src/main/java/com/marianhello/bgloc/data/provider/LocationContentProvider.java +321 -0
- package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteConfigurationContract.java +94 -0
- package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteConfigurationDAO.java +227 -0
- package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteLocationContract.java +122 -0
- package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteLocationDAO.java +550 -0
- package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteOpenHelper.java +189 -0
- package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteSessionContract.java +74 -0
- package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteSessionLocationDAO.java +169 -0
- package/android/src/main/java/com/marianhello/bgloc/driving/DrivingEventsDetector.java +265 -0
- package/android/src/main/java/com/marianhello/bgloc/headless/AbstractTaskRunner.java +15 -0
- package/android/src/main/java/com/marianhello/bgloc/headless/ActivityTask.java +48 -0
- package/android/src/main/java/com/marianhello/bgloc/headless/JsCallback.java +10 -0
- package/android/src/main/java/com/marianhello/bgloc/headless/LocationTask.java +60 -0
- package/android/src/main/java/com/marianhello/bgloc/headless/StationaryTask.java +25 -0
- package/android/src/main/java/com/marianhello/bgloc/headless/Task.java +8 -0
- package/android/src/main/java/com/marianhello/bgloc/headless/TaskRunner.java +5 -0
- package/android/src/main/java/com/marianhello/bgloc/headless/TaskRunnerFactory.java +8 -0
- package/android/src/main/java/com/marianhello/bgloc/http/UrlTemplateResolver.java +115 -0
- package/android/src/main/java/com/marianhello/bgloc/oem/BatteryOemHelper.java +214 -0
- package/android/src/main/java/com/marianhello/bgloc/provider/AbstractLocationProvider.java +218 -0
- package/android/src/main/java/com/marianhello/bgloc/provider/ActivityRecognitionLocationProvider.java +385 -0
- package/android/src/main/java/com/marianhello/bgloc/provider/DistanceFilterLocationProvider.java +685 -0
- package/android/src/main/java/com/marianhello/bgloc/provider/LocationProvider.java +32 -0
- package/android/src/main/java/com/marianhello/bgloc/provider/LocationProviderFactory.java +47 -0
- package/android/src/main/java/com/marianhello/bgloc/provider/ProviderDelegate.java +12 -0
- package/android/src/main/java/com/marianhello/bgloc/provider/RawLocationProvider.java +175 -0
- package/android/src/main/java/com/marianhello/bgloc/sensor/SensorFusionDetector.java +199 -0
- package/android/src/main/java/com/marianhello/bgloc/service/LocationService.java +16 -0
- package/android/src/main/java/com/marianhello/bgloc/service/LocationServiceImpl.java +1531 -0
- package/android/src/main/java/com/marianhello/bgloc/service/LocationServiceInfo.java +6 -0
- package/android/src/main/java/com/marianhello/bgloc/service/LocationServiceInfoImpl.java +41 -0
- package/android/src/main/java/com/marianhello/bgloc/service/LocationServiceIntentBuilder.java +203 -0
- package/android/src/main/java/com/marianhello/bgloc/service/LocationServiceProxy.java +156 -0
- package/android/src/main/java/com/marianhello/bgloc/sync/AccountHelper.java +39 -0
- package/android/src/main/java/com/marianhello/bgloc/sync/Authenticator.java +68 -0
- package/android/src/main/java/com/marianhello/bgloc/sync/AuthenticatorService.java +28 -0
- package/android/src/main/java/com/marianhello/bgloc/sync/BatchManager.java +311 -0
- package/android/src/main/java/com/marianhello/bgloc/sync/NotificationHelper.java +148 -0
- package/android/src/main/java/com/marianhello/bgloc/sync/SyncAdapter.java +301 -0
- package/android/src/main/java/com/marianhello/bgloc/sync/SyncService.java +68 -0
- package/android/src/main/java/com/marianhello/logging/DBLogReader.java +208 -0
- package/android/src/main/java/com/marianhello/logging/LogEntry.java +99 -0
- package/android/src/main/java/com/marianhello/logging/LoggerManager.java +70 -0
- package/android/src/main/java/com/marianhello/logging/UncaughtExceptionLogger.java +36 -0
- package/android/src/main/java/com/marianhello/utils/CloneHelper.java +22 -0
- package/android/src/main/java/com/marianhello/utils/Convert.java +56 -0
- package/android/src/main/java/com/marianhello/utils/TextUtils.java +72 -0
- package/android/src/main/java/com/marianhello/utils/ToneGenerator.java +68 -0
- package/android/src/main/java/org/apache/commons/io/Charsets.java +153 -0
- package/android/src/main/java/org/apache/commons/io/input/ReversedLinesFileReader.java +344 -0
- package/android/src/main/java/org/chromium/content/browser/ThreadUtils.java +134 -0
- package/android/src/main/java/ru/andremoniy/sqlbuilder/SqlExpression.java +398 -0
- package/android/src/main/java/ru/andremoniy/sqlbuilder/SqlSelectStatement.java +671 -0
- package/android/src/main/java/ru/andremoniy/sqlbuilder/SqlStatement.java +29 -0
- package/android/src/main/java/ru/andremoniy/utils/TextUtils.java +61 -0
- package/android/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
- package/android/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
- package/android/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
- package/android/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
- package/android/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
- package/android/src/main/res/values/strings.xml +15 -0
- package/android/src/main/res/xml/authenticator.xml +7 -0
- package/android/src/main/res/xml/syncadapter.xml +9 -0
- package/dist/esm/definitions.d.ts +1052 -0
- package/dist/esm/definitions.js +142 -0
- package/dist/esm/definitions.js.map +1 -0
- package/dist/esm/index.d.ts +8 -0
- package/dist/esm/index.js +23 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/web.d.ts +92 -0
- package/dist/esm/web.js +242 -0
- package/dist/esm/web.js.map +1 -0
- package/dist/plugin.cjs.js +415 -0
- package/dist/plugin.cjs.js.map +1 -0
- package/dist/plugin.js +418 -0
- package/dist/plugin.js.map +1 -0
- package/ios/Sources/BackgroundGeolocationPlugin/BackgroundGeolocationPlugin-Bridging-Header.h +18 -0
- package/ios/Sources/BackgroundGeolocationPlugin/BackgroundGeolocationPlugin.m +52 -0
- package/ios/Sources/BackgroundGeolocationPlugin/BackgroundGeolocationPlugin.swift +750 -0
- package/ios/Tests/BackgroundGeolocationPluginTests/BackgroundGeolocationPluginTests.swift +12 -0
- package/ios/common/BackgroundGeolocation/CocoaLumberjack.h +1945 -0
- package/ios/common/BackgroundGeolocation/CocoaLumberjack.m +5255 -0
- package/ios/common/BackgroundGeolocation/FMDB.h +2357 -0
- package/ios/common/BackgroundGeolocation/FMDB.m +2672 -0
- package/ios/common/BackgroundGeolocation/FMDBLogger.h +42 -0
- package/ios/common/BackgroundGeolocation/FMDBLogger.m +264 -0
- package/ios/common/BackgroundGeolocation/INTULocationManager/INTUHeadingRequest.h +41 -0
- package/ios/common/BackgroundGeolocation/INTULocationManager/INTUHeadingRequest.m +68 -0
- package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationManager+Internal.h +33 -0
- package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationManager.h +178 -0
- package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationManager.m +1025 -0
- package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationRequest.h +103 -0
- package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationRequest.m +238 -0
- package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationRequestDefines.h +163 -0
- package/ios/common/BackgroundGeolocation/INTULocationManager/INTURequestIDGenerator.h +39 -0
- package/ios/common/BackgroundGeolocation/INTULocationManager/INTURequestIDGenerator.m +37 -0
- package/ios/common/BackgroundGeolocation/MAURAbstractLocationProvider.h +51 -0
- package/ios/common/BackgroundGeolocation/MAURAbstractLocationProvider.m +53 -0
- package/ios/common/BackgroundGeolocation/MAURActivity.h +23 -0
- package/ios/common/BackgroundGeolocation/MAURActivity.m +52 -0
- package/ios/common/BackgroundGeolocation/MAURActivityLocationProvider.h +18 -0
- package/ios/common/BackgroundGeolocation/MAURActivityLocationProvider.m +340 -0
- package/ios/common/BackgroundGeolocation/MAURBackgroundGeolocationFacade.h +88 -0
- package/ios/common/BackgroundGeolocation/MAURBackgroundGeolocationFacade.m +1193 -0
- package/ios/common/BackgroundGeolocation/MAURBackgroundSync.h +46 -0
- package/ios/common/BackgroundGeolocation/MAURBackgroundSync.m +283 -0
- package/ios/common/BackgroundGeolocation/MAURBackgroundTaskManager.h +25 -0
- package/ios/common/BackgroundGeolocation/MAURBackgroundTaskManager.m +105 -0
- package/ios/common/BackgroundGeolocation/MAURConfig.h +99 -0
- package/ios/common/BackgroundGeolocation/MAURConfig.m +636 -0
- package/ios/common/BackgroundGeolocation/MAURConfigurationContract.h +53 -0
- package/ios/common/BackgroundGeolocation/MAURConfigurationContract.m +54 -0
- package/ios/common/BackgroundGeolocation/MAURDistanceFilterLocationProvider.h +20 -0
- package/ios/common/BackgroundGeolocation/MAURDistanceFilterLocationProvider.m +550 -0
- package/ios/common/BackgroundGeolocation/MAURGeolocationOpenHelper.h +17 -0
- package/ios/common/BackgroundGeolocation/MAURGeolocationOpenHelper.m +124 -0
- package/ios/common/BackgroundGeolocation/MAURLocation.h +73 -0
- package/ios/common/BackgroundGeolocation/MAURLocation.m +392 -0
- package/ios/common/BackgroundGeolocation/MAURLocationContract.h +38 -0
- package/ios/common/BackgroundGeolocation/MAURLocationContract.m +39 -0
- package/ios/common/BackgroundGeolocation/MAURLocationManager.h +53 -0
- package/ios/common/BackgroundGeolocation/MAURLocationManager.m +305 -0
- package/ios/common/BackgroundGeolocation/MAURLogReader.h +26 -0
- package/ios/common/BackgroundGeolocation/MAURLogReader.m +122 -0
- package/ios/common/BackgroundGeolocation/MAURLogging.h +19 -0
- package/ios/common/BackgroundGeolocation/MAURPostLocationTask.h +53 -0
- package/ios/common/BackgroundGeolocation/MAURPostLocationTask.m +367 -0
- package/ios/common/BackgroundGeolocation/MAURProviderDelegate.h +52 -0
- package/ios/common/BackgroundGeolocation/MAURRawLocationProvider.h +18 -0
- package/ios/common/BackgroundGeolocation/MAURRawLocationProvider.m +138 -0
- package/ios/common/BackgroundGeolocation/MAURSQLiteConfigurationDAO.h +26 -0
- package/ios/common/BackgroundGeolocation/MAURSQLiteConfigurationDAO.m +335 -0
- package/ios/common/BackgroundGeolocation/MAURSQLiteHelper.h +57 -0
- package/ios/common/BackgroundGeolocation/MAURSQLiteHelper.m +93 -0
- package/ios/common/BackgroundGeolocation/MAURSQLiteLocationDAO.h +52 -0
- package/ios/common/BackgroundGeolocation/MAURSQLiteLocationDAO.m +520 -0
- package/ios/common/BackgroundGeolocation/MAURSQLiteOpenHelper.h +32 -0
- package/ios/common/BackgroundGeolocation/MAURSQLiteOpenHelper.m +276 -0
- package/ios/common/BackgroundGeolocation/MAURSensorFusionDetector.h +41 -0
- package/ios/common/BackgroundGeolocation/MAURSensorFusionDetector.m +137 -0
- package/ios/common/BackgroundGeolocation/MAURSessionLocationContract.h +29 -0
- package/ios/common/BackgroundGeolocation/MAURSessionLocationContract.m +31 -0
- package/ios/common/BackgroundGeolocation/MAURSessionLocationDAO.h +25 -0
- package/ios/common/BackgroundGeolocation/MAURSessionLocationDAO.m +153 -0
- package/ios/common/BackgroundGeolocation/MAURUncaughtExceptionLogger.h +20 -0
- package/ios/common/BackgroundGeolocation/MAURUncaughtExceptionLogger.m +62 -0
- package/ios/common/BackgroundGeolocation/MAURUrlTemplateResolver.h +31 -0
- package/ios/common/BackgroundGeolocation/MAURUrlTemplateResolver.m +107 -0
- package/ios/common/BackgroundGeolocation/Reachability.h +102 -0
- package/ios/common/BackgroundGeolocation/Reachability.m +475 -0
- package/ios/common/BackgroundGeolocation/SQLQueryBuilder/README.md +170 -0
- package/ios/common/BackgroundGeolocation/SQLQueryBuilder/ext/NSString+ZIMString.h +55 -0
- package/ios/common/BackgroundGeolocation/SQLQueryBuilder/ext/NSString+ZIMString.m +47 -0
- package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlDataManipulationCommand.h +27 -0
- package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlExpression.h +250 -0
- package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlExpression.m +259 -0
- package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlSelectStatement.h +360 -0
- package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlSelectStatement.m +427 -0
- package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlStatement.h +37 -0
- package/ios/common/BackgroundGeolocation/module.modulemap +16 -0
- package/package.json +82 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//
|
|
2
|
+
// MAURUncaughtExceptionLogger.h
|
|
3
|
+
// BackgroundGeolocation
|
|
4
|
+
//
|
|
5
|
+
// Created by Marian Hello on 11/04/2018.
|
|
6
|
+
// Copyright © 2018 mauron85. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
#ifndef MAURUncaughtExceptionLogger_h
|
|
10
|
+
#define MAURUncaughtExceptionLogger_h
|
|
11
|
+
|
|
12
|
+
typedef struct
|
|
13
|
+
{
|
|
14
|
+
void (*setEnabled)(bool isEnabled);
|
|
15
|
+
bool (*isEnabled)(void);
|
|
16
|
+
} MAHUncaughtExceptionLogger;
|
|
17
|
+
|
|
18
|
+
MAHUncaughtExceptionLogger* mah_get_uncaught_exception_logger(void);
|
|
19
|
+
|
|
20
|
+
#endif /* MAURUncaughtExceptionLogger_h */
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
//
|
|
2
|
+
// MAURUncaughtExceptionLogger.m
|
|
3
|
+
// BackgroundGeolocation
|
|
4
|
+
//
|
|
5
|
+
// Created by Marian Hello on 12/04/2018.
|
|
6
|
+
// Based on https://github.com/kstenerud/KSCrash
|
|
7
|
+
//
|
|
8
|
+
// TODO: consider use of https://plcrashreporter.org
|
|
9
|
+
// TODO: consider use of https://github.com/kstenerud/KSCrash
|
|
10
|
+
// TODO: trap SIGSEGV, SIGBUS, … signals
|
|
11
|
+
// https://creativeinaustria.wordpress.com/2008/10/20/crash-reporter-for-iphone-applications-part-2/
|
|
12
|
+
|
|
13
|
+
#import <Foundation/Foundation.h>
|
|
14
|
+
#import "MAURUncaughtExceptionLogger.h"
|
|
15
|
+
#import "MAURLogging.h"
|
|
16
|
+
|
|
17
|
+
static volatile bool g_isEnabled = 0;
|
|
18
|
+
|
|
19
|
+
/** The exception handler that was in place before we installed ours. */
|
|
20
|
+
static NSUncaughtExceptionHandler* g_previousUncaughtExceptionHandler;
|
|
21
|
+
|
|
22
|
+
void uncaughtExceptionHandler(NSException *exception) {
|
|
23
|
+
if (g_isEnabled) {
|
|
24
|
+
// TODO: store stack trace separately
|
|
25
|
+
DDLogError(@"CRASH: %@ Stack Trace: %@", exception, [exception callStackSymbols]);
|
|
26
|
+
}
|
|
27
|
+
if (g_previousUncaughtExceptionHandler != NULL) {
|
|
28
|
+
g_previousUncaughtExceptionHandler(exception);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
static void setEnabled(bool isEnabled)
|
|
33
|
+
{
|
|
34
|
+
if (isEnabled != g_isEnabled) {
|
|
35
|
+
g_isEnabled = isEnabled;
|
|
36
|
+
if (isEnabled) {
|
|
37
|
+
DDLogDebug(@"Backing up original handler.");
|
|
38
|
+
g_previousUncaughtExceptionHandler = NSGetUncaughtExceptionHandler();
|
|
39
|
+
|
|
40
|
+
DDLogDebug(@"Setting new handler.");
|
|
41
|
+
NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
DDLogDebug(@"Restoring original handler.");
|
|
45
|
+
NSSetUncaughtExceptionHandler(g_previousUncaughtExceptionHandler);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
static bool isEnabled()
|
|
51
|
+
{
|
|
52
|
+
return g_isEnabled;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
MAHUncaughtExceptionLogger* mah_get_uncaught_exception_logger(void)
|
|
56
|
+
{
|
|
57
|
+
static MAHUncaughtExceptionLogger logger = {
|
|
58
|
+
.setEnabled = setEnabled,
|
|
59
|
+
.isEnabled = isEnabled
|
|
60
|
+
};
|
|
61
|
+
return &logger;
|
|
62
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
//
|
|
2
|
+
// MAURUrlTemplateResolver.h
|
|
3
|
+
// BackgroundGeolocation
|
|
4
|
+
//
|
|
5
|
+
// Resolves placeholders like {lat}, {lon}, {timestamp_iso}, {device_id}, ...
|
|
6
|
+
// in a URL template using a single MAURLocation and an optional queryParams dictionary.
|
|
7
|
+
//
|
|
8
|
+
// Placeholders not found in the location/queryParams are left as-is so partial templates
|
|
9
|
+
// (e.g. only static keys for batch mode) keep working.
|
|
10
|
+
//
|
|
11
|
+
|
|
12
|
+
#ifndef MAURUrlTemplateResolver_h
|
|
13
|
+
#define MAURUrlTemplateResolver_h
|
|
14
|
+
|
|
15
|
+
#import <Foundation/Foundation.h>
|
|
16
|
+
|
|
17
|
+
@class MAURLocation;
|
|
18
|
+
|
|
19
|
+
@interface MAURUrlTemplateResolver : NSObject
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Resolve placeholders in `template` using values from `location` and `queryParams`.
|
|
23
|
+
* Either may be nil. Returns the resolved URL (or the original template if no placeholders).
|
|
24
|
+
*/
|
|
25
|
+
+ (NSString *)resolve:(NSString *)urlTemplate
|
|
26
|
+
location:(MAURLocation *)location
|
|
27
|
+
queryParams:(NSDictionary *)queryParams;
|
|
28
|
+
|
|
29
|
+
@end
|
|
30
|
+
|
|
31
|
+
#endif /* MAURUrlTemplateResolver_h */
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
//
|
|
2
|
+
// MAURUrlTemplateResolver.m
|
|
3
|
+
// BackgroundGeolocation
|
|
4
|
+
//
|
|
5
|
+
|
|
6
|
+
#import "MAURUrlTemplateResolver.h"
|
|
7
|
+
#import "MAURLocation.h"
|
|
8
|
+
|
|
9
|
+
@implementation MAURUrlTemplateResolver
|
|
10
|
+
|
|
11
|
+
+ (NSString *)resolve:(NSString *)urlTemplate
|
|
12
|
+
location:(MAURLocation *)location
|
|
13
|
+
queryParams:(NSDictionary *)queryParams
|
|
14
|
+
{
|
|
15
|
+
if (urlTemplate == nil || urlTemplate.length == 0) return urlTemplate;
|
|
16
|
+
|
|
17
|
+
NSDictionary *ctx = [self buildContext:location queryParams:queryParams];
|
|
18
|
+
|
|
19
|
+
NSError *error = nil;
|
|
20
|
+
NSRegularExpression *regex = [NSRegularExpression
|
|
21
|
+
regularExpressionWithPattern:@"\\{([a-zA-Z0-9_]+)\\}"
|
|
22
|
+
options:0
|
|
23
|
+
error:&error];
|
|
24
|
+
if (regex == nil) return urlTemplate;
|
|
25
|
+
|
|
26
|
+
NSMutableString *result = [NSMutableString stringWithString:urlTemplate];
|
|
27
|
+
NSArray *matches = [regex matchesInString:urlTemplate
|
|
28
|
+
options:0
|
|
29
|
+
range:NSMakeRange(0, urlTemplate.length)];
|
|
30
|
+
|
|
31
|
+
// Iterate in reverse so ranges don't shift.
|
|
32
|
+
for (NSTextCheckingResult *match in [matches reverseObjectEnumerator]) {
|
|
33
|
+
NSString *key = [urlTemplate substringWithRange:[match rangeAtIndex:1]];
|
|
34
|
+
NSString *value = ctx[key];
|
|
35
|
+
if (value != nil) {
|
|
36
|
+
NSString *encoded = [self urlEncode:value];
|
|
37
|
+
[result replaceCharactersInRange:[match range] withString:encoded];
|
|
38
|
+
}
|
|
39
|
+
// else: leave the placeholder as-is.
|
|
40
|
+
}
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
+ (NSDictionary *)buildContext:(MAURLocation *)loc queryParams:(NSDictionary *)queryParams
|
|
45
|
+
{
|
|
46
|
+
NSMutableDictionary *ctx = [NSMutableDictionary dictionary];
|
|
47
|
+
|
|
48
|
+
// queryParams first; location-derived values can override below.
|
|
49
|
+
if (queryParams != nil) {
|
|
50
|
+
for (id key in queryParams) {
|
|
51
|
+
id value = queryParams[key];
|
|
52
|
+
if (value != nil && value != [NSNull null]) {
|
|
53
|
+
ctx[key] = [NSString stringWithFormat:@"%@", value];
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (loc != nil) {
|
|
59
|
+
if (loc.latitude != nil) {
|
|
60
|
+
ctx[@"latitude"] = [loc.latitude stringValue];
|
|
61
|
+
ctx[@"lat"] = [loc.latitude stringValue];
|
|
62
|
+
}
|
|
63
|
+
if (loc.longitude != nil) {
|
|
64
|
+
ctx[@"longitude"] = [loc.longitude stringValue];
|
|
65
|
+
ctx[@"lon"] = [loc.longitude stringValue];
|
|
66
|
+
}
|
|
67
|
+
if (loc.time != nil) {
|
|
68
|
+
long long ms = (long long)([loc.time timeIntervalSince1970] * 1000.0);
|
|
69
|
+
ctx[@"time"] = [NSString stringWithFormat:@"%lld", ms];
|
|
70
|
+
ctx[@"timestamp"] = [NSString stringWithFormat:@"%lld", ms];
|
|
71
|
+
ctx[@"timestamp_iso"] = [self isoUtc:loc.time];
|
|
72
|
+
}
|
|
73
|
+
if (loc.speed != nil) ctx[@"speed"] = [loc.speed stringValue];
|
|
74
|
+
if (loc.altitude != nil) ctx[@"altitude"] = [loc.altitude stringValue];
|
|
75
|
+
if (loc.heading != nil) ctx[@"bearing"] = [loc.heading stringValue];
|
|
76
|
+
if (loc.accuracy != nil) ctx[@"accuracy"] = [loc.accuracy stringValue];
|
|
77
|
+
if (loc.provider != nil) ctx[@"provider"] = loc.provider;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
return ctx;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
+ (NSString *)urlEncode:(NSString *)s
|
|
84
|
+
{
|
|
85
|
+
if (s == nil) return @"";
|
|
86
|
+
NSCharacterSet *allowed = [NSCharacterSet URLQueryAllowedCharacterSet];
|
|
87
|
+
NSString *enc = [s stringByAddingPercentEncodingWithAllowedCharacters:allowed];
|
|
88
|
+
// URLQueryAllowedCharacterSet leaves "+" and "&" unescaped which is unsafe in values.
|
|
89
|
+
enc = [enc stringByReplacingOccurrencesOfString:@"&" withString:@"%26"];
|
|
90
|
+
enc = [enc stringByReplacingOccurrencesOfString:@"+" withString:@"%2B"];
|
|
91
|
+
return enc != nil ? enc : s;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
+ (NSString *)isoUtc:(NSDate *)date
|
|
95
|
+
{
|
|
96
|
+
static NSDateFormatter *fmt = nil;
|
|
97
|
+
static dispatch_once_t onceToken;
|
|
98
|
+
dispatch_once(&onceToken, ^{
|
|
99
|
+
fmt = [[NSDateFormatter alloc] init];
|
|
100
|
+
fmt.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss'Z'";
|
|
101
|
+
fmt.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"];
|
|
102
|
+
fmt.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
|
|
103
|
+
});
|
|
104
|
+
return [fmt stringFromDate:date];
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
@end
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright (c) 2011, Tony Million.
|
|
3
|
+
All rights reserved.
|
|
4
|
+
|
|
5
|
+
Redistribution and use in source and binary forms, with or without
|
|
6
|
+
modification, are permitted provided that the following conditions are met:
|
|
7
|
+
|
|
8
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
|
9
|
+
list of conditions and the following disclaimer.
|
|
10
|
+
|
|
11
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
12
|
+
this list of conditions and the following disclaimer in the documentation
|
|
13
|
+
and/or other materials provided with the distribution.
|
|
14
|
+
|
|
15
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
16
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
17
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
18
|
+
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
|
19
|
+
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
20
|
+
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
21
|
+
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
22
|
+
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
23
|
+
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
24
|
+
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
25
|
+
POSSIBILITY OF SUCH DAMAGE.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
#import <Foundation/Foundation.h>
|
|
29
|
+
#import <SystemConfiguration/SystemConfiguration.h>
|
|
30
|
+
|
|
31
|
+
//! Project version number for MacOSReachability.
|
|
32
|
+
FOUNDATION_EXPORT double ReachabilityVersionNumber;
|
|
33
|
+
|
|
34
|
+
//! Project version string for MacOSReachability.
|
|
35
|
+
FOUNDATION_EXPORT const unsigned char ReachabilityVersionString[];
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Create NS_ENUM macro if it does not exist on the targeted version of iOS or OS X.
|
|
39
|
+
*
|
|
40
|
+
* @see http://nshipster.com/ns_enum-ns_options/
|
|
41
|
+
**/
|
|
42
|
+
#ifndef NS_ENUM
|
|
43
|
+
#define NS_ENUM(_type, _name) enum _name : _type _name; enum _name : _type
|
|
44
|
+
#endif
|
|
45
|
+
|
|
46
|
+
extern NSString *const kReachabilityChangedNotification;
|
|
47
|
+
|
|
48
|
+
typedef NS_ENUM(NSInteger, NetworkStatus) {
|
|
49
|
+
// Apple NetworkStatus Compatible Names.
|
|
50
|
+
NotReachable = 0,
|
|
51
|
+
ReachableViaWiFi = 2,
|
|
52
|
+
ReachableViaWWAN = 1
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
@class Reachability;
|
|
56
|
+
|
|
57
|
+
typedef void (^NetworkReachable)(Reachability * reachability);
|
|
58
|
+
typedef void (^NetworkUnreachable)(Reachability * reachability);
|
|
59
|
+
typedef void (^NetworkReachability)(Reachability * reachability, SCNetworkConnectionFlags flags);
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
@interface Reachability : NSObject
|
|
63
|
+
|
|
64
|
+
@property (nonatomic, copy) NetworkReachable reachableBlock;
|
|
65
|
+
@property (nonatomic, copy) NetworkUnreachable unreachableBlock;
|
|
66
|
+
@property (nonatomic, copy) NetworkReachability reachabilityBlock;
|
|
67
|
+
|
|
68
|
+
@property (nonatomic, assign) BOOL reachableOnWWAN;
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
+(instancetype)reachabilityWithHostname:(NSString*)hostname;
|
|
72
|
+
// This is identical to the function above, but is here to maintain
|
|
73
|
+
//compatibility with Apples original code. (see .m)
|
|
74
|
+
+(instancetype)reachabilityWithHostName:(NSString*)hostname;
|
|
75
|
+
+(instancetype)reachabilityForInternetConnection;
|
|
76
|
+
+(instancetype)reachabilityWithAddress:(void *)hostAddress;
|
|
77
|
+
+(instancetype)reachabilityForLocalWiFi;
|
|
78
|
+
|
|
79
|
+
-(instancetype)initWithReachabilityRef:(SCNetworkReachabilityRef)ref;
|
|
80
|
+
|
|
81
|
+
-(BOOL)startNotifier;
|
|
82
|
+
-(void)stopNotifier;
|
|
83
|
+
|
|
84
|
+
-(BOOL)isReachable;
|
|
85
|
+
-(BOOL)isReachableViaWWAN;
|
|
86
|
+
-(BOOL)isReachableViaWiFi;
|
|
87
|
+
|
|
88
|
+
// WWAN may be available, but not active until a connection has been established.
|
|
89
|
+
// WiFi may require a connection for VPN on Demand.
|
|
90
|
+
-(BOOL)isConnectionRequired; // Identical DDG variant.
|
|
91
|
+
-(BOOL)connectionRequired; // Apple's routine.
|
|
92
|
+
// Dynamic, on demand connection?
|
|
93
|
+
-(BOOL)isConnectionOnDemand;
|
|
94
|
+
// Is user intervention required?
|
|
95
|
+
-(BOOL)isInterventionRequired;
|
|
96
|
+
|
|
97
|
+
-(NetworkStatus)currentReachabilityStatus;
|
|
98
|
+
-(SCNetworkReachabilityFlags)reachabilityFlags;
|
|
99
|
+
-(NSString*)currentReachabilityString;
|
|
100
|
+
-(NSString*)currentReachabilityFlags;
|
|
101
|
+
|
|
102
|
+
@end
|