react-native-nitro-background-geolocation 0.1.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/NitroBackgroundGeolocation.podspec +29 -0
- package/android/CMakeLists.txt +24 -0
- package/android/build.gradle +133 -0
- package/android/src/main/AndroidManifest.xml +65 -0
- package/android/src/main/cpp/cpp-adapter.cpp +11 -0
- package/android/src/main/java/com/margelo/nitro/nitrobackgroundgeolocation/ConfigMapper.kt +332 -0
- package/android/src/main/java/com/margelo/nitro/nitrobackgroundgeolocation/HeadlessTaskRegistry.kt +23 -0
- package/android/src/main/java/com/margelo/nitro/nitrobackgroundgeolocation/HeadlessTaskService.kt +66 -0
- package/android/src/main/java/com/margelo/nitro/nitrobackgroundgeolocation/NitroBackgroundGeolocation.kt +538 -0
- package/android/src/main/java/com/margelo/nitro/nitrobackgroundgeolocation/NitroBackgroundGeolocationPackage.kt +22 -0
- package/android/src/main/java/com/margelo/nitro/nitrobackgroundgeolocation/ReactNativeHeadlessTaskRunner.kt +62 -0
- package/android/src/main/java/com/marianhello/bgloc/BackgroundGeolocationFacade.java +542 -0
- package/android/src/main/java/com/marianhello/bgloc/BootCompletedReceiver.java +59 -0
- package/android/src/main/java/com/marianhello/bgloc/Config.java +652 -0
- package/android/src/main/java/com/marianhello/bgloc/ConnectivityListener.java +5 -0
- package/android/src/main/java/com/marianhello/bgloc/HttpPostService.java +168 -0
- package/android/src/main/java/com/marianhello/bgloc/LocationManager.java +138 -0
- package/android/src/main/java/com/marianhello/bgloc/PluginDelegate.java +19 -0
- package/android/src/main/java/com/marianhello/bgloc/PluginException.java +38 -0
- package/android/src/main/java/com/marianhello/bgloc/PostLocationTask.java +186 -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 +994 -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 +22 -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 +65 -0
- package/android/src/main/java/com/marianhello/bgloc/data/LocationTransform.java +19 -0
- package/android/src/main/java/com/marianhello/bgloc/data/provider/ContentProviderLocationDAO.java +395 -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 +76 -0
- package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteConfigurationDAO.java +160 -0
- package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteLocationContract.java +112 -0
- package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteLocationDAO.java +506 -0
- package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteOpenHelper.java +151 -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 +61 -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/provider/AbstractLocationProvider.java +171 -0
- package/android/src/main/java/com/marianhello/bgloc/provider/ActivityRecognitionLocationProvider.java +280 -0
- package/android/src/main/java/com/marianhello/bgloc/provider/DistanceFilterLocationProvider.java +586 -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 +142 -0
- package/android/src/main/java/com/marianhello/bgloc/service/LocationService.java +17 -0
- package/android/src/main/java/com/marianhello/bgloc/service/LocationServiceImpl.java +760 -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 +140 -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 +246 -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 +233 -0
- package/android/src/main/java/com/marianhello/bgloc/sync/SyncService.java +68 -0
- package/android/src/main/java/com/marianhello/logging/DBLogReader.java +203 -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/values/strings.xml +6 -0
- package/android/src/main/res/xml/authenticator.xml +7 -0
- package/android/src/main/res/xml/syncadapter.xml +9 -0
- package/app.plugin.js +64 -0
- package/ios/NitroBackgroundGeolocation.swift +719 -0
- package/ios/NitroBackgroundGeolocationBootstrap.m +98 -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 +202 -0
- package/ios/common/BackgroundGeolocation/MAURBackgroundGeolocationFacade.h +62 -0
- package/ios/common/BackgroundGeolocation/MAURBackgroundGeolocationFacade.m +650 -0
- package/ios/common/BackgroundGeolocation/MAURBackgroundSync.h +34 -0
- package/ios/common/BackgroundGeolocation/MAURBackgroundSync.m +184 -0
- package/ios/common/BackgroundGeolocation/MAURBackgroundTaskManager.h +25 -0
- package/ios/common/BackgroundGeolocation/MAURBackgroundTaskManager.m +105 -0
- package/ios/common/BackgroundGeolocation/MAURConfig.h +74 -0
- package/ios/common/BackgroundGeolocation/MAURConfig.m +485 -0
- package/ios/common/BackgroundGeolocation/MAURConfigurationContract.h +49 -0
- package/ios/common/BackgroundGeolocation/MAURConfigurationContract.m +51 -0
- package/ios/common/BackgroundGeolocation/MAURDistanceFilterLocationProvider.h +20 -0
- package/ios/common/BackgroundGeolocation/MAURDistanceFilterLocationProvider.m +523 -0
- package/ios/common/BackgroundGeolocation/MAURGeolocationOpenHelper.h +17 -0
- package/ios/common/BackgroundGeolocation/MAURGeolocationOpenHelper.m +97 -0
- package/ios/common/BackgroundGeolocation/MAURLocation.h +59 -0
- package/ios/common/BackgroundGeolocation/MAURLocation.m +349 -0
- package/ios/common/BackgroundGeolocation/MAURLocationContract.h +34 -0
- package/ios/common/BackgroundGeolocation/MAURLocationContract.m +35 -0
- package/ios/common/BackgroundGeolocation/MAURLocationManager.h +53 -0
- package/ios/common/BackgroundGeolocation/MAURLocationManager.m +308 -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 +40 -0
- package/ios/common/BackgroundGeolocation/MAURPostLocationTask.m +218 -0
- package/ios/common/BackgroundGeolocation/MAURProviderDelegate.h +52 -0
- package/ios/common/BackgroundGeolocation/MAURRawLocationProvider.h +18 -0
- package/ios/common/BackgroundGeolocation/MAURRawLocationProvider.m +129 -0
- package/ios/common/BackgroundGeolocation/MAURSQLiteConfigurationDAO.h +26 -0
- package/ios/common/BackgroundGeolocation/MAURSQLiteConfigurationDAO.m +278 -0
- package/ios/common/BackgroundGeolocation/MAURSQLiteHelper.h +57 -0
- package/ios/common/BackgroundGeolocation/MAURSQLiteHelper.m +93 -0
- package/ios/common/BackgroundGeolocation/MAURSQLiteLocationDAO.h +38 -0
- package/ios/common/BackgroundGeolocation/MAURSQLiteLocationDAO.m +380 -0
- package/ios/common/BackgroundGeolocation/MAURSQLiteOpenHelper.h +32 -0
- package/ios/common/BackgroundGeolocation/MAURSQLiteOpenHelper.m +276 -0
- package/ios/common/BackgroundGeolocation/MAURUncaughtExceptionLogger.h +20 -0
- package/ios/common/BackgroundGeolocation/MAURUncaughtExceptionLogger.m +62 -0
- package/ios/common/BackgroundGeolocation/Reachability.h +102 -0
- package/ios/common/BackgroundGeolocation/Reachability.m +474 -0
- package/ios/common/BackgroundGeolocation/SOMotionDetector/SOLocationManager.h +80 -0
- package/ios/common/BackgroundGeolocation/SOMotionDetector/SOLocationManager.m +147 -0
- package/ios/common/BackgroundGeolocation/SOMotionDetector/SOMotionActivity.h +30 -0
- package/ios/common/BackgroundGeolocation/SOMotionDetector/SOMotionActivity.m +42 -0
- package/ios/common/BackgroundGeolocation/SOMotionDetector/SOMotionDetector.h +99 -0
- package/ios/common/BackgroundGeolocation/SOMotionDetector/SOMotionDetector.m +327 -0
- package/ios/common/BackgroundGeolocation/SOMotionDetector/SOStepDetector.h +44 -0
- package/ios/common/BackgroundGeolocation/SOMotionDetector/SOStepDetector.m +94 -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/lib/module/NitroBackgroundGeolocation.nitro.js +172 -0
- package/lib/module/NitroBackgroundGeolocation.nitro.js.map +1 -0
- package/lib/module/headless.js +72 -0
- package/lib/module/headless.js.map +1 -0
- package/lib/module/index.js +60 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/NitroBackgroundGeolocation.nitro.d.ts +616 -0
- package/lib/typescript/src/NitroBackgroundGeolocation.nitro.d.ts.map +1 -0
- package/lib/typescript/src/headless.d.ts +40 -0
- package/lib/typescript/src/headless.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +8 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/nitro.json +23 -0
- package/nitrogen/generated/android/c++/JActivity.hpp +61 -0
- package/nitrogen/generated/android/c++/JAuthorizationStatus.hpp +61 -0
- package/nitrogen/generated/android/c++/JBackgroundGeolocationError.hpp +61 -0
- package/nitrogen/generated/android/c++/JConfigureOptions.hpp +179 -0
- package/nitrogen/generated/android/c++/JFunc_void.hpp +75 -0
- package/nitrogen/generated/android/c++/JFunc_void_Activity.hpp +78 -0
- package/nitrogen/generated/android/c++/JFunc_void_AuthorizationStatus.hpp +77 -0
- package/nitrogen/generated/android/c++/JFunc_void_BackgroundGeolocationError.hpp +78 -0
- package/nitrogen/generated/android/c++/JFunc_void_Location.hpp +78 -0
- package/nitrogen/generated/android/c++/JFunc_void_StationaryLocation.hpp +78 -0
- package/nitrogen/generated/android/c++/JHybridNitroBackgroundGeolocationSpec.cpp +530 -0
- package/nitrogen/generated/android/c++/JHybridNitroBackgroundGeolocationSpec.hpp +90 -0
- package/nitrogen/generated/android/c++/JLocation.hpp +105 -0
- package/nitrogen/generated/android/c++/JLocationAccuracy.hpp +64 -0
- package/nitrogen/generated/android/c++/JLocationOptions.hpp +65 -0
- package/nitrogen/generated/android/c++/JLocationProvider.hpp +61 -0
- package/nitrogen/generated/android/c++/JLogEntry.hpp +73 -0
- package/nitrogen/generated/android/c++/JNativeLogLevel.hpp +67 -0
- package/nitrogen/generated/android/c++/JServiceStatus.hpp +66 -0
- package/nitrogen/generated/android/c++/JStationaryLocation.hpp +109 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_AnyMap.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_AnyMap.hpp +71 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_Boolean.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_Boolean.hpp +69 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_Double.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_Double.hpp +69 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_LocationAccuracy.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_LocationAccuracy.hpp +71 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_LocationProvider.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_LocationProvider.hpp +71 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_Map_String__String_.cpp +33 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_Map_String__String_.hpp +77 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_String.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_String.hpp +70 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Activity.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/AuthorizationStatus.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/BackgroundGeolocationError.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/ConfigureOptions.kt +182 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Func_void.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Func_void_Activity.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Func_void_AuthorizationStatus.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Func_void_BackgroundGeolocationError.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Func_void_Location.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Func_void_StationaryLocation.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/HybridNitroBackgroundGeolocationSpec.kt +218 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Location.kt +111 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/LocationAccuracy.kt +25 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/LocationOptions.kt +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/LocationProvider.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/LogEntry.kt +71 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/NativeLogLevel.kt +26 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/ServiceStatus.kt +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/StationaryLocation.kt +116 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Variant_NullType_AnyMap.kt +63 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Variant_NullType_Boolean.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Variant_NullType_Double.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Variant_NullType_LocationAccuracy.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Variant_NullType_LocationProvider.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Variant_NullType_Map_String__String_.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Variant_NullType_String.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/nitrobackgroundgeolocationOnLoad.kt +35 -0
- package/nitrogen/generated/android/nitrobackgroundgeolocation+autolinking.cmake +88 -0
- package/nitrogen/generated/android/nitrobackgroundgeolocation+autolinking.gradle +27 -0
- package/nitrogen/generated/android/nitrobackgroundgeolocationOnLoad.cpp +66 -0
- package/nitrogen/generated/android/nitrobackgroundgeolocationOnLoad.hpp +34 -0
- package/nitrogen/generated/ios/NitroBackgroundGeolocation+autolinking.rb +62 -0
- package/nitrogen/generated/ios/NitroBackgroundGeolocation-Swift-Cxx-Bridge.cpp +129 -0
- package/nitrogen/generated/ios/NitroBackgroundGeolocation-Swift-Cxx-Bridge.hpp +911 -0
- package/nitrogen/generated/ios/NitroBackgroundGeolocation-Swift-Cxx-Umbrella.hpp +88 -0
- package/nitrogen/generated/ios/NitroBackgroundGeolocationAutolinking.mm +33 -0
- package/nitrogen/generated/ios/NitroBackgroundGeolocationAutolinking.swift +26 -0
- package/nitrogen/generated/ios/c++/HybridNitroBackgroundGeolocationSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridNitroBackgroundGeolocationSpecSwift.hpp +335 -0
- package/nitrogen/generated/ios/swift/Activity.swift +34 -0
- package/nitrogen/generated/ios/swift/AuthorizationStatus.swift +44 -0
- package/nitrogen/generated/ios/swift/BackgroundGeolocationError.swift +34 -0
- package/nitrogen/generated/ios/swift/ConfigureOptions.swift +1037 -0
- package/nitrogen/generated/ios/swift/Func_void.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_Activity.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_AuthorizationStatus.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_BackgroundGeolocationError.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_ConfigureOptions.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_Location.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_ServiceStatus.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_StationaryLocation.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__optional_StationaryLocation_.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_Location_.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_LogEntry_.swift +46 -0
- package/nitrogen/generated/ios/swift/HybridNitroBackgroundGeolocationSpec.swift +82 -0
- package/nitrogen/generated/ios/swift/HybridNitroBackgroundGeolocationSpec_cxx.swift +675 -0
- package/nitrogen/generated/ios/swift/Location.swift +89 -0
- package/nitrogen/generated/ios/swift/LocationAccuracy.swift +48 -0
- package/nitrogen/generated/ios/swift/LocationOptions.swift +78 -0
- package/nitrogen/generated/ios/swift/LocationProvider.swift +44 -0
- package/nitrogen/generated/ios/swift/LogEntry.swift +49 -0
- package/nitrogen/generated/ios/swift/NativeLogLevel.swift +52 -0
- package/nitrogen/generated/ios/swift/ServiceStatus.swift +39 -0
- package/nitrogen/generated/ios/swift/StationaryLocation.swift +94 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_AnyMap.swift +30 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_Bool.swift +30 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_Dictionary_String__String_.swift +30 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_Double.swift +30 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_LocationAccuracy.swift +30 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_LocationProvider.swift +30 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_String.swift +30 -0
- package/nitrogen/generated/shared/c++/Activity.hpp +87 -0
- package/nitrogen/generated/shared/c++/AuthorizationStatus.hpp +63 -0
- package/nitrogen/generated/shared/c++/BackgroundGeolocationError.hpp +87 -0
- package/nitrogen/generated/shared/c++/ConfigureOptions.hpp +197 -0
- package/nitrogen/generated/shared/c++/HybridNitroBackgroundGeolocationSpec.cpp +48 -0
- package/nitrogen/generated/shared/c++/HybridNitroBackgroundGeolocationSpec.hpp +121 -0
- package/nitrogen/generated/shared/c++/Location.hpp +131 -0
- package/nitrogen/generated/shared/c++/LocationAccuracy.hpp +69 -0
- package/nitrogen/generated/shared/c++/LocationOptions.hpp +91 -0
- package/nitrogen/generated/shared/c++/LocationProvider.hpp +63 -0
- package/nitrogen/generated/shared/c++/LogEntry.hpp +99 -0
- package/nitrogen/generated/shared/c++/NativeLogLevel.hpp +65 -0
- package/nitrogen/generated/shared/c++/ServiceStatus.hpp +92 -0
- package/nitrogen/generated/shared/c++/StationaryLocation.hpp +135 -0
- package/package.json +112 -0
- package/react-native.config.js +10 -0
- package/src/NitroBackgroundGeolocation.nitro.ts +656 -0
- package/src/headless.ts +91 -0
- package/src/index.tsx +100 -0
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
//
|
|
2
|
+
// MAURSQLiteLocationDAO.m
|
|
3
|
+
// BackgroundGeolocation
|
|
4
|
+
//
|
|
5
|
+
// Created by Marian Hello on 10/06/16.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
#import <sqlite3.h>
|
|
9
|
+
#import <CoreLocation/CoreLocation.h>
|
|
10
|
+
#import "MAURSQLiteHelper.h"
|
|
11
|
+
#import "MAURGeolocationOpenHelper.h"
|
|
12
|
+
#import "MAURSQLiteLocationDAO.h"
|
|
13
|
+
#import "MAURLocationContract.h"
|
|
14
|
+
|
|
15
|
+
@implementation MAURSQLiteLocationDAO {
|
|
16
|
+
FMDatabaseQueue* queue;
|
|
17
|
+
MAURGeolocationOpenHelper *helper;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
#pragma mark Singleton Methods
|
|
21
|
+
|
|
22
|
+
+ (instancetype) sharedInstance
|
|
23
|
+
{
|
|
24
|
+
static MAURSQLiteLocationDAO *instance = nil;
|
|
25
|
+
static dispatch_once_t onceToken;
|
|
26
|
+
dispatch_once(&onceToken, ^{
|
|
27
|
+
instance = [[self alloc] init];
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
return instance;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
- (id) init {
|
|
34
|
+
if (self = [super init]) {
|
|
35
|
+
helper = [[MAURGeolocationOpenHelper alloc] init];
|
|
36
|
+
queue = [helper getWritableDatabase];
|
|
37
|
+
}
|
|
38
|
+
return self;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
- (NSArray<MAURLocation*>*) getValidLocations
|
|
42
|
+
{
|
|
43
|
+
__block NSMutableArray* locations = [[NSMutableArray alloc] init];
|
|
44
|
+
|
|
45
|
+
NSString *sql = [[self getLocationSelectString] stringByAppendingString: @" WHERE " @LC_COLUMN_NAME_STATUS @" = ? ORDER BY " @LC_COLUMN_NAME_RECORDED_AT];
|
|
46
|
+
|
|
47
|
+
[queue inDatabase:^(FMDatabase *database) {
|
|
48
|
+
FMResultSet *rs = [database executeQuery:sql, [NSString stringWithFormat:@"%ld", MAURLocationPostPending]];
|
|
49
|
+
while([rs next]) {
|
|
50
|
+
MAURLocation *location = [self convertToLocation:rs];
|
|
51
|
+
[locations addObject:location];
|
|
52
|
+
}
|
|
53
|
+
// TODO
|
|
54
|
+
// NSLog(@"Retrieving locations failed code: %d: message: %s", sqlite3_errcode(database), sqlite3_errmsg(database));
|
|
55
|
+
|
|
56
|
+
[rs close];
|
|
57
|
+
}];
|
|
58
|
+
|
|
59
|
+
return locations;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
- (NSArray<MAURLocation*>*) getAllLocations
|
|
63
|
+
{
|
|
64
|
+
__block NSMutableArray* locations = [[NSMutableArray alloc] init];
|
|
65
|
+
|
|
66
|
+
NSString *sql = [[self getLocationSelectString] stringByAppendingString: @" ORDER BY " @LC_COLUMN_NAME_RECORDED_AT];
|
|
67
|
+
|
|
68
|
+
[queue inDatabase:^(FMDatabase *database) {
|
|
69
|
+
FMResultSet *rs = [database executeQuery:sql];
|
|
70
|
+
while([rs next]) {
|
|
71
|
+
MAURLocation *location = [self convertToLocation:rs];
|
|
72
|
+
[locations addObject:location];
|
|
73
|
+
}
|
|
74
|
+
// TODO
|
|
75
|
+
// NSLog(@"Retrieving locations failed code: %d: message: %s", sqlite3_errcode(database), sqlite3_errmsg(database));
|
|
76
|
+
|
|
77
|
+
[rs close];
|
|
78
|
+
}];
|
|
79
|
+
|
|
80
|
+
return locations;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
- (NSArray<MAURLocation*>*) getLocationsForSync
|
|
84
|
+
{
|
|
85
|
+
__block NSMutableArray* locations = [[NSMutableArray alloc] init];
|
|
86
|
+
|
|
87
|
+
[queue inTransaction:^(FMDatabase *database, BOOL *rollback) {
|
|
88
|
+
NSString *sql = [[self getLocationSelectString] stringByAppendingString: @" WHERE " @LC_COLUMN_NAME_STATUS @" = ? ORDER BY " @LC_COLUMN_NAME_RECORDED_AT];
|
|
89
|
+
|
|
90
|
+
FMResultSet *rs = [database executeQuery:sql, [NSString stringWithFormat:@"%ld", MAURLocationPostPending]];
|
|
91
|
+
while([rs next]) {
|
|
92
|
+
MAURLocation *location = [self convertToLocation:rs];
|
|
93
|
+
[locations addObject:location];
|
|
94
|
+
}
|
|
95
|
+
[rs close];
|
|
96
|
+
|
|
97
|
+
sql = @"UPDATE " @LC_TABLE_NAME @" SET " @LC_COLUMN_NAME_STATUS @" = ?";
|
|
98
|
+
if (![database executeUpdate:sql, [NSString stringWithFormat:@"%ld", MAURLocationDeleted]]) {
|
|
99
|
+
NSLog(@"Deleting all location failed code: %d: message: %@", [database lastErrorCode], [database lastErrorMessage]);
|
|
100
|
+
}
|
|
101
|
+
}];
|
|
102
|
+
|
|
103
|
+
return locations;
|
|
104
|
+
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
- (NSNumber*) getLocationsForSyncCount
|
|
108
|
+
{
|
|
109
|
+
__block NSNumber* rowCount = nil;
|
|
110
|
+
|
|
111
|
+
[queue inTransaction:^(FMDatabase *database, BOOL *rollback) {
|
|
112
|
+
NSString *sql = @"SELECT COUNT(*) FROM " @LC_TABLE_NAME @" WHERE " @LC_COLUMN_NAME_STATUS @" = ?";
|
|
113
|
+
|
|
114
|
+
FMResultSet *rs = [database executeQuery:sql, [NSString stringWithFormat:@"%ld", MAURLocationPostPending]];
|
|
115
|
+
if ([rs next]) {
|
|
116
|
+
rowCount = [NSNumber numberWithInt:[rs intForColumnIndex:0]];
|
|
117
|
+
}
|
|
118
|
+
[rs close];
|
|
119
|
+
}];
|
|
120
|
+
|
|
121
|
+
return rowCount;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
- (NSNumber*) persistLocation:(MAURLocation*)location intoDatabase:(FMDatabase*)database
|
|
125
|
+
{
|
|
126
|
+
NSNumber* locationId = nil;
|
|
127
|
+
NSTimeInterval timestamp = [[NSDate date] timeIntervalSince1970];
|
|
128
|
+
NSNumber *recordedAt = [NSNumber numberWithDouble:timestamp];
|
|
129
|
+
|
|
130
|
+
NSString *sql = @"INSERT INTO " @LC_TABLE_NAME @" ("
|
|
131
|
+
@LC_COLUMN_NAME_TIME
|
|
132
|
+
@COMMA_SEP @LC_COLUMN_NAME_ACCURACY
|
|
133
|
+
@COMMA_SEP @LC_COLUMN_NAME_SPEED
|
|
134
|
+
@COMMA_SEP @LC_COLUMN_NAME_BEARING
|
|
135
|
+
@COMMA_SEP @LC_COLUMN_NAME_ALTITUDE
|
|
136
|
+
@COMMA_SEP @LC_COLUMN_NAME_LATITUDE
|
|
137
|
+
@COMMA_SEP @LC_COLUMN_NAME_LONGITUDE
|
|
138
|
+
@COMMA_SEP @LC_COLUMN_NAME_PROVIDER
|
|
139
|
+
@COMMA_SEP @LC_COLUMN_NAME_LOCATION_PROVIDER
|
|
140
|
+
@COMMA_SEP @LC_COLUMN_NAME_STATUS
|
|
141
|
+
@COMMA_SEP @LC_COLUMN_NAME_RECORDED_AT
|
|
142
|
+
@") VALUES (?,?,?,?,?,?,?,?,?,?,?)";
|
|
143
|
+
|
|
144
|
+
BOOL success = [database executeUpdate:sql,
|
|
145
|
+
[NSNumber numberWithDouble:[location.time timeIntervalSince1970]],
|
|
146
|
+
location.accuracy,
|
|
147
|
+
location.speed,
|
|
148
|
+
location.heading,
|
|
149
|
+
location.altitude,
|
|
150
|
+
location.latitude,
|
|
151
|
+
location.longitude,
|
|
152
|
+
location.provider ?: [NSNull null],
|
|
153
|
+
location.locationProvider ?: [NSNull null],
|
|
154
|
+
location.isValid == YES ? @(1) : @(0),
|
|
155
|
+
recordedAt
|
|
156
|
+
];
|
|
157
|
+
|
|
158
|
+
if (success) {
|
|
159
|
+
locationId = [NSNumber numberWithLongLong:[database lastInsertRowId]];
|
|
160
|
+
} else {
|
|
161
|
+
NSLog(@"Inserting location %@ failed code: %d: message: %@", location.time, [database lastErrorCode], [database lastErrorMessage]);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
return locationId;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
- (NSNumber*) persistLocation:(MAURLocation*)location
|
|
168
|
+
{
|
|
169
|
+
__block NSNumber* locationId = nil;
|
|
170
|
+
|
|
171
|
+
[queue inDatabase:^(FMDatabase *database) {
|
|
172
|
+
locationId = [self persistLocation:location intoDatabase:database];
|
|
173
|
+
}];
|
|
174
|
+
|
|
175
|
+
return locationId;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
- (NSNumber*) persistLocation:(MAURLocation*)location limitRows:(NSInteger)maxRows
|
|
179
|
+
{
|
|
180
|
+
__block NSNumber *locationId;
|
|
181
|
+
NSTimeInterval timestamp = [[NSDate date] timeIntervalSince1970];
|
|
182
|
+
NSNumber *recordedAt = [NSNumber numberWithDouble:timestamp];
|
|
183
|
+
|
|
184
|
+
[queue inDatabase:^(FMDatabase *database) {
|
|
185
|
+
NSInteger rowCount = 0;
|
|
186
|
+
NSString *sql = @"SELECT COUNT(*) FROM " @LC_TABLE_NAME;
|
|
187
|
+
|
|
188
|
+
FMResultSet *rs = [database executeQuery:sql];
|
|
189
|
+
if ([rs next]) {
|
|
190
|
+
rowCount = [rs intForColumnIndex:0];
|
|
191
|
+
}
|
|
192
|
+
[rs close];
|
|
193
|
+
|
|
194
|
+
if (rowCount < maxRows) {
|
|
195
|
+
locationId = [self persistLocation:location intoDatabase:database];
|
|
196
|
+
return;
|
|
197
|
+
} else if (rowCount > maxRows) {
|
|
198
|
+
sql = [NSString stringWithFormat:@"DELETE FROM %1$@ WHERE %2$@ IN (SELECT %2$@ FROM %1$@ ORDER BY %3$@ LIMIT %4$ld);VACUUM;",
|
|
199
|
+
@LC_TABLE_NAME, @LC_COLUMN_NAME_ID, @LC_COLUMN_NAME_RECORDED_AT, (rowCount - maxRows)];
|
|
200
|
+
if (![database executeStatements:sql]) {
|
|
201
|
+
NSLog(@"%@ failed code: %d: message: %@", sql, [database lastErrorCode], [database lastErrorMessage]);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
// get oldest location id to be overwritten
|
|
206
|
+
sql = @"SELECT MIN(" @LC_COLUMN_NAME_ID ") FROM " @LC_TABLE_NAME @" WHERE " @LC_COLUMN_NAME_RECORDED_AT
|
|
207
|
+
@" = (SELECT min(" @LC_COLUMN_NAME_RECORDED_AT @") FROM " @LC_TABLE_NAME @" )";
|
|
208
|
+
rs = [database executeQuery:sql];
|
|
209
|
+
if ([rs next]) {
|
|
210
|
+
locationId = [NSNumber numberWithLongLong:[rs longLongIntForColumnIndex:0]];
|
|
211
|
+
}
|
|
212
|
+
[rs close];
|
|
213
|
+
|
|
214
|
+
sql = @"UPDATE " @LC_TABLE_NAME @" SET "
|
|
215
|
+
@LC_COLUMN_NAME_TIME @EQ_BIND
|
|
216
|
+
@COMMA_SEP @LC_COLUMN_NAME_ACCURACY @EQ_BIND
|
|
217
|
+
@COMMA_SEP @LC_COLUMN_NAME_SPEED @EQ_BIND
|
|
218
|
+
@COMMA_SEP @LC_COLUMN_NAME_BEARING @EQ_BIND
|
|
219
|
+
@COMMA_SEP @LC_COLUMN_NAME_ALTITUDE @EQ_BIND
|
|
220
|
+
@COMMA_SEP @LC_COLUMN_NAME_LATITUDE @EQ_BIND
|
|
221
|
+
@COMMA_SEP @LC_COLUMN_NAME_LONGITUDE @EQ_BIND
|
|
222
|
+
@COMMA_SEP @LC_COLUMN_NAME_PROVIDER @EQ_BIND
|
|
223
|
+
@COMMA_SEP @LC_COLUMN_NAME_LOCATION_PROVIDER @EQ_BIND
|
|
224
|
+
@COMMA_SEP @LC_COLUMN_NAME_STATUS @EQ_BIND
|
|
225
|
+
@COMMA_SEP @LC_COLUMN_NAME_RECORDED_AT @EQ_BIND
|
|
226
|
+
@" WHERE " @LC_COLUMN_NAME_ID @EQ_BIND;
|
|
227
|
+
|
|
228
|
+
BOOL success = [database executeUpdate:sql,
|
|
229
|
+
[NSNumber numberWithDouble:[location.time timeIntervalSince1970]],
|
|
230
|
+
location.accuracy,
|
|
231
|
+
location.speed,
|
|
232
|
+
location.heading,
|
|
233
|
+
location.altitude,
|
|
234
|
+
location.latitude,
|
|
235
|
+
location.longitude,
|
|
236
|
+
location.provider ?: [NSNull null],
|
|
237
|
+
location.locationProvider ?: [NSNull null],
|
|
238
|
+
location.isValid == YES ? @(1) : @(0),
|
|
239
|
+
recordedAt,
|
|
240
|
+
locationId
|
|
241
|
+
];
|
|
242
|
+
|
|
243
|
+
if (!success) {
|
|
244
|
+
NSLog(@"Inserting location %@ failed code: %d: message: %@", location.time, [database lastErrorCode], [database lastErrorMessage]);
|
|
245
|
+
locationId = [NSNumber numberWithInt:-1];
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
}];
|
|
249
|
+
|
|
250
|
+
return locationId;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
- (BOOL) deleteLocation:(NSNumber*)locationId error:(NSError * __autoreleasing *)outError
|
|
254
|
+
{
|
|
255
|
+
__block BOOL success;
|
|
256
|
+
NSString *sql = @"UPDATE " @LC_TABLE_NAME @" SET " @LC_COLUMN_NAME_STATUS @" = ? WHERE " @LC_COLUMN_NAME_ID @" = ?";
|
|
257
|
+
|
|
258
|
+
[queue inDatabase:^(FMDatabase *database) {
|
|
259
|
+
if ([database executeUpdate:sql, [NSString stringWithFormat:@"%ld", MAURLocationDeleted], locationId]) {
|
|
260
|
+
success = YES;
|
|
261
|
+
} else {
|
|
262
|
+
int errorCode = [database lastErrorCode];
|
|
263
|
+
NSString *errorMessage = [database lastErrorMessage];
|
|
264
|
+
NSLog(@"Delete location %@ failed code: %d: message: %@", locationId, errorCode, errorMessage);
|
|
265
|
+
|
|
266
|
+
if (outError != NULL) {
|
|
267
|
+
NSDictionary *errorDictionary = @{
|
|
268
|
+
NSLocalizedDescriptionKey: NSLocalizedString(errorMessage, nil)
|
|
269
|
+
};
|
|
270
|
+
*outError = [NSError errorWithDomain:Domain code:errorCode userInfo:errorDictionary];
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
success = NO;
|
|
274
|
+
}
|
|
275
|
+
}];
|
|
276
|
+
|
|
277
|
+
return success;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
- (BOOL) deleteAllLocations:(NSError * __autoreleasing *)outError
|
|
281
|
+
{
|
|
282
|
+
__block BOOL success;
|
|
283
|
+
NSString *sql = @"UPDATE " @LC_TABLE_NAME @" SET " @LC_COLUMN_NAME_STATUS @" = ?";
|
|
284
|
+
|
|
285
|
+
[queue inDatabase:^(FMDatabase *database) {
|
|
286
|
+
if ([database executeUpdate:sql, [NSString stringWithFormat:@"%ld", MAURLocationDeleted]]) {
|
|
287
|
+
success = YES;
|
|
288
|
+
} else {
|
|
289
|
+
int errorCode = [database lastErrorCode];
|
|
290
|
+
NSString *errorMessage = [database lastErrorMessage];
|
|
291
|
+
NSLog(@"Deleting all locations failed code: %d: message: %@", errorCode, errorMessage);
|
|
292
|
+
|
|
293
|
+
if (outError != NULL) {
|
|
294
|
+
NSDictionary *errorDictionary = @{
|
|
295
|
+
NSLocalizedDescriptionKey: NSLocalizedString(errorMessage, nil)
|
|
296
|
+
};
|
|
297
|
+
*outError = [NSError errorWithDomain:Domain code:errorCode userInfo:errorDictionary];
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
success = NO;
|
|
301
|
+
}
|
|
302
|
+
}];
|
|
303
|
+
|
|
304
|
+
return success;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
- (BOOL) clearDatabase
|
|
308
|
+
{
|
|
309
|
+
__block BOOL success;
|
|
310
|
+
|
|
311
|
+
[queue inDatabase:^(FMDatabase *database) {
|
|
312
|
+
NSString *sql = [NSString stringWithFormat: @"DROP TABLE %@", @LC_TABLE_NAME];
|
|
313
|
+
if (![database executeStatements:sql]) {
|
|
314
|
+
NSLog(@"%@ failed code: %d: message: %@", sql, [database lastErrorCode], [database lastErrorMessage]);
|
|
315
|
+
}
|
|
316
|
+
sql = [MAURLocationContract createTableSQL];
|
|
317
|
+
if (![database executeStatements:sql]) {
|
|
318
|
+
NSLog(@"%@ failed code: %d: message: %@", sql, [database lastErrorCode], [database lastErrorMessage]);
|
|
319
|
+
success = NO;
|
|
320
|
+
} else {
|
|
321
|
+
success = YES;
|
|
322
|
+
}
|
|
323
|
+
}];
|
|
324
|
+
|
|
325
|
+
return success;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
- (NSString*) getDatabaseName
|
|
329
|
+
{
|
|
330
|
+
return [helper getDatabaseName];
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
- (NSString*) getDatabasePath
|
|
334
|
+
{
|
|
335
|
+
return [helper getDatabasePath];
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
- (NSString*) getLocationSelectString {
|
|
339
|
+
return @"SELECT " @LC_COLUMN_NAME_ID
|
|
340
|
+
@COMMA_SEP @LC_COLUMN_NAME_TIME
|
|
341
|
+
@COMMA_SEP @LC_COLUMN_NAME_ACCURACY
|
|
342
|
+
@COMMA_SEP @LC_COLUMN_NAME_SPEED
|
|
343
|
+
@COMMA_SEP @LC_COLUMN_NAME_BEARING
|
|
344
|
+
@COMMA_SEP @LC_COLUMN_NAME_ALTITUDE
|
|
345
|
+
@COMMA_SEP @LC_COLUMN_NAME_LATITUDE
|
|
346
|
+
@COMMA_SEP @LC_COLUMN_NAME_LONGITUDE
|
|
347
|
+
@COMMA_SEP @LC_COLUMN_NAME_PROVIDER
|
|
348
|
+
@COMMA_SEP @LC_COLUMN_NAME_LOCATION_PROVIDER
|
|
349
|
+
@COMMA_SEP @LC_COLUMN_NAME_STATUS
|
|
350
|
+
@COMMA_SEP @LC_COLUMN_NAME_RECORDED_AT
|
|
351
|
+
@" FROM " @LC_TABLE_NAME;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
- (MAURLocation*) convertToLocation:(FMResultSet*)rs {
|
|
355
|
+
MAURLocation *location = [[MAURLocation alloc] init];
|
|
356
|
+
location.locationId = [NSNumber numberWithLongLong:[rs longLongIntForColumnIndex:0]];
|
|
357
|
+
NSTimeInterval timestamp = [rs doubleForColumnIndex:1];
|
|
358
|
+
location.time = [NSDate dateWithTimeIntervalSince1970:timestamp];
|
|
359
|
+
location.accuracy = [NSNumber numberWithDouble:[rs doubleForColumnIndex:2]];
|
|
360
|
+
location.speed = [NSNumber numberWithDouble:[rs doubleForColumnIndex:3]];
|
|
361
|
+
location.heading = [NSNumber numberWithDouble:[rs doubleForColumnIndex:4]];
|
|
362
|
+
location.altitude = [NSNumber numberWithDouble:[rs doubleForColumnIndex:5]];
|
|
363
|
+
location.latitude = [NSNumber numberWithDouble:[rs doubleForColumnIndex:6]];
|
|
364
|
+
location.longitude = [NSNumber numberWithDouble:[rs doubleForColumnIndex:7]];
|
|
365
|
+
location.provider = [rs stringForColumnIndex:8];
|
|
366
|
+
location.locationProvider = [NSNumber numberWithInt:[rs intForColumnIndex:9]];
|
|
367
|
+
location.isValid = [rs intForColumnIndex:10] == 1 ? YES : NO;
|
|
368
|
+
NSTimeInterval recordedAt = [rs longForColumnIndex:11];
|
|
369
|
+
location.recordedAt = [NSDate dateWithTimeIntervalSince1970:recordedAt];
|
|
370
|
+
return location;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
- (void) dealloc {
|
|
374
|
+
[helper close];
|
|
375
|
+
[queue close];
|
|
376
|
+
helper = nil;
|
|
377
|
+
queue = nil;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
@end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
//
|
|
2
|
+
// MAURSQLiteOpenHelper.h
|
|
3
|
+
// version: 1.0.0
|
|
4
|
+
//
|
|
5
|
+
// A helper class to manage database creation and version management.
|
|
6
|
+
// heavily inspired by Android implementation
|
|
7
|
+
// https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/database/sqlite/SQLiteOpenHelper.java
|
|
8
|
+
//
|
|
9
|
+
// Note: Not for direct use, but as subclass instead (abstract class in java terminology)
|
|
10
|
+
//
|
|
11
|
+
// Created by Marian Hello on 22/06/16.
|
|
12
|
+
//
|
|
13
|
+
|
|
14
|
+
#ifndef MAURSQLiteOpenHelper_h
|
|
15
|
+
#define MAURSQLiteOpenHelper_h
|
|
16
|
+
|
|
17
|
+
#import <Foundation/Foundation.h>
|
|
18
|
+
#import "FMDB.h"
|
|
19
|
+
|
|
20
|
+
@interface MAURSQLiteOpenHelper : NSObject
|
|
21
|
+
|
|
22
|
+
- (instancetype)init:(NSString*)name version:(NSInteger)version;
|
|
23
|
+
- (NSDictionary*) getDatabaseMetadata;
|
|
24
|
+
- (NSString*) getDatabaseName;
|
|
25
|
+
- (NSString*) getDatabasePath;
|
|
26
|
+
- (FMDatabaseQueue*) getReadableDatabase;
|
|
27
|
+
- (FMDatabaseQueue*) getWritableDatabase;
|
|
28
|
+
- (void) close;
|
|
29
|
+
|
|
30
|
+
@end
|
|
31
|
+
|
|
32
|
+
#endif /* MAURSQLiteOpenHelper_h */
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
//
|
|
2
|
+
// MAURSQLiteOpenHelper.m
|
|
3
|
+
//
|
|
4
|
+
// Created by Marian Hello on 22/06/16.
|
|
5
|
+
//
|
|
6
|
+
|
|
7
|
+
#import <Foundation/Foundation.h>
|
|
8
|
+
#import <sqlite3.h>
|
|
9
|
+
#import "MAURSQLiteHelper.h"
|
|
10
|
+
#import "MAURSQLiteOpenHelper.h"
|
|
11
|
+
|
|
12
|
+
@implementation MAURSQLiteOpenHelper {
|
|
13
|
+
FMDatabaseQueue *mQueue;
|
|
14
|
+
BOOL mIsInitializing;
|
|
15
|
+
BOOL mIsReadOnly;
|
|
16
|
+
NSInteger mNewVersion; // REMARK: never use mNewVersion < 1 in your subclasses
|
|
17
|
+
NSString* mName;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
static NSString *const metaTableName = @"__META";
|
|
21
|
+
static int const OPEN_READONLY = SQLITE_OPEN_READONLY|SQLITE_OPEN_FULLMUTEX;
|
|
22
|
+
static int const OPEN_READWRITE = SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE|SQLITE_OPEN_FULLMUTEX;
|
|
23
|
+
|
|
24
|
+
- (instancetype)init:(NSString*)name version:(NSInteger)version
|
|
25
|
+
{
|
|
26
|
+
self = [super init];
|
|
27
|
+
if (self) {
|
|
28
|
+
self->mName = name;
|
|
29
|
+
self->mNewVersion = version;
|
|
30
|
+
}
|
|
31
|
+
return self;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
- (FMDatabaseQueue*) getReadableDatabase
|
|
35
|
+
{
|
|
36
|
+
|
|
37
|
+
@synchronized(self) {
|
|
38
|
+
return [self getDatabaseLocked: NO];
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
- (FMDatabaseQueue*) getWritableDatabase
|
|
43
|
+
{
|
|
44
|
+
@synchronized(self) {
|
|
45
|
+
return [self getDatabaseLocked: YES];
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
- (FMDatabaseQueue*) getDatabaseLocked:(BOOL)writable
|
|
50
|
+
{
|
|
51
|
+
if (mQueue != nil) {
|
|
52
|
+
// TODO: add check if db was closed by user
|
|
53
|
+
return mQueue;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (mIsInitializing) {
|
|
57
|
+
@throw [NSException exceptionWithName:NSInternalInconsistencyException
|
|
58
|
+
reason:[NSString stringWithFormat:@"getDatabaseLocked called recursively"]
|
|
59
|
+
userInfo:nil];
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
FMDatabaseQueue* queue = mQueue;
|
|
63
|
+
mIsInitializing = true;
|
|
64
|
+
|
|
65
|
+
if (queue != nil) {
|
|
66
|
+
if (writable && mIsReadOnly) {
|
|
67
|
+
// TODO reopen as writable
|
|
68
|
+
}
|
|
69
|
+
} else if (mName == nil) {
|
|
70
|
+
@throw [NSException exceptionWithName:NSInternalInconsistencyException
|
|
71
|
+
reason:[NSString stringWithFormat:@"in memory database is not supported"]
|
|
72
|
+
userInfo:nil];
|
|
73
|
+
} else {
|
|
74
|
+
if (writable) {
|
|
75
|
+
queue = [self openOrCreateDatabase:mName];
|
|
76
|
+
} else {
|
|
77
|
+
queue = [self openDatabase:[self getDatabasePath] flags: OPEN_READONLY];
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
[self onConfigure:queue];
|
|
82
|
+
|
|
83
|
+
NSInteger version = [self getVersion:queue];
|
|
84
|
+
NSLog(@"Current db version: %ld", (long)version);
|
|
85
|
+
|
|
86
|
+
if (version != mNewVersion) {
|
|
87
|
+
if (version == 0) {
|
|
88
|
+
[self onCreate:queue];
|
|
89
|
+
} else {
|
|
90
|
+
if (version < mNewVersion) {
|
|
91
|
+
[self onUpgrade:queue fromVersion:version toVersion:mNewVersion];
|
|
92
|
+
} else if (version > mNewVersion) {
|
|
93
|
+
[self onDowngrade:queue fromVersion:version toVersion:mNewVersion];
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
[self setVersion:queue version:mNewVersion];
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
[self onOpen:queue];
|
|
100
|
+
|
|
101
|
+
mQueue = queue;
|
|
102
|
+
mIsInitializing = false;
|
|
103
|
+
mIsReadOnly = !writable;
|
|
104
|
+
return queue;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
- (FMDatabaseQueue*) openDatabase:(NSString*)path flags:(int)flags
|
|
108
|
+
{
|
|
109
|
+
return [FMDatabaseQueue databaseQueueWithPath:path flags:flags];
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
- (FMDatabaseQueue*) openOrCreateDatabase:(NSString*)name
|
|
113
|
+
{
|
|
114
|
+
__block BOOL isOpen;
|
|
115
|
+
FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:[self getDatabasePath:name]];
|
|
116
|
+
|
|
117
|
+
[queue inDatabase:^(FMDatabase *database) {
|
|
118
|
+
isOpen = [database open];
|
|
119
|
+
}];
|
|
120
|
+
|
|
121
|
+
if (!isOpen) {
|
|
122
|
+
return nil;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
if ([self getVersion:queue] == -1) {
|
|
126
|
+
NSArray *columns = @[
|
|
127
|
+
@{ @"name": @"id", @"type": [SQLPrimaryKeyColumnType sqlColumnWithType: kInteger]},
|
|
128
|
+
@{ @"name": @"db_version", @"type": [SQLColumnType sqlColumnWithType: kInteger]},
|
|
129
|
+
@{ @"name": @"created", @"type": [SQLColumnType sqlColumnWithType: kInteger]},
|
|
130
|
+
@{ @"name": @"last_updated", @"type": [SQLColumnType sqlColumnWithType: kInteger]}
|
|
131
|
+
];
|
|
132
|
+
|
|
133
|
+
[queue inDatabase:^(FMDatabase *database) {
|
|
134
|
+
if ([database executeStatements:[MAURSQLiteHelper createTableSqlStatement:metaTableName columns:columns]]) {
|
|
135
|
+
NSString *sql = [NSString stringWithFormat: @"INSERT INTO %@ (id,db_version,created,last_updated) VALUES (1,%d,datetime(),null)", metaTableName, 0];
|
|
136
|
+
if (![database executeUpdate:sql]) {
|
|
137
|
+
NSLog(@"%@ failed code: %d: message: %@", sql, [database lastErrorCode], [database lastErrorMessage]);
|
|
138
|
+
}
|
|
139
|
+
} else {
|
|
140
|
+
NSLog(@"Creating meta table %@ failed code: %d: message: %@", metaTableName, [database lastErrorCode], [database lastErrorMessage]);
|
|
141
|
+
}
|
|
142
|
+
}];
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
return queue;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
- (void) close
|
|
149
|
+
{
|
|
150
|
+
@synchronized(self) {
|
|
151
|
+
if (mQueue != nil) {
|
|
152
|
+
[mQueue close];
|
|
153
|
+
mQueue = nil;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
- (NSDictionary*) getDatabaseMetadata
|
|
159
|
+
{
|
|
160
|
+
FMDatabaseQueue *queue = [self getReadableDatabase];
|
|
161
|
+
NSMutableDictionary *metadata = [[NSMutableDictionary alloc] init];
|
|
162
|
+
[metadata setObject:[NSNumber numberWithInt:-1] forKey:@"dbVersion"];
|
|
163
|
+
|
|
164
|
+
NSString *sql =[NSString stringWithFormat: @"SELECT db_version, created, last_updated FROM %@ LIMIT 1", metaTableName];
|
|
165
|
+
[queue inDatabase:^(FMDatabase *database) {
|
|
166
|
+
FMResultSet *rs = [database executeQuery:sql];
|
|
167
|
+
while ([rs next]) {
|
|
168
|
+
NSNumber *dbVersion = [NSNumber numberWithInt:[rs intForColumnIndex:0]];
|
|
169
|
+
NSString *created = [rs stringForColumnIndex:1] ?: @"";
|
|
170
|
+
NSString *lastUpdated = [rs stringForColumnIndex:2] ?: @"";
|
|
171
|
+
|
|
172
|
+
[metadata setObject:dbVersion forKey:@"dbVersion"];
|
|
173
|
+
[metadata setObject:created forKey:@"created"];
|
|
174
|
+
[metadata setObject:lastUpdated forKey:@"last_updated"];
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// TODO error handling
|
|
178
|
+
// NSLog(@"Retrieving meta data failed code: %d: message: %s", sqlite3_errcode(database), sqlite3_errmsg(database));
|
|
179
|
+
[rs close];
|
|
180
|
+
|
|
181
|
+
}];
|
|
182
|
+
|
|
183
|
+
[queue close];
|
|
184
|
+
|
|
185
|
+
return metadata;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
- (NSString*) getDatabaseName
|
|
189
|
+
{
|
|
190
|
+
return mName;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
- (NSString*) getDatabasePath:(NSString*)name
|
|
194
|
+
{
|
|
195
|
+
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
|
|
196
|
+
NSString *libraryDirectory = [paths objectAtIndex:0];
|
|
197
|
+
NSString *databasePath = [[NSString alloc]initWithString:[libraryDirectory stringByAppendingPathComponent:name]];
|
|
198
|
+
|
|
199
|
+
return databasePath;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
- (NSString*) getDatabasePath
|
|
203
|
+
{
|
|
204
|
+
return [self getDatabasePath:mName];
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
- (FMDatabaseQueue*) getDatabaseQueue
|
|
208
|
+
{
|
|
209
|
+
@synchronized(self) {
|
|
210
|
+
if (mQueue == nil) {
|
|
211
|
+
mQueue = [FMDatabaseQueue databaseQueueWithPath:[self getDatabasePath]];
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
return mQueue;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
- (NSInteger) getVersion:(FMDatabaseQueue*)queue
|
|
219
|
+
{
|
|
220
|
+
__block NSInteger dbVersion = -1;
|
|
221
|
+
NSString *sql =[NSString stringWithFormat: @"SELECT db_version FROM %@", metaTableName];
|
|
222
|
+
[queue inDatabase:^(FMDatabase *database) {
|
|
223
|
+
database.logsErrors = NO;
|
|
224
|
+
NSError *lastError;
|
|
225
|
+
FMResultSet *rs = [database executeQuery:sql values:nil error:&lastError];
|
|
226
|
+
if (rs != nil) {
|
|
227
|
+
while ([rs next]) {
|
|
228
|
+
dbVersion = [rs intForColumnIndex:0];
|
|
229
|
+
}
|
|
230
|
+
[rs close];
|
|
231
|
+
} else {
|
|
232
|
+
NSLog(@"Determining db version returned error (ok for first run): %@", [lastError localizedDescription]);
|
|
233
|
+
}
|
|
234
|
+
database.logsErrors = YES;
|
|
235
|
+
}];
|
|
236
|
+
|
|
237
|
+
return dbVersion;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
- (void) setVersion:(FMDatabaseQueue*)queue version:(NSInteger)version
|
|
241
|
+
{
|
|
242
|
+
NSString *sql = [NSString stringWithFormat: @"UPDATE %@ SET db_version = %ld, last_updated = datetime()", metaTableName, (long)version];
|
|
243
|
+
[queue inDatabase:^(FMDatabase *database) {
|
|
244
|
+
if (![database executeUpdate:sql]) {
|
|
245
|
+
NSLog(@"%@ failed code: %d: message: %@", sql, [database lastErrorCode], [database lastErrorMessage]);
|
|
246
|
+
}
|
|
247
|
+
}];
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
- (void) onOpen:(FMDatabaseQueue*)database
|
|
251
|
+
{
|
|
252
|
+
// ment to be implemented in subclass
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
- (void) onConfigure:(FMDatabaseQueue*)database;
|
|
256
|
+
{
|
|
257
|
+
// ment to be implemented in subclass
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
- (void) onCreate:(FMDatabaseQueue*)database
|
|
261
|
+
{
|
|
262
|
+
// has to be implemented in subclass
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
- (void) onUpgrade:(FMDatabaseQueue*)database fromVersion:(NSInteger)oldVersion toVersion:(NSInteger)newVersion
|
|
266
|
+
{
|
|
267
|
+
// upgrade policy has to be implemented in subclass
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
- (void) onDowngrade:(FMDatabaseQueue*)database fromVersion:(NSInteger)oldVersion toVersion:(NSInteger)newVersion
|
|
271
|
+
{
|
|
272
|
+
// upgrade policy has to be implemented in subclass
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
@end
|
|
@@ -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 */
|