react-native-theoplayer 3.7.1 → 3.9.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 (86) hide show
  1. package/CHANGELOG.md +24 -1
  2. package/android/build.gradle +2 -1
  3. package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/6.10.0/ads-wrapper-6.10.0.aar +0 -0
  4. package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/{4.8.0/ads-wrapper-4.8.0.pom → 6.10.0/ads-wrapper-6.10.0.pom} +1 -1
  5. package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/maven-metadata-local.xml +4 -4
  6. package/android/src/main/java/com/theoplayer/PlayerConfigAdapter.kt +4 -0
  7. package/android/src/main/java/com/theoplayer/ReactTHEOplayerContext.kt +7 -0
  8. package/android/src/main/java/com/theoplayer/ads/AdEventAdapter.kt +9 -4
  9. package/android/src/main/java/com/theoplayer/ads/AdsModule.kt +1 -1
  10. package/android/src/main/java/com/theoplayer/audio/AudioFocusManager.kt +57 -26
  11. package/android/src/main/java/com/theoplayer/broadcast/EventBroadcastModule.kt +1 -1
  12. package/android/src/main/java/com/theoplayer/cache/CacheModule.kt +1 -1
  13. package/android/src/main/java/com/theoplayer/cast/CastModule.kt +1 -1
  14. package/android/src/main/java/com/theoplayer/drm/ContentProtectionModule.kt +1 -1
  15. package/android/src/main/java/com/theoplayer/media/MediaPlaybackService.kt +8 -17
  16. package/android/src/main/java/com/theoplayer/player/PlayerModule.kt +1 -1
  17. package/ios/THEOplayerRCTBridge.m +6 -6
  18. package/ios/THEOplayerRCTPlayerAPI.swift +25 -25
  19. package/ios/ads/THEOplayerRCTAdsAPI.swift +17 -17
  20. package/ios/backgroundAudio/THEOplayerRCTNowPlayingManager.swift +4 -0
  21. package/ios/cache/THEOplayerRCTCacheAPI.swift +29 -29
  22. package/ios/casting/THEOplayerRCTCastAPI.swift +9 -9
  23. package/ios/contentprotection/THEOplayerRCTContentProtectionAPI.swift +22 -22
  24. package/ios/eventBroadcasting/THEOplayerRCTEventBroadcastAPI.swift +5 -5
  25. package/lib/commonjs/api/config/PlayerConfiguration.js.map +1 -1
  26. package/lib/commonjs/internal/adapter/THEOplayerAdapter.js +19 -18
  27. package/lib/commonjs/internal/adapter/THEOplayerAdapter.js.map +1 -1
  28. package/lib/commonjs/internal/adapter/abr/AbrAdapter.js +2 -1
  29. package/lib/commonjs/internal/adapter/abr/AbrAdapter.js.map +1 -1
  30. package/lib/commonjs/internal/adapter/ads/THEOplayerNativeAdsAdapter.js +7 -6
  31. package/lib/commonjs/internal/adapter/ads/THEOplayerNativeAdsAdapter.js.map +1 -1
  32. package/lib/commonjs/internal/adapter/ads/THEOplayerNativeGoogleDAI.js +5 -4
  33. package/lib/commonjs/internal/adapter/ads/THEOplayerNativeGoogleDAI.js.map +1 -1
  34. package/lib/commonjs/internal/adapter/broadcast/EventBroadcastAdapter.js +2 -1
  35. package/lib/commonjs/internal/adapter/broadcast/EventBroadcastAdapter.js.map +1 -1
  36. package/lib/commonjs/internal/adapter/cast/THEOplayerNativeAirplay.js +5 -4
  37. package/lib/commonjs/internal/adapter/cast/THEOplayerNativeAirplay.js.map +1 -1
  38. package/lib/commonjs/internal/adapter/cast/THEOplayerNativeChromecast.js +7 -6
  39. package/lib/commonjs/internal/adapter/cast/THEOplayerNativeChromecast.js.map +1 -1
  40. package/lib/commonjs/internal/adapter/track/TextTrackStyleAdapter.js +11 -10
  41. package/lib/commonjs/internal/adapter/track/TextTrackStyleAdapter.js.map +1 -1
  42. package/lib/commonjs/internal/cache/MediaCache.js +4 -3
  43. package/lib/commonjs/internal/cache/MediaCache.js.map +1 -1
  44. package/lib/commonjs/internal/cache/NativeCachingTaskAdapter.js +5 -4
  45. package/lib/commonjs/internal/cache/NativeCachingTaskAdapter.js.map +1 -1
  46. package/lib/commonjs/internal/drm/ContentProtectionRegistry.js +23 -22
  47. package/lib/commonjs/internal/drm/ContentProtectionRegistry.js.map +1 -1
  48. package/lib/module/api/config/PlayerConfiguration.js.map +1 -1
  49. package/lib/module/internal/adapter/THEOplayerAdapter.js +19 -18
  50. package/lib/module/internal/adapter/THEOplayerAdapter.js.map +1 -1
  51. package/lib/module/internal/adapter/abr/AbrAdapter.js +2 -1
  52. package/lib/module/internal/adapter/abr/AbrAdapter.js.map +1 -1
  53. package/lib/module/internal/adapter/ads/THEOplayerNativeAdsAdapter.js +7 -6
  54. package/lib/module/internal/adapter/ads/THEOplayerNativeAdsAdapter.js.map +1 -1
  55. package/lib/module/internal/adapter/ads/THEOplayerNativeGoogleDAI.js +5 -4
  56. package/lib/module/internal/adapter/ads/THEOplayerNativeGoogleDAI.js.map +1 -1
  57. package/lib/module/internal/adapter/broadcast/EventBroadcastAdapter.js +2 -1
  58. package/lib/module/internal/adapter/broadcast/EventBroadcastAdapter.js.map +1 -1
  59. package/lib/module/internal/adapter/cast/THEOplayerNativeAirplay.js +5 -4
  60. package/lib/module/internal/adapter/cast/THEOplayerNativeAirplay.js.map +1 -1
  61. package/lib/module/internal/adapter/cast/THEOplayerNativeChromecast.js +7 -6
  62. package/lib/module/internal/adapter/cast/THEOplayerNativeChromecast.js.map +1 -1
  63. package/lib/module/internal/adapter/track/TextTrackStyleAdapter.js +11 -10
  64. package/lib/module/internal/adapter/track/TextTrackStyleAdapter.js.map +1 -1
  65. package/lib/module/internal/cache/MediaCache.js +4 -3
  66. package/lib/module/internal/cache/MediaCache.js.map +1 -1
  67. package/lib/module/internal/cache/NativeCachingTaskAdapter.js +5 -4
  68. package/lib/module/internal/cache/NativeCachingTaskAdapter.js.map +1 -1
  69. package/lib/module/internal/drm/ContentProtectionRegistry.js +23 -22
  70. package/lib/module/internal/drm/ContentProtectionRegistry.js.map +1 -1
  71. package/lib/typescript/api/config/PlayerConfiguration.d.ts +10 -0
  72. package/package.json +1 -1
  73. package/react-native-theoplayer.podspec +11 -6
  74. package/src/api/config/PlayerConfiguration.ts +11 -0
  75. package/src/internal/adapter/THEOplayerAdapter.ts +20 -18
  76. package/src/internal/adapter/abr/AbrAdapter.ts +3 -1
  77. package/src/internal/adapter/ads/THEOplayerNativeAdsAdapter.ts +8 -6
  78. package/src/internal/adapter/ads/THEOplayerNativeGoogleDAI.ts +6 -4
  79. package/src/internal/adapter/broadcast/EventBroadcastAdapter.ts +3 -1
  80. package/src/internal/adapter/cast/THEOplayerNativeAirplay.ts +6 -4
  81. package/src/internal/adapter/cast/THEOplayerNativeChromecast.ts +8 -6
  82. package/src/internal/adapter/track/TextTrackStyleAdapter.ts +11 -10
  83. package/src/internal/cache/MediaCache.ts +5 -3
  84. package/src/internal/cache/NativeCachingTaskAdapter.ts +6 -4
  85. package/src/internal/drm/ContentProtectionRegistry.ts +24 -22
  86. package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/4.8.0/ads-wrapper-4.8.0.aar +0 -0
