bitmovin-player-react-native 0.44.1-alpha.0 → 1.0.0-alpha.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 (497) hide show
  1. package/.eslintignore +11 -0
  2. package/.eslintrc.js +7 -0
  3. package/.gitattributes +3 -0
  4. package/.prettierignore +11 -0
  5. package/.ruby-version +1 -0
  6. package/.swiftlint.yml +171 -0
  7. package/Brewfile +2 -0
  8. package/CHANGELOG.md +627 -0
  9. package/CONTRIBUTING.md +255 -0
  10. package/TODO.md +0 -0
  11. package/android/.editorconfig +8 -0
  12. package/android/build.gradle +78 -75
  13. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  14. package/android/gradle/wrapper/gradle-wrapper.properties +7 -0
  15. package/android/gradle.properties +1 -0
  16. package/android/gradlew +248 -0
  17. package/android/gradlew.bat +92 -0
  18. package/android/ktlint.gradle +31 -0
  19. package/android/src/main/java/com/bitmovin/player/reactnative/ActivityLifecycleListener.kt +51 -0
  20. package/android/src/main/java/com/bitmovin/player/reactnative/BitmovinCastManagerModule.kt +32 -55
  21. package/android/src/main/java/com/bitmovin/player/reactnative/BufferModule.kt +33 -45
  22. package/android/src/main/java/com/bitmovin/player/reactnative/CustomMessageHandlerModule.kt +84 -0
  23. package/android/src/main/java/com/bitmovin/player/reactnative/DebugModule.kt +6 -14
  24. package/android/src/main/java/com/bitmovin/player/reactnative/DecoderConfigModule.kt +89 -44
  25. package/android/src/main/java/com/bitmovin/player/reactnative/DrmModule.kt +80 -99
  26. package/android/src/main/java/com/bitmovin/player/reactnative/EventSubscription.kt +22 -0
  27. package/android/src/main/java/com/bitmovin/player/reactnative/FullscreenHandlerModule.kt +100 -0
  28. package/android/src/main/java/com/bitmovin/player/reactnative/MediaSessionPlaybackManager.kt +5 -5
  29. package/android/src/main/java/com/bitmovin/player/reactnative/NetworkModule.kt +98 -56
  30. package/android/src/main/java/com/bitmovin/player/reactnative/OfflineModule.kt +132 -186
  31. package/android/src/main/java/com/bitmovin/player/reactnative/PlayerAnalyticsModule.kt +37 -36
  32. package/android/src/main/java/com/bitmovin/player/reactnative/PlayerModule.kt +252 -528
  33. package/android/src/main/java/com/bitmovin/player/reactnative/RNPlayerPackage.kt +11 -0
  34. package/android/src/main/java/com/bitmovin/player/reactnative/RNPlayerView.kt +558 -213
  35. package/android/src/main/java/com/bitmovin/player/reactnative/RNPlayerViewManager.kt +99 -286
  36. package/android/src/main/java/com/bitmovin/player/reactnative/ResultWaiter.kt +58 -0
  37. package/android/src/main/java/com/bitmovin/player/reactnative/SourceModule.kt +77 -151
  38. package/android/src/main/java/com/bitmovin/player/reactnative/Types.kt +44 -0
  39. package/android/src/main/java/com/bitmovin/player/reactnative/UuidModule.kt +12 -15
  40. package/android/src/main/java/com/bitmovin/player/reactnative/converter/JsonConverter.kt +296 -456
  41. package/android/src/main/java/com/bitmovin/player/reactnative/extensions/ListExtension.kt +89 -0
  42. package/android/src/main/java/com/bitmovin/player/reactnative/extensions/MapExtension.kt +95 -0
  43. package/android/src/main/java/com/bitmovin/player/reactnative/offline/OfflineContentManagerBridge.kt +20 -52
  44. package/android/src/main/java/com/bitmovin/player/reactnative/ui/CustomMessageHandlerBridge.kt +10 -20
  45. package/android/src/main/java/com/bitmovin/player/reactnative/ui/FullscreenHandlerBridge.kt +4 -9
  46. package/app.plugin.js +21 -0
  47. package/build/BitmovinPlayerReactNative.types.d.ts +18 -0
  48. package/build/BitmovinPlayerReactNative.types.d.ts.map +1 -0
  49. package/build/BitmovinPlayerReactNative.types.js +2 -0
  50. package/build/BitmovinPlayerReactNative.types.js.map +1 -0
  51. package/build/adaptationConfig.d.ts +18 -0
  52. package/build/adaptationConfig.d.ts.map +1 -0
  53. package/build/adaptationConfig.js +2 -0
  54. package/build/adaptationConfig.js.map +1 -0
  55. package/build/advertising.d.ts +175 -0
  56. package/build/advertising.d.ts.map +1 -0
  57. package/build/advertising.js +37 -0
  58. package/build/advertising.js.map +1 -0
  59. package/build/analytics/config.d.ts +194 -0
  60. package/build/analytics/config.d.ts.map +1 -0
  61. package/build/analytics/config.js +2 -0
  62. package/build/analytics/config.js.map +1 -0
  63. package/build/analytics/index.d.ts +3 -0
  64. package/build/analytics/index.d.ts.map +1 -0
  65. package/build/analytics/index.js +3 -0
  66. package/build/analytics/index.js.map +1 -0
  67. package/build/analytics/player.d.ts +24 -0
  68. package/build/analytics/player.d.ts.map +1 -0
  69. package/build/analytics/player.js +30 -0
  70. package/build/analytics/player.js.map +1 -0
  71. package/build/analytics/playerAnalyticsModule.d.ts +13 -0
  72. package/build/analytics/playerAnalyticsModule.d.ts.map +1 -0
  73. package/build/analytics/playerAnalyticsModule.js +3 -0
  74. package/build/analytics/playerAnalyticsModule.js.map +1 -0
  75. package/build/audioSession.d.ts +33 -0
  76. package/build/audioSession.d.ts.map +1 -0
  77. package/build/audioSession.js +21 -0
  78. package/build/audioSession.js.map +1 -0
  79. package/build/audioTrack.d.ts +39 -0
  80. package/build/audioTrack.d.ts.map +1 -0
  81. package/build/audioTrack.js +2 -0
  82. package/build/audioTrack.js.map +1 -0
  83. package/build/bitmovinCastManager.d.ts +58 -0
  84. package/build/bitmovinCastManager.d.ts.map +1 -0
  85. package/build/bitmovinCastManager.js +64 -0
  86. package/build/bitmovinCastManager.js.map +1 -0
  87. package/build/bufferApi.d.ts +85 -0
  88. package/build/bufferApi.d.ts.map +1 -0
  89. package/build/bufferApi.js +60 -0
  90. package/build/bufferApi.js.map +1 -0
  91. package/build/bufferConfig.d.ts +42 -0
  92. package/build/bufferConfig.d.ts.map +1 -0
  93. package/build/bufferConfig.js +2 -0
  94. package/build/bufferConfig.js.map +1 -0
  95. package/build/components/PlayerView/events.d.ts +310 -0
  96. package/build/components/PlayerView/events.d.ts.map +1 -0
  97. package/build/components/PlayerView/events.js +2 -0
  98. package/build/components/PlayerView/events.js.map +1 -0
  99. package/build/components/PlayerView/index.d.ts +10 -0
  100. package/build/components/PlayerView/index.d.ts.map +1 -0
  101. package/build/components/PlayerView/index.js +72 -0
  102. package/build/components/PlayerView/index.js.map +1 -0
  103. package/build/components/PlayerView/native.d.ts +30 -0
  104. package/build/components/PlayerView/native.d.ts.map +1 -0
  105. package/build/components/PlayerView/native.js +6 -0
  106. package/build/components/PlayerView/native.js.map +1 -0
  107. package/build/components/PlayerView/nativeEvents.d.ts +437 -0
  108. package/build/components/PlayerView/nativeEvents.d.ts.map +1 -0
  109. package/build/components/PlayerView/nativeEvents.js +2 -0
  110. package/build/components/PlayerView/nativeEvents.js.map +1 -0
  111. package/build/components/PlayerView/pictureInPictureConfig.d.ts +22 -0
  112. package/build/components/PlayerView/pictureInPictureConfig.d.ts.map +1 -0
  113. package/build/components/PlayerView/pictureInPictureConfig.js +2 -0
  114. package/build/components/PlayerView/pictureInPictureConfig.js.map +1 -0
  115. package/build/components/PlayerView/playerViewConfig.d.ts +111 -0
  116. package/build/components/PlayerView/playerViewConfig.d.ts.map +1 -0
  117. package/build/components/PlayerView/playerViewConfig.js +51 -0
  118. package/build/components/PlayerView/playerViewConfig.js.map +1 -0
  119. package/build/components/PlayerView/properties.d.ts +61 -0
  120. package/build/components/PlayerView/properties.d.ts.map +1 -0
  121. package/build/components/PlayerView/properties.js +2 -0
  122. package/build/components/PlayerView/properties.js.map +1 -0
  123. package/build/components/index.d.ts +5 -0
  124. package/build/components/index.d.ts.map +1 -0
  125. package/build/components/index.js +5 -0
  126. package/build/components/index.js.map +1 -0
  127. package/build/debug.d.ts +46 -0
  128. package/build/debug.d.ts.map +1 -0
  129. package/build/debug.js +52 -0
  130. package/build/debug.js.map +1 -0
  131. package/build/decoder/decoderConfig.d.ts +96 -0
  132. package/build/decoder/decoderConfig.d.ts.map +1 -0
  133. package/build/decoder/decoderConfig.js +6 -0
  134. package/build/decoder/decoderConfig.js.map +1 -0
  135. package/build/decoder/decoderConfigModule.d.ts +14 -0
  136. package/build/decoder/decoderConfigModule.d.ts.map +1 -0
  137. package/build/decoder/decoderConfigModule.js +31 -0
  138. package/build/decoder/decoderConfigModule.js.map +1 -0
  139. package/build/decoder/index.d.ts +26 -0
  140. package/build/decoder/index.d.ts.map +1 -0
  141. package/build/decoder/index.js +50 -0
  142. package/build/decoder/index.js.map +1 -0
  143. package/build/drm/drmModule.d.ts +55 -0
  144. package/build/drm/drmModule.d.ts.map +1 -0
  145. package/build/drm/drmModule.js +3 -0
  146. package/build/drm/drmModule.js.map +1 -0
  147. package/build/drm/fairplayConfig.d.ts +91 -0
  148. package/build/drm/fairplayConfig.d.ts.map +1 -0
  149. package/build/drm/fairplayConfig.js +2 -0
  150. package/build/drm/fairplayConfig.js.map +1 -0
  151. package/build/drm/index.d.ts +112 -0
  152. package/build/drm/index.d.ts.map +1 -0
  153. package/build/drm/index.js +191 -0
  154. package/build/drm/index.js.map +1 -0
  155. package/build/drm/widevineConfig.d.ts +58 -0
  156. package/build/drm/widevineConfig.d.ts.map +1 -0
  157. package/build/drm/widevineConfig.js +2 -0
  158. package/build/drm/widevineConfig.js.map +1 -0
  159. package/build/events.d.ts +692 -0
  160. package/build/events.d.ts.map +1 -0
  161. package/build/events.js +2 -0
  162. package/build/events.js.map +1 -0
  163. package/build/hooks/index.d.ts +2 -0
  164. package/build/hooks/index.d.ts.map +1 -0
  165. package/build/hooks/index.js +2 -0
  166. package/build/hooks/index.js.map +1 -0
  167. package/build/hooks/usePlayer.d.ts +8 -0
  168. package/build/hooks/usePlayer.d.ts.map +1 -0
  169. package/build/hooks/usePlayer.js +10 -0
  170. package/build/hooks/usePlayer.js.map +1 -0
  171. package/build/hooks/useProxy.d.ts +18 -0
  172. package/build/hooks/useProxy.d.ts.map +1 -0
  173. package/build/hooks/useProxy.js +16 -0
  174. package/build/hooks/useProxy.js.map +1 -0
  175. package/build/index.d.ts +32 -0
  176. package/build/index.d.ts.map +1 -0
  177. package/build/index.js +32 -0
  178. package/build/index.js.map +1 -0
  179. package/build/liveConfig.d.ts +13 -0
  180. package/build/liveConfig.d.ts.map +1 -0
  181. package/build/liveConfig.js +2 -0
  182. package/build/liveConfig.js.map +1 -0
  183. package/build/media.d.ts +85 -0
  184. package/build/media.d.ts.map +1 -0
  185. package/build/media.js +2 -0
  186. package/build/media.js.map +1 -0
  187. package/build/mediaControlConfig.d.ts +62 -0
  188. package/build/mediaControlConfig.d.ts.map +1 -0
  189. package/build/mediaControlConfig.js +2 -0
  190. package/build/mediaControlConfig.js.map +1 -0
  191. package/build/mediaTrackRole.d.ts +28 -0
  192. package/build/mediaTrackRole.d.ts.map +1 -0
  193. package/build/mediaTrackRole.js +2 -0
  194. package/build/mediaTrackRole.js.map +1 -0
  195. package/build/modules/AudioSessionModule.d.ts +8 -0
  196. package/build/modules/AudioSessionModule.d.ts.map +1 -0
  197. package/build/modules/AudioSessionModule.js +7 -0
  198. package/build/modules/AudioSessionModule.js.map +1 -0
  199. package/build/modules/BitmovinCastManagerModule.d.ts +11 -0
  200. package/build/modules/BitmovinCastManagerModule.d.ts.map +1 -0
  201. package/build/modules/BitmovinCastManagerModule.js +3 -0
  202. package/build/modules/BitmovinCastManagerModule.js.map +1 -0
  203. package/build/modules/BufferModule.d.ts +16 -0
  204. package/build/modules/BufferModule.d.ts.map +1 -0
  205. package/build/modules/BufferModule.js +3 -0
  206. package/build/modules/BufferModule.js.map +1 -0
  207. package/build/modules/DebugModule.d.ts +8 -0
  208. package/build/modules/DebugModule.d.ts.map +1 -0
  209. package/build/modules/DebugModule.js +3 -0
  210. package/build/modules/DebugModule.js.map +1 -0
  211. package/build/modules/PlayerModule.d.ts +188 -0
  212. package/build/modules/PlayerModule.d.ts.map +1 -0
  213. package/build/modules/PlayerModule.js +3 -0
  214. package/build/modules/PlayerModule.js.map +1 -0
  215. package/build/modules/SourceModule.d.ts +51 -0
  216. package/build/modules/SourceModule.d.ts.map +1 -0
  217. package/build/modules/SourceModule.js +3 -0
  218. package/build/modules/SourceModule.js.map +1 -0
  219. package/build/modules/UuidModule.d.ts +8 -0
  220. package/build/modules/UuidModule.d.ts.map +1 -0
  221. package/build/modules/UuidModule.js +3 -0
  222. package/build/modules/UuidModule.js.map +1 -0
  223. package/build/nativeInstance.d.ts +49 -0
  224. package/build/nativeInstance.d.ts.map +1 -0
  225. package/build/nativeInstance.js +20 -0
  226. package/build/nativeInstance.js.map +1 -0
  227. package/build/network/index.d.ts +50 -0
  228. package/build/network/index.d.ts.map +1 -0
  229. package/build/network/index.js +102 -0
  230. package/build/network/index.js.map +1 -0
  231. package/build/network/networkConfig.d.ts +151 -0
  232. package/build/network/networkConfig.d.ts.map +1 -0
  233. package/build/network/networkConfig.js +21 -0
  234. package/build/network/networkConfig.js.map +1 -0
  235. package/build/network/networkModule.d.ts +29 -0
  236. package/build/network/networkModule.d.ts.map +1 -0
  237. package/build/network/networkModule.js +3 -0
  238. package/build/network/networkModule.js.map +1 -0
  239. package/build/offline/index.d.ts +8 -0
  240. package/build/offline/index.d.ts.map +1 -0
  241. package/build/offline/index.js +8 -0
  242. package/build/offline/index.js.map +1 -0
  243. package/build/offline/offlineContentConfig.d.ts +18 -0
  244. package/build/offline/offlineContentConfig.d.ts.map +1 -0
  245. package/build/offline/offlineContentConfig.js +2 -0
  246. package/build/offline/offlineContentConfig.js.map +1 -0
  247. package/build/offline/offlineContentManager.d.ts +90 -0
  248. package/build/offline/offlineContentManager.d.ts.map +1 -0
  249. package/build/offline/offlineContentManager.js +177 -0
  250. package/build/offline/offlineContentManager.js.map +1 -0
  251. package/build/offline/offlineContentManagerListener.d.ts +174 -0
  252. package/build/offline/offlineContentManagerListener.d.ts.map +1 -0
  253. package/build/offline/offlineContentManagerListener.js +17 -0
  254. package/build/offline/offlineContentManagerListener.js.map +1 -0
  255. package/build/offline/offlineContentOptions.d.ts +29 -0
  256. package/build/offline/offlineContentOptions.d.ts.map +1 -0
  257. package/build/offline/offlineContentOptions.js +2 -0
  258. package/build/offline/offlineContentOptions.js.map +1 -0
  259. package/build/offline/offlineDownloadRequest.d.ts +19 -0
  260. package/build/offline/offlineDownloadRequest.d.ts.map +1 -0
  261. package/build/offline/offlineDownloadRequest.js +2 -0
  262. package/build/offline/offlineDownloadRequest.js.map +1 -0
  263. package/build/offline/offlineModule.d.ts +32 -0
  264. package/build/offline/offlineModule.d.ts.map +1 -0
  265. package/build/offline/offlineModule.js +3 -0
  266. package/build/offline/offlineModule.js.map +1 -0
  267. package/build/offline/offlineSourceOptions.d.ts +12 -0
  268. package/build/offline/offlineSourceOptions.d.ts.map +1 -0
  269. package/build/offline/offlineSourceOptions.js +2 -0
  270. package/build/offline/offlineSourceOptions.js.map +1 -0
  271. package/build/offline/offlineState.d.ts +23 -0
  272. package/build/offline/offlineState.d.ts.map +1 -0
  273. package/build/offline/offlineState.js +24 -0
  274. package/build/offline/offlineState.js.map +1 -0
  275. package/build/playbackConfig.d.ts +88 -0
  276. package/build/playbackConfig.d.ts.map +1 -0
  277. package/build/playbackConfig.js +2 -0
  278. package/build/playbackConfig.js.map +1 -0
  279. package/build/player.d.ts +308 -0
  280. package/build/player.d.ts.map +1 -0
  281. package/build/player.js +445 -0
  282. package/build/player.js.map +1 -0
  283. package/build/playerConfig.d.ts +83 -0
  284. package/build/playerConfig.d.ts.map +1 -0
  285. package/build/playerConfig.js +2 -0
  286. package/build/playerConfig.js.map +1 -0
  287. package/build/remoteControlConfig.d.ts +38 -0
  288. package/build/remoteControlConfig.d.ts.map +1 -0
  289. package/build/remoteControlConfig.js +2 -0
  290. package/build/remoteControlConfig.js.map +1 -0
  291. package/build/source.d.ts +216 -0
  292. package/build/source.d.ts.map +1 -0
  293. package/build/source.js +167 -0
  294. package/build/source.js.map +1 -0
  295. package/build/styleConfig.d.ts +120 -0
  296. package/build/styleConfig.d.ts.map +1 -0
  297. package/build/styleConfig.js +38 -0
  298. package/build/styleConfig.js.map +1 -0
  299. package/build/subtitleFormat.d.ts +27 -0
  300. package/build/subtitleFormat.d.ts.map +1 -0
  301. package/build/subtitleFormat.js +28 -0
  302. package/build/subtitleFormat.js.map +1 -0
  303. package/build/subtitleTrack.d.ts +55 -0
  304. package/build/subtitleTrack.d.ts.map +1 -0
  305. package/build/subtitleTrack.js +2 -0
  306. package/build/subtitleTrack.js.map +1 -0
  307. package/build/thumbnail.d.ts +38 -0
  308. package/build/thumbnail.d.ts.map +1 -0
  309. package/build/thumbnail.js +2 -0
  310. package/build/thumbnail.js.map +1 -0
  311. package/build/tweaksConfig.d.ts +197 -0
  312. package/build/tweaksConfig.d.ts.map +1 -0
  313. package/build/tweaksConfig.js +25 -0
  314. package/build/tweaksConfig.js.map +1 -0
  315. package/build/ui/customMessageHandlerModule.d.ts +27 -0
  316. package/build/ui/customMessageHandlerModule.d.ts.map +1 -0
  317. package/build/ui/customMessageHandlerModule.js +3 -0
  318. package/build/ui/customMessageHandlerModule.js.map +1 -0
  319. package/build/ui/custommessagehandler.d.ts +56 -0
  320. package/build/ui/custommessagehandler.d.ts.map +1 -0
  321. package/build/ui/custommessagehandler.js +54 -0
  322. package/build/ui/custommessagehandler.js.map +1 -0
  323. package/build/ui/custommessagehandlerbridge.d.ts +33 -0
  324. package/build/ui/custommessagehandlerbridge.d.ts.map +1 -0
  325. package/build/ui/custommessagehandlerbridge.js +72 -0
  326. package/build/ui/custommessagehandlerbridge.js.map +1 -0
  327. package/build/ui/custommessagesender.d.ts +5 -0
  328. package/build/ui/custommessagesender.d.ts.map +1 -0
  329. package/build/ui/custommessagesender.js +2 -0
  330. package/build/ui/custommessagesender.js.map +1 -0
  331. package/build/ui/fullscreenHandlerModule.d.ts +20 -0
  332. package/build/ui/fullscreenHandlerModule.d.ts.map +1 -0
  333. package/build/ui/fullscreenHandlerModule.js +3 -0
  334. package/build/ui/fullscreenHandlerModule.js.map +1 -0
  335. package/build/ui/fullscreenhandler.d.ts +18 -0
  336. package/build/ui/fullscreenhandler.d.ts.map +1 -0
  337. package/build/ui/fullscreenhandler.js +2 -0
  338. package/build/ui/fullscreenhandler.js.map +1 -0
  339. package/build/ui/fullscreenhandlerbridge.d.ts +26 -0
  340. package/build/ui/fullscreenhandlerbridge.d.ts.map +1 -0
  341. package/build/ui/fullscreenhandlerbridge.js +67 -0
  342. package/build/ui/fullscreenhandlerbridge.js.map +1 -0
  343. package/build/ui/index.d.ts +3 -0
  344. package/build/ui/index.d.ts.map +1 -0
  345. package/build/ui/index.js +3 -0
  346. package/build/ui/index.js.map +1 -0
  347. package/expo-module.config.json +40 -0
  348. package/ios/AppLifecycleDelegate.swift +25 -0
  349. package/ios/AudioSessionModule.swift +14 -40
  350. package/ios/BitmovinCastManagerModule.swift +30 -69
  351. package/ios/BufferModule.swift +26 -62
  352. package/ios/CustomMessageHandlerBridge.swift +11 -18
  353. package/ios/CustomMessageHandlerModule.swift +61 -63
  354. package/ios/DebugModule.swift +6 -27
  355. package/ios/DrmModule.swift +105 -379
  356. package/ios/Event+JSON.swift +1 -0
  357. package/ios/FullscreenHandlerBridge.swift +12 -5
  358. package/ios/FullscreenHandlerModule.swift +73 -57
  359. package/ios/LockedBox.swift +21 -0
  360. package/ios/ModuleRegistry+Generics.swift +11 -0
  361. package/ios/NetworkModule.swift +78 -82
  362. package/ios/OfflineContentManagerBridge.swift +11 -38
  363. package/ios/OfflineModule.swift +136 -454
  364. package/ios/PlayerAnalyticsModule.swift +24 -52
  365. package/ios/PlayerModule.swift +192 -770
  366. package/ios/RCTConvert+BitmovinPlayer.swift +38 -312
  367. package/ios/RNBitmovinPlayer.h +1 -8
  368. package/ios/RNBitmovinPlayer.podspec +47 -0
  369. package/ios/RNPlayerView.swift +600 -77
  370. package/ios/RNPlayerViewManager.swift +96 -210
  371. package/ios/Registry.swift +2 -2
  372. package/ios/ResultWaiter.swift +66 -0
  373. package/ios/SourceModule.swift +104 -223
  374. package/ios/UuidModule.swift +9 -18
  375. package/package.json +67 -71
  376. package/plugin/build/FeatureFlags.d.ts +24 -0
  377. package/plugin/build/FeatureFlags.js +2 -0
  378. package/plugin/build/index.d.ts +7 -0
  379. package/plugin/build/index.js +10 -0
  380. package/plugin/build/withAppGradleDependencies.d.ts +7 -0
  381. package/plugin/build/withAppGradleDependencies.js +49 -0
  382. package/plugin/build/withBitmovinAndroidConfig.d.ts +7 -0
  383. package/plugin/build/withBitmovinAndroidConfig.js +159 -0
  384. package/plugin/build/withBitmovinConfig.d.ts +7 -0
  385. package/plugin/build/withBitmovinConfig.js +21 -0
  386. package/plugin/build/withBitmovinIosConfig.d.ts +7 -0
  387. package/plugin/build/withBitmovinIosConfig.js +53 -0
  388. package/plugin/src/FeatureFlags.ts +21 -0
  389. package/plugin/src/index.ts +9 -0
  390. package/plugin/src/withAppGradleDependencies.ts +80 -0
  391. package/plugin/src/withBitmovinAndroidConfig.ts +224 -0
  392. package/plugin/src/withBitmovinConfig.ts +24 -0
  393. package/plugin/src/withBitmovinIosConfig.ts +71 -0
  394. package/plugin/tsconfig.json +9 -0
  395. package/plugin/tsconfig.tsbuildinfo +1 -0
  396. package/prettier.config.js +7 -0
  397. package/scripts/format-android.sh +2 -0
  398. package/scripts/format-swift.sh +3 -0
  399. package/scripts/lint-android.sh +2 -0
  400. package/scripts/lint-swift.sh +3 -0
  401. package/scripts/pre-commit.sh +14 -0
  402. package/scripts/setup-hooks.sh +58 -0
  403. package/src/BitmovinPlayerReactNative.types.ts +19 -0
  404. package/src/adaptationConfig.ts +1 -1
  405. package/src/advertising.ts +1 -1
  406. package/src/analytics/config.ts +4 -4
  407. package/src/analytics/player.ts +4 -6
  408. package/src/analytics/playerAnalyticsModule.ts +19 -0
  409. package/src/audioSession.ts +4 -6
  410. package/src/audioTrack.ts +1 -1
  411. package/src/bitmovinCastManager.ts +14 -10
  412. package/src/bufferApi.ts +1 -3
  413. package/src/bufferConfig.ts +2 -2
  414. package/src/components/PlayerView/events.ts +92 -94
  415. package/src/components/PlayerView/index.tsx +109 -159
  416. package/src/components/PlayerView/native.ts +24 -11
  417. package/src/components/PlayerView/nativeEvents.ts +113 -94
  418. package/src/components/PlayerView/pictureInPictureConfig.ts +1 -1
  419. package/src/components/PlayerView/playerViewConfig.ts +4 -8
  420. package/src/components/PlayerView/properties.ts +23 -22
  421. package/src/debug.ts +1 -3
  422. package/src/decoder/decoderConfig.ts +3 -3
  423. package/src/decoder/decoderConfigModule.ts +62 -0
  424. package/src/decoder/index.ts +32 -16
  425. package/src/drm/drmModule.ts +84 -0
  426. package/src/drm/fairplayConfig.ts +1 -1
  427. package/src/drm/index.ts +130 -40
  428. package/src/drm/widevineConfig.ts +5 -5
  429. package/src/events.ts +47 -41
  430. package/src/hooks/useProxy.ts +13 -20
  431. package/src/mediaControlConfig.ts +1 -1
  432. package/src/modules/AudioSessionModule.ts +13 -0
  433. package/src/modules/BitmovinCastManagerModule.ts +14 -0
  434. package/src/modules/BufferModule.ts +18 -0
  435. package/src/modules/DebugModule.ts +9 -0
  436. package/src/modules/PlayerModule.ts +251 -0
  437. package/src/modules/SourceModule.ts +74 -0
  438. package/src/modules/UuidModule.ts +9 -0
  439. package/src/nativeInstance.ts +3 -3
  440. package/src/network/index.ts +42 -15
  441. package/src/network/networkConfig.ts +3 -3
  442. package/src/network/networkModule.ts +51 -0
  443. package/src/offline/offlineContentConfig.ts +1 -1
  444. package/src/offline/offlineContentManager.ts +15 -50
  445. package/src/offline/offlineContentManagerListener.ts +20 -23
  446. package/src/offline/offlineContentOptions.ts +2 -2
  447. package/src/offline/offlineDownloadRequest.ts +1 -1
  448. package/src/offline/offlineModule.ts +46 -0
  449. package/src/offline/offlineSourceOptions.ts +2 -2
  450. package/src/offline/offlineState.ts +1 -1
  451. package/src/playbackConfig.ts +5 -6
  452. package/src/player.ts +53 -48
  453. package/src/source.ts +15 -14
  454. package/src/styleConfig.ts +5 -5
  455. package/src/subtitleFormat.ts +5 -5
  456. package/src/subtitleTrack.ts +1 -1
  457. package/src/tweaksConfig.ts +16 -16
  458. package/src/ui/customMessageHandlerModule.ts +46 -0
  459. package/src/ui/custommessagehandlerbridge.ts +45 -18
  460. package/src/ui/fullscreenHandlerModule.ts +35 -0
  461. package/src/ui/fullscreenhandlerbridge.ts +35 -15
  462. package/tsconfig.json +9 -0
  463. package/typedoc.json +23 -0
  464. package/RNBitmovinPlayer.podspec +0 -26
  465. package/android/src/main/java/com/bitmovin/player/reactnative/BitmovinBaseModule.kt +0 -114
  466. package/android/src/main/java/com/bitmovin/player/reactnative/EventRelay.kt +0 -47
  467. package/android/src/main/java/com/bitmovin/player/reactnative/RNPlayerViewPackage.kt +0 -48
  468. package/android/src/main/java/com/bitmovin/player/reactnative/extensions/ReactContextExtension.kt +0 -24
  469. package/android/src/main/java/com/bitmovin/player/reactnative/extensions/ReadableArray.kt +0 -20
  470. package/android/src/main/java/com/bitmovin/player/reactnative/extensions/ReadableMap.kt +0 -15
  471. package/android/src/main/java/com/bitmovin/player/reactnative/extensions/ReadableMapExtension.kt +0 -57
  472. package/android/src/main/java/com/bitmovin/player/reactnative/extensions/WritableMap.kt +0 -27
  473. package/android/src/main/java/com/bitmovin/player/reactnative/ui/CustomMessageHandlerModule.kt +0 -86
  474. package/android/src/main/java/com/bitmovin/player/reactnative/ui/FullscreenHandlerModule.kt +0 -78
  475. package/ios/AudioSessionModule.m +0 -10
  476. package/ios/BitmovinCastManagerModule.m +0 -14
  477. package/ios/BufferModule.m +0 -8
  478. package/ios/CustomMessageHandlerModule.m +0 -10
  479. package/ios/DebugModule.m +0 -7
  480. package/ios/DrmModule.m +0 -16
  481. package/ios/FullscreenHandlerModule.m +0 -10
  482. package/ios/NetworkModule.m +0 -10
  483. package/ios/OfflineModule.m +0 -19
  484. package/ios/PlayerAnalyticsModule.m +0 -8
  485. package/ios/PlayerModule.m +0 -130
  486. package/ios/PreprocessHttpRequestDelegateBridge.swift +0 -30
  487. package/ios/RCTBridge+Generics.swift +0 -6
  488. package/ios/RNBitmovinPlayer.xcodeproj/project.pbxproj +0 -303
  489. package/ios/RNPlayerView+PlayerListener.swift +0 -229
  490. package/ios/RNPlayerView+UserInterfaceListener.swift +0 -35
  491. package/ios/RNPlayerViewManager.m +0 -79
  492. package/ios/SourceModule.m +0 -42
  493. package/ios/UuidModule.m +0 -9
  494. package/lib/index.d.mts +0 -4303
  495. package/lib/index.d.ts +0 -4303
  496. package/lib/index.js +0 -1895
  497. package/lib/index.mjs +0 -1836
