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.
Files changed (306) hide show
  1. package/NitroBackgroundGeolocation.podspec +29 -0
  2. package/android/CMakeLists.txt +24 -0
  3. package/android/build.gradle +133 -0
  4. package/android/src/main/AndroidManifest.xml +65 -0
  5. package/android/src/main/cpp/cpp-adapter.cpp +11 -0
  6. package/android/src/main/java/com/margelo/nitro/nitrobackgroundgeolocation/ConfigMapper.kt +332 -0
  7. package/android/src/main/java/com/margelo/nitro/nitrobackgroundgeolocation/HeadlessTaskRegistry.kt +23 -0
  8. package/android/src/main/java/com/margelo/nitro/nitrobackgroundgeolocation/HeadlessTaskService.kt +66 -0
  9. package/android/src/main/java/com/margelo/nitro/nitrobackgroundgeolocation/NitroBackgroundGeolocation.kt +538 -0
  10. package/android/src/main/java/com/margelo/nitro/nitrobackgroundgeolocation/NitroBackgroundGeolocationPackage.kt +22 -0
  11. package/android/src/main/java/com/margelo/nitro/nitrobackgroundgeolocation/ReactNativeHeadlessTaskRunner.kt +62 -0
  12. package/android/src/main/java/com/marianhello/bgloc/BackgroundGeolocationFacade.java +542 -0
  13. package/android/src/main/java/com/marianhello/bgloc/BootCompletedReceiver.java +59 -0
  14. package/android/src/main/java/com/marianhello/bgloc/Config.java +652 -0
  15. package/android/src/main/java/com/marianhello/bgloc/ConnectivityListener.java +5 -0
  16. package/android/src/main/java/com/marianhello/bgloc/HttpPostService.java +168 -0
  17. package/android/src/main/java/com/marianhello/bgloc/LocationManager.java +138 -0
  18. package/android/src/main/java/com/marianhello/bgloc/PluginDelegate.java +19 -0
  19. package/android/src/main/java/com/marianhello/bgloc/PluginException.java +38 -0
  20. package/android/src/main/java/com/marianhello/bgloc/PostLocationTask.java +186 -0
  21. package/android/src/main/java/com/marianhello/bgloc/ResourceResolver.java +55 -0
  22. package/android/src/main/java/com/marianhello/bgloc/data/AbstractLocationTemplate.java +69 -0
  23. package/android/src/main/java/com/marianhello/bgloc/data/ArrayListLocationTemplate.java +88 -0
  24. package/android/src/main/java/com/marianhello/bgloc/data/BackgroundActivity.java +108 -0
  25. package/android/src/main/java/com/marianhello/bgloc/data/BackgroundLocation.java +994 -0
  26. package/android/src/main/java/com/marianhello/bgloc/data/ConfigurationDAO.java +13 -0
  27. package/android/src/main/java/com/marianhello/bgloc/data/DAOFactory.java +17 -0
  28. package/android/src/main/java/com/marianhello/bgloc/data/HashMapLocationTemplate.java +82 -0
  29. package/android/src/main/java/com/marianhello/bgloc/data/LocationDAO.java +22 -0
  30. package/android/src/main/java/com/marianhello/bgloc/data/LocationTemplate.java +12 -0
  31. package/android/src/main/java/com/marianhello/bgloc/data/LocationTemplateFactory.java +65 -0
  32. package/android/src/main/java/com/marianhello/bgloc/data/LocationTransform.java +19 -0
  33. package/android/src/main/java/com/marianhello/bgloc/data/provider/ContentProviderLocationDAO.java +395 -0
  34. package/android/src/main/java/com/marianhello/bgloc/data/provider/LocationContentProvider.java +321 -0
  35. package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteConfigurationContract.java +76 -0
  36. package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteConfigurationDAO.java +160 -0
  37. package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteLocationContract.java +112 -0
  38. package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteLocationDAO.java +506 -0
  39. package/android/src/main/java/com/marianhello/bgloc/data/sqlite/SQLiteOpenHelper.java +151 -0
  40. package/android/src/main/java/com/marianhello/bgloc/headless/AbstractTaskRunner.java +15 -0
  41. package/android/src/main/java/com/marianhello/bgloc/headless/ActivityTask.java +48 -0
  42. package/android/src/main/java/com/marianhello/bgloc/headless/JsCallback.java +10 -0
  43. package/android/src/main/java/com/marianhello/bgloc/headless/LocationTask.java +61 -0
  44. package/android/src/main/java/com/marianhello/bgloc/headless/StationaryTask.java +25 -0
  45. package/android/src/main/java/com/marianhello/bgloc/headless/Task.java +8 -0
  46. package/android/src/main/java/com/marianhello/bgloc/headless/TaskRunner.java +5 -0
  47. package/android/src/main/java/com/marianhello/bgloc/headless/TaskRunnerFactory.java +8 -0
  48. package/android/src/main/java/com/marianhello/bgloc/provider/AbstractLocationProvider.java +171 -0
  49. package/android/src/main/java/com/marianhello/bgloc/provider/ActivityRecognitionLocationProvider.java +280 -0
  50. package/android/src/main/java/com/marianhello/bgloc/provider/DistanceFilterLocationProvider.java +586 -0
  51. package/android/src/main/java/com/marianhello/bgloc/provider/LocationProvider.java +32 -0
  52. package/android/src/main/java/com/marianhello/bgloc/provider/LocationProviderFactory.java +47 -0
  53. package/android/src/main/java/com/marianhello/bgloc/provider/ProviderDelegate.java +12 -0
  54. package/android/src/main/java/com/marianhello/bgloc/provider/RawLocationProvider.java +142 -0
  55. package/android/src/main/java/com/marianhello/bgloc/service/LocationService.java +17 -0
  56. package/android/src/main/java/com/marianhello/bgloc/service/LocationServiceImpl.java +760 -0
  57. package/android/src/main/java/com/marianhello/bgloc/service/LocationServiceInfo.java +6 -0
  58. package/android/src/main/java/com/marianhello/bgloc/service/LocationServiceInfoImpl.java +41 -0
  59. package/android/src/main/java/com/marianhello/bgloc/service/LocationServiceIntentBuilder.java +203 -0
  60. package/android/src/main/java/com/marianhello/bgloc/service/LocationServiceProxy.java +140 -0
  61. package/android/src/main/java/com/marianhello/bgloc/sync/AccountHelper.java +39 -0
  62. package/android/src/main/java/com/marianhello/bgloc/sync/Authenticator.java +68 -0
  63. package/android/src/main/java/com/marianhello/bgloc/sync/AuthenticatorService.java +28 -0
  64. package/android/src/main/java/com/marianhello/bgloc/sync/BatchManager.java +246 -0
  65. package/android/src/main/java/com/marianhello/bgloc/sync/NotificationHelper.java +148 -0
  66. package/android/src/main/java/com/marianhello/bgloc/sync/SyncAdapter.java +233 -0
  67. package/android/src/main/java/com/marianhello/bgloc/sync/SyncService.java +68 -0
  68. package/android/src/main/java/com/marianhello/logging/DBLogReader.java +203 -0
  69. package/android/src/main/java/com/marianhello/logging/LogEntry.java +99 -0
  70. package/android/src/main/java/com/marianhello/logging/LoggerManager.java +70 -0
  71. package/android/src/main/java/com/marianhello/logging/UncaughtExceptionLogger.java +36 -0
  72. package/android/src/main/java/com/marianhello/utils/CloneHelper.java +22 -0
  73. package/android/src/main/java/com/marianhello/utils/Convert.java +56 -0
  74. package/android/src/main/java/com/marianhello/utils/TextUtils.java +72 -0
  75. package/android/src/main/java/com/marianhello/utils/ToneGenerator.java +68 -0
  76. package/android/src/main/java/org/apache/commons/io/Charsets.java +153 -0
  77. package/android/src/main/java/org/apache/commons/io/input/ReversedLinesFileReader.java +344 -0
  78. package/android/src/main/java/org/chromium/content/browser/ThreadUtils.java +134 -0
  79. package/android/src/main/java/ru/andremoniy/sqlbuilder/SqlExpression.java +398 -0
  80. package/android/src/main/java/ru/andremoniy/sqlbuilder/SqlSelectStatement.java +671 -0
  81. package/android/src/main/java/ru/andremoniy/sqlbuilder/SqlStatement.java +29 -0
  82. package/android/src/main/java/ru/andremoniy/utils/TextUtils.java +61 -0
  83. package/android/src/main/res/values/strings.xml +6 -0
  84. package/android/src/main/res/xml/authenticator.xml +7 -0
  85. package/android/src/main/res/xml/syncadapter.xml +9 -0
  86. package/app.plugin.js +64 -0
  87. package/ios/NitroBackgroundGeolocation.swift +719 -0
  88. package/ios/NitroBackgroundGeolocationBootstrap.m +98 -0
  89. package/ios/common/BackgroundGeolocation/CocoaLumberjack.h +1945 -0
  90. package/ios/common/BackgroundGeolocation/CocoaLumberjack.m +5255 -0
  91. package/ios/common/BackgroundGeolocation/FMDB.h +2357 -0
  92. package/ios/common/BackgroundGeolocation/FMDB.m +2672 -0
  93. package/ios/common/BackgroundGeolocation/FMDBLogger.h +42 -0
  94. package/ios/common/BackgroundGeolocation/FMDBLogger.m +264 -0
  95. package/ios/common/BackgroundGeolocation/INTULocationManager/INTUHeadingRequest.h +41 -0
  96. package/ios/common/BackgroundGeolocation/INTULocationManager/INTUHeadingRequest.m +68 -0
  97. package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationManager+Internal.h +33 -0
  98. package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationManager.h +178 -0
  99. package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationManager.m +1025 -0
  100. package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationRequest.h +103 -0
  101. package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationRequest.m +238 -0
  102. package/ios/common/BackgroundGeolocation/INTULocationManager/INTULocationRequestDefines.h +163 -0
  103. package/ios/common/BackgroundGeolocation/INTULocationManager/INTURequestIDGenerator.h +39 -0
  104. package/ios/common/BackgroundGeolocation/INTULocationManager/INTURequestIDGenerator.m +37 -0
  105. package/ios/common/BackgroundGeolocation/MAURAbstractLocationProvider.h +51 -0
  106. package/ios/common/BackgroundGeolocation/MAURAbstractLocationProvider.m +53 -0
  107. package/ios/common/BackgroundGeolocation/MAURActivity.h +23 -0
  108. package/ios/common/BackgroundGeolocation/MAURActivity.m +52 -0
  109. package/ios/common/BackgroundGeolocation/MAURActivityLocationProvider.h +18 -0
  110. package/ios/common/BackgroundGeolocation/MAURActivityLocationProvider.m +202 -0
  111. package/ios/common/BackgroundGeolocation/MAURBackgroundGeolocationFacade.h +62 -0
  112. package/ios/common/BackgroundGeolocation/MAURBackgroundGeolocationFacade.m +650 -0
  113. package/ios/common/BackgroundGeolocation/MAURBackgroundSync.h +34 -0
  114. package/ios/common/BackgroundGeolocation/MAURBackgroundSync.m +184 -0
  115. package/ios/common/BackgroundGeolocation/MAURBackgroundTaskManager.h +25 -0
  116. package/ios/common/BackgroundGeolocation/MAURBackgroundTaskManager.m +105 -0
  117. package/ios/common/BackgroundGeolocation/MAURConfig.h +74 -0
  118. package/ios/common/BackgroundGeolocation/MAURConfig.m +485 -0
  119. package/ios/common/BackgroundGeolocation/MAURConfigurationContract.h +49 -0
  120. package/ios/common/BackgroundGeolocation/MAURConfigurationContract.m +51 -0
  121. package/ios/common/BackgroundGeolocation/MAURDistanceFilterLocationProvider.h +20 -0
  122. package/ios/common/BackgroundGeolocation/MAURDistanceFilterLocationProvider.m +523 -0
  123. package/ios/common/BackgroundGeolocation/MAURGeolocationOpenHelper.h +17 -0
  124. package/ios/common/BackgroundGeolocation/MAURGeolocationOpenHelper.m +97 -0
  125. package/ios/common/BackgroundGeolocation/MAURLocation.h +59 -0
  126. package/ios/common/BackgroundGeolocation/MAURLocation.m +349 -0
  127. package/ios/common/BackgroundGeolocation/MAURLocationContract.h +34 -0
  128. package/ios/common/BackgroundGeolocation/MAURLocationContract.m +35 -0
  129. package/ios/common/BackgroundGeolocation/MAURLocationManager.h +53 -0
  130. package/ios/common/BackgroundGeolocation/MAURLocationManager.m +308 -0
  131. package/ios/common/BackgroundGeolocation/MAURLogReader.h +26 -0
  132. package/ios/common/BackgroundGeolocation/MAURLogReader.m +122 -0
  133. package/ios/common/BackgroundGeolocation/MAURLogging.h +19 -0
  134. package/ios/common/BackgroundGeolocation/MAURPostLocationTask.h +40 -0
  135. package/ios/common/BackgroundGeolocation/MAURPostLocationTask.m +218 -0
  136. package/ios/common/BackgroundGeolocation/MAURProviderDelegate.h +52 -0
  137. package/ios/common/BackgroundGeolocation/MAURRawLocationProvider.h +18 -0
  138. package/ios/common/BackgroundGeolocation/MAURRawLocationProvider.m +129 -0
  139. package/ios/common/BackgroundGeolocation/MAURSQLiteConfigurationDAO.h +26 -0
  140. package/ios/common/BackgroundGeolocation/MAURSQLiteConfigurationDAO.m +278 -0
  141. package/ios/common/BackgroundGeolocation/MAURSQLiteHelper.h +57 -0
  142. package/ios/common/BackgroundGeolocation/MAURSQLiteHelper.m +93 -0
  143. package/ios/common/BackgroundGeolocation/MAURSQLiteLocationDAO.h +38 -0
  144. package/ios/common/BackgroundGeolocation/MAURSQLiteLocationDAO.m +380 -0
  145. package/ios/common/BackgroundGeolocation/MAURSQLiteOpenHelper.h +32 -0
  146. package/ios/common/BackgroundGeolocation/MAURSQLiteOpenHelper.m +276 -0
  147. package/ios/common/BackgroundGeolocation/MAURUncaughtExceptionLogger.h +20 -0
  148. package/ios/common/BackgroundGeolocation/MAURUncaughtExceptionLogger.m +62 -0
  149. package/ios/common/BackgroundGeolocation/Reachability.h +102 -0
  150. package/ios/common/BackgroundGeolocation/Reachability.m +474 -0
  151. package/ios/common/BackgroundGeolocation/SOMotionDetector/SOLocationManager.h +80 -0
  152. package/ios/common/BackgroundGeolocation/SOMotionDetector/SOLocationManager.m +147 -0
  153. package/ios/common/BackgroundGeolocation/SOMotionDetector/SOMotionActivity.h +30 -0
  154. package/ios/common/BackgroundGeolocation/SOMotionDetector/SOMotionActivity.m +42 -0
  155. package/ios/common/BackgroundGeolocation/SOMotionDetector/SOMotionDetector.h +99 -0
  156. package/ios/common/BackgroundGeolocation/SOMotionDetector/SOMotionDetector.m +327 -0
  157. package/ios/common/BackgroundGeolocation/SOMotionDetector/SOStepDetector.h +44 -0
  158. package/ios/common/BackgroundGeolocation/SOMotionDetector/SOStepDetector.m +94 -0
  159. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/ext/NSString+ZIMString.h +55 -0
  160. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/ext/NSString+ZIMString.m +47 -0
  161. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlDataManipulationCommand.h +27 -0
  162. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlExpression.h +250 -0
  163. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlExpression.m +259 -0
  164. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlSelectStatement.h +360 -0
  165. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlSelectStatement.m +427 -0
  166. package/ios/common/BackgroundGeolocation/SQLQueryBuilder/sql/ZIMSqlStatement.h +37 -0
  167. package/lib/module/NitroBackgroundGeolocation.nitro.js +172 -0
  168. package/lib/module/NitroBackgroundGeolocation.nitro.js.map +1 -0
  169. package/lib/module/headless.js +72 -0
  170. package/lib/module/headless.js.map +1 -0
  171. package/lib/module/index.js +60 -0
  172. package/lib/module/index.js.map +1 -0
  173. package/lib/module/package.json +1 -0
  174. package/lib/typescript/package.json +1 -0
  175. package/lib/typescript/src/NitroBackgroundGeolocation.nitro.d.ts +616 -0
  176. package/lib/typescript/src/NitroBackgroundGeolocation.nitro.d.ts.map +1 -0
  177. package/lib/typescript/src/headless.d.ts +40 -0
  178. package/lib/typescript/src/headless.d.ts.map +1 -0
  179. package/lib/typescript/src/index.d.ts +8 -0
  180. package/lib/typescript/src/index.d.ts.map +1 -0
  181. package/nitro.json +23 -0
  182. package/nitrogen/generated/android/c++/JActivity.hpp +61 -0
  183. package/nitrogen/generated/android/c++/JAuthorizationStatus.hpp +61 -0
  184. package/nitrogen/generated/android/c++/JBackgroundGeolocationError.hpp +61 -0
  185. package/nitrogen/generated/android/c++/JConfigureOptions.hpp +179 -0
  186. package/nitrogen/generated/android/c++/JFunc_void.hpp +75 -0
  187. package/nitrogen/generated/android/c++/JFunc_void_Activity.hpp +78 -0
  188. package/nitrogen/generated/android/c++/JFunc_void_AuthorizationStatus.hpp +77 -0
  189. package/nitrogen/generated/android/c++/JFunc_void_BackgroundGeolocationError.hpp +78 -0
  190. package/nitrogen/generated/android/c++/JFunc_void_Location.hpp +78 -0
  191. package/nitrogen/generated/android/c++/JFunc_void_StationaryLocation.hpp +78 -0
  192. package/nitrogen/generated/android/c++/JHybridNitroBackgroundGeolocationSpec.cpp +530 -0
  193. package/nitrogen/generated/android/c++/JHybridNitroBackgroundGeolocationSpec.hpp +90 -0
  194. package/nitrogen/generated/android/c++/JLocation.hpp +105 -0
  195. package/nitrogen/generated/android/c++/JLocationAccuracy.hpp +64 -0
  196. package/nitrogen/generated/android/c++/JLocationOptions.hpp +65 -0
  197. package/nitrogen/generated/android/c++/JLocationProvider.hpp +61 -0
  198. package/nitrogen/generated/android/c++/JLogEntry.hpp +73 -0
  199. package/nitrogen/generated/android/c++/JNativeLogLevel.hpp +67 -0
  200. package/nitrogen/generated/android/c++/JServiceStatus.hpp +66 -0
  201. package/nitrogen/generated/android/c++/JStationaryLocation.hpp +109 -0
  202. package/nitrogen/generated/android/c++/JVariant_NullType_AnyMap.cpp +26 -0
  203. package/nitrogen/generated/android/c++/JVariant_NullType_AnyMap.hpp +71 -0
  204. package/nitrogen/generated/android/c++/JVariant_NullType_Boolean.cpp +26 -0
  205. package/nitrogen/generated/android/c++/JVariant_NullType_Boolean.hpp +69 -0
  206. package/nitrogen/generated/android/c++/JVariant_NullType_Double.cpp +26 -0
  207. package/nitrogen/generated/android/c++/JVariant_NullType_Double.hpp +69 -0
  208. package/nitrogen/generated/android/c++/JVariant_NullType_LocationAccuracy.cpp +26 -0
  209. package/nitrogen/generated/android/c++/JVariant_NullType_LocationAccuracy.hpp +71 -0
  210. package/nitrogen/generated/android/c++/JVariant_NullType_LocationProvider.cpp +26 -0
  211. package/nitrogen/generated/android/c++/JVariant_NullType_LocationProvider.hpp +71 -0
  212. package/nitrogen/generated/android/c++/JVariant_NullType_Map_String__String_.cpp +33 -0
  213. package/nitrogen/generated/android/c++/JVariant_NullType_Map_String__String_.hpp +77 -0
  214. package/nitrogen/generated/android/c++/JVariant_NullType_String.cpp +26 -0
  215. package/nitrogen/generated/android/c++/JVariant_NullType_String.hpp +70 -0
  216. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Activity.kt +56 -0
  217. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/AuthorizationStatus.kt +24 -0
  218. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/BackgroundGeolocationError.kt +56 -0
  219. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/ConfigureOptions.kt +182 -0
  220. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Func_void.kt +80 -0
  221. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Func_void_Activity.kt +80 -0
  222. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Func_void_AuthorizationStatus.kt +80 -0
  223. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Func_void_BackgroundGeolocationError.kt +80 -0
  224. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Func_void_Location.kt +80 -0
  225. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Func_void_StationaryLocation.kt +80 -0
  226. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/HybridNitroBackgroundGeolocationSpec.kt +218 -0
  227. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Location.kt +111 -0
  228. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/LocationAccuracy.kt +25 -0
  229. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/LocationOptions.kt +61 -0
  230. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/LocationProvider.kt +24 -0
  231. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/LogEntry.kt +71 -0
  232. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/NativeLogLevel.kt +26 -0
  233. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/ServiceStatus.kt +61 -0
  234. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/StationaryLocation.kt +116 -0
  235. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Variant_NullType_AnyMap.kt +63 -0
  236. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Variant_NullType_Boolean.kt +62 -0
  237. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Variant_NullType_Double.kt +62 -0
  238. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Variant_NullType_LocationAccuracy.kt +62 -0
  239. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Variant_NullType_LocationProvider.kt +62 -0
  240. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Variant_NullType_Map_String__String_.kt +62 -0
  241. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/Variant_NullType_String.kt +62 -0
  242. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrobackgroundgeolocation/nitrobackgroundgeolocationOnLoad.kt +35 -0
  243. package/nitrogen/generated/android/nitrobackgroundgeolocation+autolinking.cmake +88 -0
  244. package/nitrogen/generated/android/nitrobackgroundgeolocation+autolinking.gradle +27 -0
  245. package/nitrogen/generated/android/nitrobackgroundgeolocationOnLoad.cpp +66 -0
  246. package/nitrogen/generated/android/nitrobackgroundgeolocationOnLoad.hpp +34 -0
  247. package/nitrogen/generated/ios/NitroBackgroundGeolocation+autolinking.rb +62 -0
  248. package/nitrogen/generated/ios/NitroBackgroundGeolocation-Swift-Cxx-Bridge.cpp +129 -0
  249. package/nitrogen/generated/ios/NitroBackgroundGeolocation-Swift-Cxx-Bridge.hpp +911 -0
  250. package/nitrogen/generated/ios/NitroBackgroundGeolocation-Swift-Cxx-Umbrella.hpp +88 -0
  251. package/nitrogen/generated/ios/NitroBackgroundGeolocationAutolinking.mm +33 -0
  252. package/nitrogen/generated/ios/NitroBackgroundGeolocationAutolinking.swift +26 -0
  253. package/nitrogen/generated/ios/c++/HybridNitroBackgroundGeolocationSpecSwift.cpp +11 -0
  254. package/nitrogen/generated/ios/c++/HybridNitroBackgroundGeolocationSpecSwift.hpp +335 -0
  255. package/nitrogen/generated/ios/swift/Activity.swift +34 -0
  256. package/nitrogen/generated/ios/swift/AuthorizationStatus.swift +44 -0
  257. package/nitrogen/generated/ios/swift/BackgroundGeolocationError.swift +34 -0
  258. package/nitrogen/generated/ios/swift/ConfigureOptions.swift +1037 -0
  259. package/nitrogen/generated/ios/swift/Func_void.swift +46 -0
  260. package/nitrogen/generated/ios/swift/Func_void_Activity.swift +46 -0
  261. package/nitrogen/generated/ios/swift/Func_void_AuthorizationStatus.swift +46 -0
  262. package/nitrogen/generated/ios/swift/Func_void_BackgroundGeolocationError.swift +46 -0
  263. package/nitrogen/generated/ios/swift/Func_void_ConfigureOptions.swift +46 -0
  264. package/nitrogen/generated/ios/swift/Func_void_Location.swift +46 -0
  265. package/nitrogen/generated/ios/swift/Func_void_ServiceStatus.swift +46 -0
  266. package/nitrogen/generated/ios/swift/Func_void_StationaryLocation.swift +46 -0
  267. package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +46 -0
  268. package/nitrogen/generated/ios/swift/Func_void_std__optional_StationaryLocation_.swift +46 -0
  269. package/nitrogen/generated/ios/swift/Func_void_std__vector_Location_.swift +46 -0
  270. package/nitrogen/generated/ios/swift/Func_void_std__vector_LogEntry_.swift +46 -0
  271. package/nitrogen/generated/ios/swift/HybridNitroBackgroundGeolocationSpec.swift +82 -0
  272. package/nitrogen/generated/ios/swift/HybridNitroBackgroundGeolocationSpec_cxx.swift +675 -0
  273. package/nitrogen/generated/ios/swift/Location.swift +89 -0
  274. package/nitrogen/generated/ios/swift/LocationAccuracy.swift +48 -0
  275. package/nitrogen/generated/ios/swift/LocationOptions.swift +78 -0
  276. package/nitrogen/generated/ios/swift/LocationProvider.swift +44 -0
  277. package/nitrogen/generated/ios/swift/LogEntry.swift +49 -0
  278. package/nitrogen/generated/ios/swift/NativeLogLevel.swift +52 -0
  279. package/nitrogen/generated/ios/swift/ServiceStatus.swift +39 -0
  280. package/nitrogen/generated/ios/swift/StationaryLocation.swift +94 -0
  281. package/nitrogen/generated/ios/swift/Variant_NullType_AnyMap.swift +30 -0
  282. package/nitrogen/generated/ios/swift/Variant_NullType_Bool.swift +30 -0
  283. package/nitrogen/generated/ios/swift/Variant_NullType_Dictionary_String__String_.swift +30 -0
  284. package/nitrogen/generated/ios/swift/Variant_NullType_Double.swift +30 -0
  285. package/nitrogen/generated/ios/swift/Variant_NullType_LocationAccuracy.swift +30 -0
  286. package/nitrogen/generated/ios/swift/Variant_NullType_LocationProvider.swift +30 -0
  287. package/nitrogen/generated/ios/swift/Variant_NullType_String.swift +30 -0
  288. package/nitrogen/generated/shared/c++/Activity.hpp +87 -0
  289. package/nitrogen/generated/shared/c++/AuthorizationStatus.hpp +63 -0
  290. package/nitrogen/generated/shared/c++/BackgroundGeolocationError.hpp +87 -0
  291. package/nitrogen/generated/shared/c++/ConfigureOptions.hpp +197 -0
  292. package/nitrogen/generated/shared/c++/HybridNitroBackgroundGeolocationSpec.cpp +48 -0
  293. package/nitrogen/generated/shared/c++/HybridNitroBackgroundGeolocationSpec.hpp +121 -0
  294. package/nitrogen/generated/shared/c++/Location.hpp +131 -0
  295. package/nitrogen/generated/shared/c++/LocationAccuracy.hpp +69 -0
  296. package/nitrogen/generated/shared/c++/LocationOptions.hpp +91 -0
  297. package/nitrogen/generated/shared/c++/LocationProvider.hpp +63 -0
  298. package/nitrogen/generated/shared/c++/LogEntry.hpp +99 -0
  299. package/nitrogen/generated/shared/c++/NativeLogLevel.hpp +65 -0
  300. package/nitrogen/generated/shared/c++/ServiceStatus.hpp +92 -0
  301. package/nitrogen/generated/shared/c++/StationaryLocation.hpp +135 -0
  302. package/package.json +112 -0
  303. package/react-native.config.js +10 -0
  304. package/src/NitroBackgroundGeolocation.nitro.ts +656 -0
  305. package/src/headless.ts +91 -0
  306. 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 */