@@ -28,15 +28,15 @@ let TTS_PROP_COLOR_A = "a"
28
28
  @objc(THEOplayerRCTPlayerAPI)
29
29
  class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
30
30
  @objc var bridge: RCTBridge!
31
-
31
+
32
32
  static func moduleName() -> String! {
33
- return "PlayerModule"
33
+ return "THEORCTPlayerModule"
34
34
  }
35
-
35
+
36
36
  static func requiresMainQueueSetup() -> Bool {
37
37
  return false
38
38
  }
39
-
39
+
40
40
  @objc(setPaused:paused:)
41
41
  func setPaused(_ node: NSNumber, paused: Bool) -> Void {
42
42
  DispatchQueue.main.async {
@@ -52,7 +52,7 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
52
52
  }
53
53
  }
54
54
  }
55
-
55
+
56
56
  @objc(setSource:src:)
57
57
  func setSource(_ node: NSNumber, src: NSDictionary) -> Void {
58
58
  DispatchQueue.main.async {
@@ -71,7 +71,7 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
71
71
  }
72
72
  }
73
73
  }
74
-
74
+
75
75
  private func setNewSourceDescription(player: THEOplayer, srcDescription: SourceDescription) {
76
76
  if DEBUG_PLAYER_API { PrintUtils.printLog(logText: "[NATIVE] Setting new source on TheoPlayer") }
77
77
  #if canImport(THEOplayerConnectorSideloadedSubtitle)
@@ -80,12 +80,12 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
80
80
  player.source = srcDescription
81
81
  #endif
82
82
  }