@@ -1,79 +1,95 @@
1
1
  import BitmovinPlayer
2
+ import ExpoModulesCore
2
3
 
3
- @objc(FullscreenHandlerModule)
4
- public class FullscreenHandlerModule: NSObject, RCTBridgeModule {
5
- // swiftlint:disable:next implicitly_unwrapped_optional
6
- @objc public var bridge: RCTBridge!
4
+ /**
5
+ * Expo module for FullscreenHandler management with bidirectional communication.
6
+ * Handles synchronous fullscreen state changes between native code and JavaScript.
7
+ */
8
+ public class FullscreenHandlerModule: Module {
9
+ /// In-memory mapping from `nativeId`s to `FullscreenHandlerBridge` instances.
10
+ private var fullscreenHandlers: Registry<FullscreenHandlerBridge> = [:]
7
11
 
8
- // swiftlint:disable:next implicitly_unwrapped_optional
9
- public static func moduleName() -> String! {
10
- "FullscreenHandlerModule"
11
- }
12
+ /// ResultWaiter used for blocking thread while waiting for fullscreen state change
13
+ private let waiter = ResultWaiter<Bool>()
12
14
 
13
- public static func requiresMainQueueSetup() -> Bool {
14
- true
15
- }
15
+ public func definition() -> ModuleDefinition {
16
+ Name("FullscreenHandlerModule")
16
17
 
17
- // swiftlint:disable:next implicitly_unwrapped_optional
18
- public var methodQueue: DispatchQueue! {
19
- bridge.uiManager.methodQueue
20
- }
18
+ OnDestroy {
19
+ fullscreenHandlers.removeAll()
20
+ waiter.removeAll()
21
+ }
21
22
 
22
- /// In-memory mapping from `nativeId`s to `FullscreenHandler` instances.
23
- private var fullscreenHandlers: Registry<FullscreenHandlerBridge> = [:]
23
+ Events("onEnterFullscreen", "onExitFullscreen")
24
24
 
25
- /// Dispatch group used for blocking thread while waiting for state change
26
- private let fullscreenChangeDispatchGroup = DispatchGroup()
25
+ AsyncFunction("registerHandler") { (nativeId: NativeId) in
26
+ DispatchQueue.main.async { [weak self] in
27
+ guard let self, self.fullscreenHandlers[nativeId] == nil else {
28
+ return
29
+ }
30
+ self.fullscreenHandlers[nativeId] = FullscreenHandlerBridge(
31
+ nativeId,
32
+ moduleRegistry: appContext?.moduleRegistry
33
+ )
34
+ }
35
+ }.runOnQueue(.main)
36
+
37
+ AsyncFunction("destroy") { [weak self] (nativeId: NativeId) in
38
+ self?.fullscreenHandlers.removeValue(forKey: nativeId)
39
+ }.runOnQueue(.main)
40
+
41
+ AsyncFunction("notifyFullscreenChanged") { [weak self] (id: Int, isFullscreenEnabled: Bool) in
42
+ self?.waiter.complete(id: id, with: isFullscreenEnabled)
43
+ }
44
+
45
+ AsyncFunction("setIsFullscreenActive") { [weak self] (nativeId: NativeId, isFullscreen: Bool) in
46
+ self?.fullscreenHandlers[nativeId]?.isFullscreenValueBox.update(isFullscreen)
47
+ }.runOnQueue(.main)
48
+ }
27
49
 
28
- /**
29
- Fetches the `FullscreenHandlerBridge` instance associated with `nativeId` from internal fullscreenHandlers.
30
- - Parameter nativeId: `FullscreenHandlerBridge` instance ID.
31
- - Returns: The associated `FullscreenHandlerBridge` instance or `nil`.
32
- */
33
- @objc
34
50
  func retrieve(_ nativeId: NativeId) -> FullscreenHandlerBridge? {
35
51
  fullscreenHandlers[nativeId]
36
52
  }
37
53
 
38
54
  /**
39
- Removes the `FullscreenHandlerBridge` instance associated with `nativeId` from `fullscreenHandlers`.
40
- - Parameter nativeId Instance to be disposed.
55
+ * Handles fullscreen enter request from native code.
56
+ * Called by FullscreenHandlerBridge when fullscreen should be entered.
41
57
  */
42
- @objc(destroy:)
43
- func destroy(_ nativeId: NativeId) {
44
- fullscreenHandlers.removeValue(forKey: nativeId)
45
- }
46
-
47
- @MainActor
48
- @objc(onFullscreenChanged:isFullscreenEnabled:)
49
- func onFullscreenChanged(_ nativeId: NativeId, isFullscreenEnabled: Bool) -> Any? {
50
- fullscreenHandlers[nativeId]?.isFullscreen = isFullscreenEnabled
51
- fullscreenChangeDispatchGroup.leave()
52
- return nil
53
- }
58
+ func onFullscreenRequested(nativeId: NativeId) {
59
+ guard let handler = retrieve(nativeId) else {
60
+ return
61
+ }
54
62
 
55
- @MainActor
56
- @objc(registerHandler:)
57
- func registerHandler(_ nativeId: NativeId) {
58
- guard fullscreenHandlers[nativeId] == nil else { return }
59
- fullscreenHandlers[nativeId] = FullscreenHandlerBridge(nativeId, bridge: bridge)
60
- }
63
+ let (id, wait) = waiter.make(timeout: 0.25)
61
64
 
62
- @MainActor
63
- @objc(setIsFullscreenActive:isFullscreen:)
64
- func setIsFullscreenActive(_ nativeId: NativeId, isFullscreen: Bool) {
65
- fullscreenHandlers[nativeId]?.isFullscreen = isFullscreen
66
- }
65
+ // Send event to JavaScript
66
+ sendEvent("onEnterFullscreen", [
67
+ "nativeId": nativeId,
68
+ "id": id
69
+ ])
67
70
 
68
- func onFullscreenRequested(nativeId: NativeId) {
69
- fullscreenChangeDispatchGroup.enter()
70
- bridge.enqueueJSCall("FullscreenBridge-\(nativeId)", method: "enterFullscreen", args: []) {}
71
- fullscreenChangeDispatchGroup.wait()
71
+ guard let result = wait() else {
72
+ return
73
+ }
74
+ handler.isFullscreenValueBox.update(result)
72
75
  }
73
76
 
74
77
  func onFullscreenExitRequested(nativeId: NativeId) {
75
- fullscreenChangeDispatchGroup.enter()
76
- bridge.enqueueJSCall("FullscreenBridge-\(nativeId)", method: "exitFullscreen", args: []) {}
77
- fullscreenChangeDispatchGroup.wait()
78
+ guard let handler = retrieve(nativeId) else {
79
+ return
80
+ }
81
+
82
+ let (id, wait) = waiter.make(timeout: 0.25)
83
+
84
+ // Send event to JavaScript
85
+ sendEvent("onExitFullscreen", [
86
+ "nativeId": nativeId,
87
+ "id": id
88
+ ])
89
+
90
+ guard let result = wait() else {
91
+ return
92
+ }
93
+ handler.isFullscreenValueBox.update(result)
78
94
  }
79
95
  }
@@ -0,0 +1,21 @@
1
+ import Foundation
2
+
3
+ internal class LockedBox<T> {
4
+ private let lock = NSRecursiveLock()
5
+ var value: T {
6
+ lock.withLock {
7
+ _value
8
+ }
9
+ }
10
+ private var _value: T
11
+
12
+ init(value: T) {
13
+ self._value = value
14
+ }
15
+
16
+ func update(_ value: T) {
17
+ lock.withLock {
18
+ self._value = value
19
+ }
20
+ }
21
+ }
@@ -0,0 +1,11 @@
1
+ import ExpoModulesCore
2
+
3
+ extension ModuleRegistry {
4
+ func get<T: Module>(_ type: T.Type = T.self) -> T? {
5
+ guard let name = String(describing: type)
6
+ .split(separator: ".", maxSplits: 1, omittingEmptySubsequences: true).last else {
7
+ return nil
8
+ }
9
+ return self.get(moduleWithName: String(name)) as? T
10
+ }
11
+ }
@@ -1,38 +1,31 @@
1
1
  import BitmovinPlayer
2
+ import ExpoModulesCore
2
3
 
3
- @objc(NetworkModule)
4
- public class NetworkModule: NSObject, RCTBridgeModule {
5
- // swiftlint:disable:next implicitly_unwrapped_optional
6
- @objc public var bridge: RCTBridge!
7
-
4
+ /**
5
+ * Expo module for NetworkConfig management with HTTP request/response preprocessing.
6
+ * Handles bidirectional communication between native code and JavaScript for network operations.
7
+ */
8
+ public class NetworkModule: Module {
8
9
  /// In-memory mapping from `nativeId`s to `NetworkConfig` instances.
9
10
  private var networkConfigs: Registry<NetworkConfig> = [:]
10
- private var preprocessHttpRequestDelegateBridges: Registry<PreprocessHttpRequestDelegate> = [:]
11
11
  private var preprocessHttpRequestCompletionHandlers: Registry<(_ request: HttpRequest) -> Void> = [:]
12
12
  private var preprocessHttpResponseCompletionHandlers: Registry<(_ response: HttpResponse) -> Void> = [:]
13
13
 
14
- // swiftlint:disable:next implicitly_unwrapped_optional
15
- public static func moduleName() -> String! {
16
- "NetworkModule"
17
- }
18
-
19
- public static func requiresMainQueueSetup() -> Bool {
20
- true
21
- }
14
+ public func definition() -> ModuleDefinition {
15
+ Name("NetworkModule")
22
16
 
23
- // swiftlint:disable:next implicitly_unwrapped_optional
24
- public var methodQueue: DispatchQueue! {
25
- bridge.uiManager.methodQueue
26
- }
17
+ OnDestroy {
18
+ networkConfigs.removeAll()
19
+ preprocessHttpRequestCompletionHandlers.removeAll()
20
+ preprocessHttpResponseCompletionHandlers.removeAll()
21
+ }
27
22
 
28
- @objc
29
- func retrieve(_ nativeId: NativeId) -> NetworkConfig? {
30
- networkConfigs[nativeId]
31
- }
23
+ Events(
24
+ "onPreprocessHttpRequest",
25
+ "onPreprocessHttpResponse"
26
+ )
32
27
 
33
- @objc(initWithConfig:config:)
34
- func initWithConfig(_ nativeId: NativeId, config: Any?) {
35
- bridge.uiManager.addUIBlock { [weak self] _, _ in
28
+ AsyncFunction("initializeWithConfig") { [weak self] (nativeId: NativeId, config: [String: Any]) in
36
29
  guard
37
30
  self?.retrieve(nativeId) == nil,
38
31
  let networkConfig = RCTConvert.networkConfig(config)
@@ -41,26 +34,47 @@ public class NetworkModule: NSObject, RCTBridgeModule {
41
34
  }
42
35
  self?.networkConfigs[nativeId] = networkConfig
43
36
  self?.initConfigBlocks(nativeId, config)
44
- }
45
- }
37
+ }.runOnQueue(.main)
46
38
 
47
- @objc(destroy:)
48
- func destroy(_ nativeId: NativeId) {
49
- networkConfigs.removeValue(forKey: nativeId)
39
+ AsyncFunction("destroy") { [weak self] (nativeId: NativeId) in
40
+ self?.networkConfigs.removeValue(forKey: nativeId)
50
41
 
51
- preprocessHttpRequestCompletionHandlers.keys.filter { $0.starts(with: nativeId) }.forEach {
52
- preprocessHttpRequestCompletionHandlers.removeValue(forKey: $0)
53
- }
54
- preprocessHttpRequestDelegateBridges.removeValue(forKey: nativeId)
55
- preprocessHttpResponseCompletionHandlers.keys.filter { $0.starts(with: nativeId) }.forEach {
56
- preprocessHttpResponseCompletionHandlers.removeValue(forKey: $0)
57
- }
42
+ // Clean up completion handlers
43
+ self?.preprocessHttpRequestCompletionHandlers.keys.filter { $0.starts(with: nativeId) }.forEach {
44
+ self?.preprocessHttpRequestCompletionHandlers.removeValue(forKey: $0)
45
+ }
46
+ self?.preprocessHttpResponseCompletionHandlers.keys.filter { $0.starts(with: nativeId) }.forEach {
47
+ self?.preprocessHttpResponseCompletionHandlers.removeValue(forKey: $0)
48
+ }
49
+ }.runOnQueue(.main)
50
+
51
+ AsyncFunction("setPreprocessedHttpRequest") { [weak self] (requestId: String, request: [String: Any]) in
52
+ guard let completionHandler = self?.preprocessHttpRequestCompletionHandlers[requestId],
53
+ let httpRequest = RCTConvert.httpRequest(request) else {
54
+ return
55
+ }
56
+
57
+ self?.preprocessHttpRequestCompletionHandlers.removeValue(forKey: requestId)
58
+ completionHandler(httpRequest)
59
+ }.runOnQueue(.main)
60
+
61
+ AsyncFunction("setPreprocessedHttpResponse") { [weak self] (responseId: String, response: [String: Any]) in
62
+ guard let completionHandler = self?.preprocessHttpResponseCompletionHandlers[responseId],
63
+ let httpResponse = RCTConvert.httpResponse(response) else {
64
+ return
65
+ }
66
+ self?.preprocessHttpResponseCompletionHandlers.removeValue(forKey: responseId)
67
+ completionHandler(httpResponse)
68
+ }.runOnQueue(.main)
69
+ }
70
+
71
+ func retrieve(_ nativeId: NativeId) -> NetworkConfig? {
72
+ networkConfigs[nativeId]
58
73
  }
59
74
 
60
- private func initConfigBlocks(_ nativeId: NativeId, _ config: Any?) {
61
- guard let json = config as? [String: Any] else { return }
62
- initPreprocessHttpRequest(nativeId, networkConfigJson: json)
63
- initPreprocessHttpResponse(nativeId, networkConfigJson: json)
75
+ private func initConfigBlocks(_ nativeId: NativeId, _ config: [String: Any]) {
76
+ initPreprocessHttpRequest(nativeId, networkConfigJson: config)
77
+ initPreprocessHttpResponse(nativeId, networkConfigJson: config)
64
78
  }
65
79
 
66
80
  private func initPreprocessHttpRequest(_ nativeId: NativeId, networkConfigJson: [String: Any]) {
@@ -68,11 +82,14 @@ public class NetworkModule: NSObject, RCTBridgeModule {
68
82
  networkConfigJson["preprocessHttpRequest"] != nil else {
69
83
  return
70
84
  }
71
- preprocessHttpRequestDelegateBridges[nativeId] = PreprocessHttpRequestDelegateBridge(
72
- nativeId,
73
- bridge: bridge
74
- )
75
- networkConfig.preprocessHttpRequestDelegate = preprocessHttpRequestDelegateBridges[nativeId]
85
+ networkConfig.preprocessHttpRequest = { [weak self] type, request, completionHandler in
86
+ self?.preprocessHttpRequestFromJS(
87
+ nativeId: nativeId,
88
+ type: type,
89
+ request: request,
90
+ completionHandler: completionHandler
91
+ )
92
+ }
76
93
  }
77
94
 
78
95
  private func initPreprocessHttpResponse(_ nativeId: NativeId, networkConfigJson: [String: Any]) {
@@ -93,31 +110,20 @@ public class NetworkModule: NSObject, RCTBridgeModule {
93
110
 
94
111
  internal func preprocessHttpRequestFromJS(
95
112
  nativeId: NativeId,
96
- type: String,
113
+ type: HttpRequestType,
97
114
  request: HttpRequest,
98
115
  completionHandler: @escaping (
99
116
  _ request: HttpRequest
100
117
  ) -> Void
101
118
  ) {
102
- let requestId = "\(nativeId)@\(ObjectIdentifier(request).hashValue)"
103
- let args: [Any] = [
104
- requestId,
105
- type,
106
- RCTConvert.toJson(httpRequest: request),
107
- ]
119
+ let requestId = "\(nativeId)-\(UUID().uuidString)"
108
120
  preprocessHttpRequestCompletionHandlers[requestId] = completionHandler
109
- bridge.enqueueJSCall("Network-\(nativeId)", method: "onPreprocessHttpRequest", args: args) {}
110
- }
111
-
112
- @objc(setPreprocessedHttpRequest:request:)
113
- func setPreprocessedHttpRequest(_ requestId: String, _ request: [String: Any]) {
114
- guard let completionHandler = preprocessHttpRequestCompletionHandlers[requestId],
115
- let httpRequest = RCTConvert.httpRequest(request) else {
116
- return
117
- }
118
-
119
- preprocessHttpRequestCompletionHandlers.removeValue(forKey: requestId)
120
- completionHandler(httpRequest)
121
+ sendEvent("onPreprocessHttpRequest", [
122
+ "nativeId": nativeId,
123
+ "requestId": requestId,
124
+ "type": RCTConvert.toJson(httpRequestType: type),
125
+ "request": RCTConvert.toJson(httpRequest: request)
126
+ ])
121
127
  }
122
128
 
123
129
  private func preprocessHttpResponseFromJS(
@@ -128,23 +134,13 @@ public class NetworkModule: NSObject, RCTBridgeModule {
128
134
  _ response: HttpResponse
129
135
  ) -> Void
130
136
  ) {
131
- let responseId = "\(nativeId)@\(ObjectIdentifier(response).hashValue)"
132
- let args: [Any] = [
133
- responseId,
134
- RCTConvert.toJson(httpRequestType: type),
135
- RCTConvert.toJson(httpResponse: response),
136
- ]
137
+ let responseId = "\(nativeId)-\(UUID().uuidString)"
137
138
  preprocessHttpResponseCompletionHandlers[responseId] = completionHandler
138
- bridge.enqueueJSCall("Network-\(nativeId)", method: "onPreprocessHttpResponse", args: args) {}
139
- }
140
-
141
- @objc(setPreprocessedHttpResponse:response:)
142
- func setPreprocessedHttpResponse(_ responseId: String, _ response: [String: Any]) {
143
- guard let completionHandler = preprocessHttpResponseCompletionHandlers[responseId],
144
- let httpResponse = RCTConvert.httpResponse(response) else {
145
- return
146
- }
147
- preprocessHttpResponseCompletionHandlers.removeValue(forKey: responseId)
148
- completionHandler(httpResponse)
139
+ sendEvent("onPreprocessHttpResponse", [
140
+ "nativeId": nativeId,
141
+ "responseId": responseId,
142
+ "type": RCTConvert.toJson(httpRequestType: type),
143
+ "response": RCTConvert.toJson(httpResponse: response)
144
+ ])
149
145
  }
150
146
  }
@@ -1,6 +1,8 @@
1
1
  #if os(iOS)
2
2
  import BitmovinPlayer
3
+ import ExpoModulesCore
3
4
  import Foundation
5
+ import React
4
6
 
5
7
  internal class OfflineContentManagerBridge: NSObject, OfflineContentManagerListener {
6
8
  enum EventType: String {
@@ -16,19 +18,19 @@ internal class OfflineContentManagerBridge: NSObject, OfflineContentManagerListe
16
18
  }
17
19
 
18
20
  let offlineContentManager: OfflineContentManager
19
- let eventEmitter: RCTEventEmitter?
21
+ private weak var module: OfflineModule?
20
22
  let nativeId: NativeId
21
23
  let identifier: String
22
24
  var currentTrackSelection: OfflineTrackSelection?
23
25
 
24
26
  init(
25
27
  forManager offlineContentManager: OfflineContentManager,
26
- eventEmitter: RCTEventEmitter,
28
+ module: OfflineModule,
27
29
  nativeId: NativeId,
28
30
  identifier: String
29
31
  ) {
30
32
  self.offlineContentManager = offlineContentManager
31
- self.eventEmitter = eventEmitter
33
+ self.module = module
32
34
  self.nativeId = nativeId
33
35
  self.identifier = identifier
34
36
  super.init()
@@ -47,22 +49,16 @@ internal class OfflineContentManagerBridge: NSObject, OfflineContentManagerListe
47
49
  sendOfflineEvent(eventType: .onOptionsAvailable)
48
50
  }
49
51
 
50
- /**
51
- Called when an error occurs.
52
- */
53
52
  func onOfflineError(
54
53
  _ event: OfflineErrorEvent,
55
54
  offlineContentManager: OfflineContentManager
56
55
  ) {
57
56
  sendOfflineEvent(eventType: .onError, body: [
58
- "code": event.code,
57
+ "code": event.errorCode,
59
58
  "message": event.message
60
59
  ])
61
60
  }
62
61
 
63
- /**
64
- Called after a getOptions or when am OfflineOptionEntry has been updated during a process call.
65
- */
66
62
  func onAvailableTracksFetched(
67
63
  _ event: AvailableTracksFetchedEvent,
68
64
  offlineContentManager: OfflineContentManager
@@ -70,25 +66,19 @@ internal class OfflineContentManagerBridge: NSObject, OfflineContentManagerListe
70
66
  currentTrackSelection = event.tracks
71
67
 
72
68
  sendOfflineEvent(eventType: .onOptionsAvailable, body: [
73
- "options": RCTConvert.toJson(offlineTracks: event.tracks)
69
+ "options": RCTConvert.toJson(offlineTracks: event.tracks) ?? [:]
74
70
  ])
75
71
  }
76
72
 
77
- /**
78
- Called when a process call has completed.
79
- */
80
73
  func onContentDownloadFinished(
81
74
  _ event: ContentDownloadFinishedEvent,
82
75
  offlineContentManager: OfflineContentManager
83
76
  ) {
84
77
  sendOfflineEvent(eventType: .onCompleted, body: [
85
- "options": RCTConvert.toJson(offlineTracks: currentTrackSelection)
78
+ "options": RCTConvert.toJson(offlineTracks: currentTrackSelection) ?? [:]
86
79
  ])
87
80
  }
88
81
 
89
- /**
90
- Called when the progress for a process call changes.
91
- */
92
82
  func onContentDownloadProgressChanged(
93
83
  _ event: ContentDownloadProgressChangedEvent,
94
84
  offlineContentManager: OfflineContentManager
@@ -98,9 +88,6 @@ internal class OfflineContentManagerBridge: NSObject, OfflineContentManagerListe
98
88
  ])
99
89
  }
100
90
 
101
- /**
102
- Called when all actions have been suspended.
103
- */
104
91
  func onContentDownloadSuspended(
105
92
  _ event: ContentDownloadSuspendedEvent,
106
93
  offlineContentManager: OfflineContentManager
@@ -108,9 +95,6 @@ internal class OfflineContentManagerBridge: NSObject, OfflineContentManagerListe
108
95
  sendOfflineEvent(eventType: .onSuspended)
109
96
  }
110
97
 
111
- /**
112
- Called when all actions have been resumed.
113
- */
114
98
  func onContentDownloadResumed(
115
99
  _ event: ContentDownloadResumedEvent,
116
100
  offlineContentManager: OfflineContentManager
@@ -118,10 +102,6 @@ internal class OfflineContentManagerBridge: NSObject, OfflineContentManagerListe
118
102
  sendOfflineEvent(eventType: .onResumed)
119
103
  }
120
104
 
121
- /**
122
- Called when the download of the media content was canceled by the user
123
- and all partially downloaded content has been deleted from disk.
124
- */
125
105
  func onContentDownloadCanceled(
126
106
  _ event: ContentDownloadCanceledEvent,
127
107
  offlineContentManager: OfflineContentManager
@@ -129,9 +109,6 @@ internal class OfflineContentManagerBridge: NSObject, OfflineContentManagerListe
129
109
  sendOfflineEvent(eventType: .onCanceled)
130
110
  }
131
111
 
132
- /**
133
- Called when the DRM license was renewed.
134
- */
135
112
  func onOfflineContentLicenseRenewed(
136
113
  _ event: OfflineContentLicenseRenewedEvent,
137
114
  offlineContentManager: OfflineContentManager
@@ -150,8 +127,8 @@ internal class OfflineContentManagerBridge: NSObject, OfflineContentManagerListe
150
127
  sendOfflineEvent(eventType: .onDrmLicenseExpired)
151
128
  }
152
129
 
153
- private func sendOfflineEvent(eventType: EventType, body: [String: Any?] = [:]) {
154
- var baseEvent: [String: Any?] = [
130
+ private func sendOfflineEvent(eventType: EventType, body: [String: Any] = [:]) {
131
+ let baseEvent: [String: Any] = [
155
132
  "nativeId": nativeId,
156
133
  "identifier": identifier,
157
134
  "eventType": eventType.rawValue,
@@ -160,11 +137,7 @@ internal class OfflineContentManagerBridge: NSObject, OfflineContentManagerListe
160
137
 
161
138
  let eventBody = baseEvent.merging(body) { current, _ in current }
162
139
 
163
- do {
164
- try eventEmitter?.sendEvent(withName: "BitmovinOfflineEvent", body: eventBody)
165
- } catch let error as NSError {
166
- print(error)
167
- }
140
+ module?.sendEvent("onBitmovinOfflineEvent", eventBody)
168
141
  }
169
142
  }
170
143
  #endif