83
-
83
+
84
84
  @objc(setABRConfig:abrConfig:)
85
85
  func setABRConfig(_ node: NSNumber, setABRConfig: NSDictionary) -> Void {
86
86
  if DEBUG_PLAYER_API { print(ERROR_MESSAGE_PLAYER_ABR_UNSUPPORTED_FEATURE) }
87
87
  }
88
-
88
+
89
89
  @objc(setCurrentTime:time:)
90
90
  func setCurrentTime(_ node: NSNumber, time: NSNumber) -> Void {
91
91
  DispatchQueue.main.async {
@@ -97,7 +97,7 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
97
97
  }
98
98
  }
99
99
  }
100
-
100
+
101
101
  @objc(setMuted:muted:)
102
102
  func setMuted(_ node: NSNumber, muted: Bool) -> Void {
103
103
  DispatchQueue.main.async {
@@ -110,12 +110,12 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
110
110
  }
111
111
  }
112
112
  }
113
-
113
+
114
114
  @objc(setVolume:volume:)
115
115
  func setVolume(_ node: NSNumber, volume: NSNumber) -> Void {
116
116
  if DEBUG_PLAYER_API { PrintUtils.printLog(logText: "[NATIVE] Setting volume: TheoPlayer does not handle volume changes for iOS. This is handled by the device.") }
117
117
  }
118
-
118
+
119
119
  @objc(setPlaybackRate:playbackRate:)
120
120
  func setPlaybackRate(_ node: NSNumber, playbackRate: NSNumber) -> Void {
121
121
  DispatchQueue.main.async {
@@ -129,7 +129,7 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
129
129
  }
130
130
  }
131
131
  }
132
-
132
+
133
133
  @objc(setPresentationMode:presentationMode:)
134
134
  func setPresentationMode(_ node: NSNumber, presentationMode: String) -> Void {
135
135
  DispatchQueue.main.async {
@@ -139,7 +139,7 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
139
139
  }
140
140
  }
141
141
  }
142
-
142
+
143
143
  @objc(setAspectRatio:ratio:)
144
144
  func setAspectRatio(_ node: NSNumber, ratio: String) -> Void {
145
145
  DispatchQueue.main.async {
@@ -153,7 +153,7 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
153
153
  }
154
154
  }
155
155
  }
156
-
156
+
157
157
  @objc(setPipConfig:pipConfig:)
158
158
  func setPipConfig(_ node: NSNumber, pipConfig: NSDictionary) -> Void {
159
159
  DispatchQueue.main.async {
@@ -163,13 +163,13 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
163
163
  }
164
164
  }
165
165
  }
166
-
166
+
167
167
  private func parsePipConfig(configDict: NSDictionary) -> PipConfig {
168
168
  var pipConfig = PipConfig()
169
169
  pipConfig.canStartPictureInPictureAutomaticallyFromInline = configDict["startsAutomatically"] as? Bool ?? false
170
170
  return pipConfig
171
171
  }
172
-
172
+
173
173
  @objc(setBackgroundAudioConfig:backgroundAudioConfig:)
174
174
  func setBackgroundAudioConfig(_ node: NSNumber, backgroundAudioConfig: NSDictionary) -> Void {
175
175
  DispatchQueue.main.async {
@@ -179,13 +179,13 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
179
179
  }
180
180
  }
181
181
  }
182
-
182
+
183
183
  private func parseBackgroundAudioConfig(configDict: NSDictionary) -> BackgroundAudioConfig {
184
184
  var backgroundAudio = BackgroundAudioConfig()
185
185
  backgroundAudio.enabled = configDict["enabled"] as? Bool ?? false
186
186
  return backgroundAudio
187
187
  }
188
-
188
+
189
189
  @objc(setSelectedTextTrack:uid:)
190
190
  func setSelectedTextTrack(_ node: NSNumber, uid: NSNumber) -> Void {
191
191
  DispatchQueue.main.async {
@@ -203,12 +203,12 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
203
203
  textTrack.mode = TextTrackMode.showing
204
204
  } else if textTrack.mode == TextTrackMode.showing {
205
205
  textTrack.mode = TextTrackMode.disabled
206
- }
206
+ }
207
207
  }
208
208
  }
209
209
  }
210
210
  }
211
-
211
+
212
212
  @objc(setSelectedAudioTrack:uid:)
213
213
  func setSelectedAudioTrack(_ node: NSNumber, uid: NSNumber) -> Void {
214
214
  DispatchQueue.main.async {
@@ -227,7 +227,7 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
227
227
  }
228
228
  }
229
229
  }
230
-
230
+
231
231
  @objc(setSelectedVideoTrack:uid:)
232
232
  func setSelectedVideoTrack(_ node: NSNumber, uid: NSNumber) -> Void {
233
233
  DispatchQueue.main.async {
@@ -246,13 +246,13 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
246
246
  }
247
247
  }
248
248
  }
249
-
249
+
250
250
  @objc(setTargetVideoQuality:uid:)
251
251
  func setTargetVideoQuality(_ node: NSNumber, uid: [NSNumber]) -> Void {
252
252
  if DEBUG_PLAYER_API { print(ERROR_MESSAGE_PLAYER_QUALITY_UNSUPPORTED_FEATURE) }
253
253
  return
254
254
  }
255
-
255
+
256
256
  @objc(setPreload:type:)
257
257
  func setPreload(_ node: NSNumber, type: String) -> Void {
258
258
  DispatchQueue.main.async {
@@ -266,7 +266,7 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
266
266
  }
267
267
  }
268
268
  }
269
-
269
+
270
270
  @objc(setTextTrackStyle:textTrackStyle:)
271
271
  func setTextTrackStyle(_ node: NSNumber, textTrackStyle: NSDictionary) -> Void {
272
272
  DispatchQueue.main.async {
@@ -306,5 +306,5 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
306
306
  }
307
307
  }
308
308
  }
309
-
309
+
310
310
  }
@@ -25,11 +25,11 @@ let ERROR_MESSAGE_ADS_GET_SCHEDULED_ADBREAKS_UNDEFINED = "Undefined adbreaks arr
25
25
  @objc(THEOplayerRCTAdsAPI)
26
26
  class THEOplayerRCTAdsAPI: NSObject, RCTBridgeModule {
27
27
  @objc var bridge: RCTBridge!
28
-
28
+
29
29
  static func moduleName() -> String! {
30
- return "AdsModule"
30
+ return "THEORCTAdsModule"
31
31
  }
32
-
32
+
33
33
  static func requiresMainQueueSetup() -> Bool {
34
34
  return false
35
35
  }
@@ -37,7 +37,7 @@ class THEOplayerRCTAdsAPI: NSObject, RCTBridgeModule {
37
37
  #if (GOOGLE_IMA || GOOGLE_DAI) || canImport(THEOplayerGoogleIMAIntegration)
38
38
  @objc(skip:)
39
39
  func skip(_ node: NSNumber) -> Void {
40
-
40
+
41
41
  DispatchQueue.main.async {
42
42
  let theView = self.bridge.uiManager.view(forReactTag: node) as! THEOplayerRCTView
43
43
  if let ads = theView.ads() {
@@ -47,7 +47,7 @@ class THEOplayerRCTAdsAPI: NSObject, RCTBridgeModule {
47
47
  }
48
48
  }
49
49
  }
50
-
50
+
51
51
  @objc(playing:resolver:rejecter:)
52
52
  func playing(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
53
53
  DispatchQueue.main.async {
@@ -60,7 +60,7 @@ class THEOplayerRCTAdsAPI: NSObject, RCTBridgeModule {
60
60
  }
61
61
  }
62
62
  }
63
-
63
+
64
64
  @objc(currentAdBreak:resolver:rejecter:)
65
65
  func currentAdBreak(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
66
66
  DispatchQueue.main.async {
@@ -74,7 +74,7 @@ class THEOplayerRCTAdsAPI: NSObject, RCTBridgeModule {
74
74
  }
75
75
  }
76
76
  }
77
-
77
+
78
78
  @objc(currentAds:resolver:rejecter:)
79
79
  func currentAds(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
80
80
  DispatchQueue.main.async {
@@ -92,7 +92,7 @@ class THEOplayerRCTAdsAPI: NSObject, RCTBridgeModule {
92
92
  }
93
93
  }
94
94
  }
95
-
95
+
96
96
  @objc(scheduledAdBreaks:resolver:rejecter:)
97
97
  func scheduledAdBreaks(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
98
98
  DispatchQueue.main.async {
@@ -110,7 +110,7 @@ class THEOplayerRCTAdsAPI: NSObject, RCTBridgeModule {
110
110
  }
111
111
  }
112
112
  }
113
-
113
+
114
114
  @objc(schedule:ad:)
115
115
  func schedule(_ node: NSNumber, adDict: NSDictionary) -> Void {
116
116
  DispatchQueue.main.async {
@@ -124,46 +124,46 @@ class THEOplayerRCTAdsAPI: NSObject, RCTBridgeModule {
124
124
  }
125
125
  }
126
126
  }
127
-
127
+
128
128
  #else
129
-
129
+
130
130
  @objc(skip:)
131
131
  func skip(_ node: NSNumber) -> Void {
132
132
  if DEBUG_ADS_API { print(ERROR_MESSAGE_ADS_UNSUPPORTED_FEATURE) }
133
133
  return
134
134
  }
135
-
135
+
136
136
  @objc(playing:resolver:rejecter:)
137
137
  func playing(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
138
138
  if DEBUG_ADS_API { print(ERROR_MESSAGE_ADS_UNSUPPORTED_FEATURE) }
139
139
  resolve(false)
140
140
  }
141
-
141
+
142
142
  @objc(currentAdBreak:resolver:rejecter:)
143
143
  func currentAdBreak(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
144
144
  if DEBUG_ADS_API { print(ERROR_MESSAGE_ADS_UNSUPPORTED_FEATURE) }
145
145
  resolve([:])
146
146
  }
147
-
147
+
148
148
  @objc(currentAds:resolver:rejecter:)
149
149
  func currentAds(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
150
150
  if DEBUG_ADS_API { print(ERROR_MESSAGE_ADS_UNSUPPORTED_FEATURE) }
151
151
  resolve([])
152
152
  }
153
-
153
+
154
154
  @objc(scheduledAdBreaks:resolver:rejecter:)
155
155
  func scheduledAdBreaks(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
156
156
  if DEBUG_ADS_API { print(ERROR_MESSAGE_ADS_UNSUPPORTED_FEATURE) }
157
157
  resolve([])
158
158
  // TODO: handle request for scheduled adbreaks. Awaiting iOS SDK implementation
159
159
  }
160
-
160
+
161
161
  @objc(schedule:ad:)
162
162
  func schedule(_ node: NSNumber, adDict: NSDictionary) -> Void {
163
163
  if DEBUG_ADS_API { print(ERROR_MESSAGE_ADS_UNSUPPORTED_FEATURE) }
164
164
  return
165
165
  }
166
-
166
+
167
167
  #endif
168
168
 
169
169
  }
@@ -21,6 +21,10 @@ class THEOplayerRCTNowPlayingManager {
21
21
  func destroy() {
22
22
  // dettach listeners
23
23
  self.dettachListeners()
24
+
25
+ // clear nowPlayingInfo
26
+ self.nowPlayingInfo = [:]
27
+ self.clearNowPlayingOnInfoCenter()
24
28
  }
25
29
 
26
30
  // MARK: - player setup / breakdown
@@ -22,19 +22,19 @@ let ERROR_MESSAGE_CACHE_API_UNSUPPORTED_FEATURE = "Cache API is not supported fo
22
22
  class THEOplayerRCTCacheAPI: RCTEventEmitter {
23
23
  // MARK: Cache Listeners
24
24
  private var cacheStatusListener: EventListener?
25
-
25
+
26
26
  // MARK: CacheTask listeners (attached dynamically to new tasks)
27
27
  private var taskStateChangeListeners: [String:EventListener] = [:] // key is CacheTask.id
28
28
  private var taskProgressListeners: [String:EventListener] = [:] // key is CacheTask.id
29
-
29
+
30
30
  override static func moduleName() -> String! {
31
- return "CacheModule"
31
+ return "THEORCTCacheModule"
32
32
  }
33
-
33
+
34
34
  override static func requiresMainQueueSetup() -> Bool {
35
35
  return false
36
36
  }
37
-
37
+
38
38
  override func supportedEvents() -> [String]! {
39
39
  return [
40
40
  "onCacheStatusChange",
@@ -44,18 +44,18 @@ class THEOplayerRCTCacheAPI: RCTEventEmitter {
44
44
  "onCachingTaskStatusChangeEvent"
45
45
  ]
46
46
  }
47
-
47
+
48
48
  override init() {
49
49
  super.init()
50
-
50
+
51
51
  // attach listeners
52
52
  self.attachCacheListeners()
53
53
  }
54
-
54
+
55
55
  deinit {
56
56
  self.detachCacheListeners()
57
57
  }
58
-
58
+
59
59
  // MARK: - attach/dettach cache Listeners
60
60
  private func attachCacheListeners() {
61
61
  #if os(iOS)
@@ -67,14 +67,14 @@ class THEOplayerRCTCacheAPI: RCTEventEmitter {
67
67
  ])
68
68
  }
69
69
  if DEBUG_CACHE_EVENTS { PrintUtils.printLog(logText: "[NATIVE] StateChange listener attached to THEOplayer.cache") }
70
-
70
+
71
71
  // Attach listeners to all task currently known to cache
72
72
  for cachingTask in THEOplayer.cache.tasks {
73
73
  self.attachTaskListenersToTask(cachingTask)
74
74
  }
75
75
  #endif
76
76
  }
77
-
77
+
78
78
  private func detachCacheListeners() {
79
79
  #if os(iOS)
80
80
  // STATE_CHANGE
@@ -84,7 +84,7 @@ class THEOplayerRCTCacheAPI: RCTEventEmitter {
84
84
  }
85
85
  #endif
86
86
  }
87
-
87
+
88
88
  #if os(iOS)
89
89
  private func attachTaskListenersToTask(_ newTask: CachingTask) {
90
90
  // add STATE_CHANGE listeners to newly created task
@@ -94,7 +94,7 @@ class THEOplayerRCTCacheAPI: RCTEventEmitter {
94
94
  CACHETASK_PROP_ID: newTask.id,
95
95
  CACHE_EVENT_PROP_STATUS: THEOplayerRCTTypeUtils.cachingTaskStatusToString(newTask.status)
96
96
  ])
97
-
97
+
98
98
  if let errorEvent = event as? CachingTaskErrorStateChangeEvent,
99
99
  let error = errorEvent.error {
100
100
  if DEBUG_CACHE_EVENTS { PrintUtils.printLog(logText: "[NATIVE] STATE_CHANGE_ERROR event for task with id \(newTask.id): [error] \(error.code):\(error.category) - \(error.message)") }
@@ -103,7 +103,7 @@ class THEOplayerRCTCacheAPI: RCTEventEmitter {
103
103
  }
104
104
  }
105
105
  if DEBUG_CACHE_EVENTS { PrintUtils.printLog(logText: "[NATIVE] StateChange listener attached to task with id \(newTask.id).") }
106
-
106
+
107
107
  // add PROGRESS listeners to newly created task
108
108
  self.taskProgressListeners[newTask.id] = newTask.addEventListener(type: CachingTaskEventTypes.PROGRESS) { [weak self] event in
109
109
  if DEBUG_CACHE_EVENTS { PrintUtils.printLog(logText: "[NATIVE] Received PROGRESS event from task with id \(newTask.id): progress is \(newTask.percentageCached * 100.0)% of \(newTask.duration) sec.") }
@@ -114,7 +114,7 @@ class THEOplayerRCTCacheAPI: RCTEventEmitter {
114
114
  }
115
115
  if DEBUG_CACHE_EVENTS { PrintUtils.printLog(logText: "[NATIVE] Progress listener attached to task with id \(newTask.id).") }
116
116
  }
117
-
117
+
118
118
  private func detachTaskListenersFromTask(_ task: CachingTask) {
119
119
  // STATE_CHANGE
120
120
  if let taskStateChangeListener = self.taskStateChangeListeners[task.id] {
@@ -128,7 +128,7 @@ class THEOplayerRCTCacheAPI: RCTEventEmitter {
128
128
  }
129
129
  }
130
130
  #endif
131
-
131
+
132
132
  // MARK: API
133
133
 
134
134
  #if os(iOS)
@@ -139,7 +139,7 @@ class THEOplayerRCTCacheAPI: RCTEventEmitter {
139
139
  CACHE_EVENT_PROP_TASKS: THEOplayerRCTCacheAggregator.aggregateCacheTasks(tasks: THEOplayer.cache.tasks)
140
140
  ] as [String : Any])
141
141
  }
142
-
142
+
143
143
  @objc(createTask:params:)
144
144
  func createTask(_ src: NSDictionary, params: NSDictionary) -> Void {
145
145
  if DEBUG_CACHE_API { PrintUtils.printLog(logText: "[NATIVE] createTask triggered on Cache API.") }
@@ -148,17 +148,17 @@ class THEOplayerRCTCacheAPI: RCTEventEmitter {
148
148
  if let srcDescription = sourceDescription,
149
149
  let newTask = THEOplayer.cache.createTask(source: srcDescription, parameters: params) {
150
150
  if DEBUG_CACHE_API { PrintUtils.printLog(logText: "[NATIVE] New cache task created with id \(newTask.id)") }
151
-
151
+
152
152
  // emit onAddCachingTaskEvent
153
153
  self.sendEvent(withName: "onAddCachingTaskEvent", body: [
154
154
  CACHE_EVENT_PROP_TASK: THEOplayerRCTCacheAggregator.aggregateCacheTask(task: newTask)
155
155
  ])
156
-
156
+
157
157
  // attach the state and progress listeners to the new task
158
158
  self.attachTaskListenersToTask(newTask)
159
159
  }
160
160
  }
161
-
161
+
162
162
  @objc(startCachingTask:)
163
163
  func startCachingTask(_ id: NSString) -> Void {
164
164
  if DEBUG_CACHE_API { PrintUtils.printLog(logText: "[NATIVE] Start task triggered on Cache API for task with id \(id).") }
@@ -166,7 +166,7 @@ class THEOplayerRCTCacheAPI: RCTEventEmitter {
166
166
  task.start()
167
167
  }
168
168
  }
169
-
169
+
170
170
  @objc(pauseCachingTask:)
171
171
  func pauseCachingTask(_ id: NSString) -> Void {
172
172
  if DEBUG_CACHE_API { PrintUtils.printLog(logText: "[NATIVE] Pause task triggered on Cache API for task with id \(id).") }
@@ -174,7 +174,7 @@ class THEOplayerRCTCacheAPI: RCTEventEmitter {
174
174
  task.pause()
175
175
  }
176
176
  }
177
-
177
+
178
178
  @objc(removeCachingTask:)
179
179
  func removeCachingTask(_ id: NSString) -> Void {
180
180
  if DEBUG_CACHE_API { PrintUtils.printLog(logText: "[NATIVE] Remove task triggered on Cache API for task with id \(id).") }
@@ -185,7 +185,7 @@ class THEOplayerRCTCacheAPI: RCTEventEmitter {
185
185
  self.detachTaskListenersFromTask(task)
186
186
  }
187
187
  }
188
-
188
+
189
189
  @objc(renewLicense:drmConfig:)
190
190
  func renewLicense(_ id: NSString, drmConfig: NSDictionary) -> Void {
191
191
  if DEBUG_CACHE_API { PrintUtils.printLog(logText: "[NATIVE] Renew license triggered on Cache API for task with id \(id).") }
@@ -203,7 +203,7 @@ class THEOplayerRCTCacheAPI: RCTEventEmitter {
203
203
  }
204
204
  }
205
205
  }
206
-
206
+
207
207
  private func taskById(_ id: String) -> CachingTask? {
208
208
  return THEOplayer.cache.tasks.first {
209
209
  cachingTask in cachingTask.id == id
@@ -218,27 +218,27 @@ class THEOplayerRCTCacheAPI: RCTEventEmitter {
218
218
  CACHE_EVENT_PROP_TASKS: []
219
219
  ] as [String : Any])
220
220
  }
221
-
221
+
222
222
  @objc(createTask:params:)
223
223
  func createTask(_ src: NSDictionary, params: NSDictionary) -> Void {
224
224
  if DEBUG_CACHE_API { print(ERROR_MESSAGE_CACHE_API_UNSUPPORTED_FEATURE) }
225
225
  }
226
-
226
+
227
227
  @objc(startCachingTask:)
228
228
  func startCachingTask(_ id: NSString) -> Void {
229
229
  if DEBUG_CACHE_API { print(ERROR_MESSAGE_CACHE_API_UNSUPPORTED_FEATURE) }
230
230
  }
231
-
231
+
232
232
  @objc(pauseCachingTask:)
233
233
  func pauseCachingTask(_ id: NSString) -> Void {
234
234
  if DEBUG_CACHE_API { print(ERROR_MESSAGE_CACHE_API_UNSUPPORTED_FEATURE) }
235
235
  }
236
-
236
+
237
237
  @objc(removeCachingTask:)
238
238
  func removeCachingTask(_ id: NSString) -> Void {
239
239
  if DEBUG_CACHE_API { print(ERROR_MESSAGE_CACHE_API_UNSUPPORTED_FEATURE) }
240
240
  }
241
-
241
+
242
242
  @objc(renewLicense:drmConfig:)
243
243
  func renewLicense(_ id: NSString, drmConfig: NSDictionary) -> Void {
244
244
  if DEBUG_CACHE_API { print(ERROR_MESSAGE_CACHE_API_UNSUPPORTED_FEATURE) }
@@ -12,18 +12,18 @@ let ERROR_MESSAGE_CAST_ACCESS_FAILURE = "Could not access THEOplayer Cast Module
12
12
  @objc(THEOplayerRCTCastAPI)
13
13
  class THEOplayerRCTCastAPI: NSObject, RCTBridgeModule {
14
14
  @objc var bridge: RCTBridge!
15
-
15
+
16
16
  static func moduleName() -> String! {
17
- return "CastModule"
17
+ return "THEORCTCastModule"
18
18
  }
19
-
19
+
20
20
  static func requiresMainQueueSetup() -> Bool {
21
21
  return false
22
22
  }
23
-
23
+
24
24
  // MARK: CHROMECAST AND AIRPLAY
25
25
  #if os(iOS)
26
-
26
+
27
27
  @objc(casting:resolver:rejecter:)
28
28
  func casting(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
29
29
  DispatchQueue.main.async {
@@ -36,15 +36,15 @@ class THEOplayerRCTCastAPI: NSObject, RCTBridgeModule {
36
36
  }
37
37
  }
38
38
  }
39
-
39
+
40
40
  #else
41
-
41
+
42
42
  @objc(casting:resolver:rejecter:)
43
43
  func casting(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
44
44
  if DEBUG_CAST_API { print(ERROR_MESSAGE_CASTING_UNSUPPORTED_FEATURE) }
45
45
  resolve(false)
46
46
  }
47
-
47
+
48
48
  #endif
49
-
49
+
50
50
  }