react-native-theoplayer 2.5.0 → 2.7.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 (56) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/android/src/main/java/com/theoplayer/PlayerEventEmitter.kt +9 -15
  3. package/android/src/main/java/com/theoplayer/util/PayloadBuilder.kt +2 -1
  4. package/android/src/main/java/com/theoplayer/util/ViewResolver.kt +9 -1
  5. package/ios/THEOplayerRCTDebug.swift +3 -3
  6. package/ios/THEOplayerRCTMainEventHandler.swift +59 -59
  7. package/ios/THEOplayerRCTMediaTrackEventHandler.swift +18 -18
  8. package/ios/THEOplayerRCTNetworkUtils.swift +1 -1
  9. package/ios/THEOplayerRCTPlayerAPI.swift +14 -14
  10. package/ios/THEOplayerRCTPrintUtils.swift +16 -0
  11. package/ios/THEOplayerRCTSourceDescriptionBuilder.swift +6 -6
  12. package/ios/THEOplayerRCTTextTrackEventHandler.swift +21 -21
  13. package/ios/THEOplayerRCTView.swift +29 -29
  14. package/ios/ads/THEOplayerRCTAdsAPI+DAI.swift +6 -6
  15. package/ios/ads/THEOplayerRCTAdsAPI.swift +13 -13
  16. package/ios/ads/THEOplayerRCTAdsEventHandler.swift +27 -27
  17. package/ios/ads/THEOplayerRCTSourceDescriptionBuilder+Ads.swift +5 -5
  18. package/ios/backgroundAudio/THEOplayerRCTNowPlayingManager.swift +63 -37
  19. package/ios/backgroundAudio/THEOplayerRCTRemoteCommandsManager.swift +16 -16
  20. package/ios/casting/THEOplayerRCTCastAPI+Airplay.swift +6 -6
  21. package/ios/casting/THEOplayerRCTCastAPI+Chromecast.swift +10 -10
  22. package/ios/casting/THEOplayerRCTCastAPI.swift +1 -1
  23. package/ios/casting/THEOplayerRCTCastEventHandler.swift +11 -11
  24. package/ios/contentprotection/THEOplayerRCTContentProtectionAPI.swift +1 -1
  25. package/ios/pip/THEOplayerRCTPipControlsManager.swift +1 -1
  26. package/lib/commonjs/api/abr/ABRConfiguration.js +25 -0
  27. package/lib/commonjs/api/abr/ABRConfiguration.js.map +1 -1
  28. package/lib/commonjs/api/track/Track.js +5 -1
  29. package/lib/commonjs/api/track/Track.js.map +1 -1
  30. package/lib/commonjs/internal/THEOplayerView.web.js +2 -6
  31. package/lib/commonjs/internal/THEOplayerView.web.js.map +1 -1
  32. package/lib/commonjs/internal/adapter/THEOplayerAdapter.js +41 -10
  33. package/lib/commonjs/internal/adapter/THEOplayerAdapter.js.map +1 -1
  34. package/lib/commonjs/internal/adapter/THEOplayerWebAdapter.js +105 -52
  35. package/lib/commonjs/internal/adapter/THEOplayerWebAdapter.js.map +1 -1
  36. package/lib/module/api/abr/ABRConfiguration.js +19 -0
  37. package/lib/module/api/abr/ABRConfiguration.js.map +1 -1
  38. package/lib/module/api/track/Track.js +4 -1
  39. package/lib/module/api/track/Track.js.map +1 -1
  40. package/lib/module/internal/THEOplayerView.web.js +2 -6
  41. package/lib/module/internal/THEOplayerView.web.js.map +1 -1
  42. package/lib/module/internal/adapter/THEOplayerAdapter.js +41 -10
  43. package/lib/module/internal/adapter/THEOplayerAdapter.js.map +1 -1
  44. package/lib/module/internal/adapter/THEOplayerWebAdapter.js +106 -53
  45. package/lib/module/internal/adapter/THEOplayerWebAdapter.js.map +1 -1
  46. package/lib/typescript/api/abr/ABRConfiguration.d.ts +5 -1
  47. package/lib/typescript/api/track/Track.d.ts +1 -0
  48. package/lib/typescript/internal/adapter/THEOplayerAdapter.d.ts +2 -0
  49. package/lib/typescript/internal/adapter/THEOplayerWebAdapter.d.ts +3 -3
  50. package/package.json +1 -1
  51. package/react-native-theoplayer.podspec +1 -1
  52. package/src/api/abr/ABRConfiguration.ts +5 -1
  53. package/src/api/track/Track.ts +5 -1
  54. package/src/internal/THEOplayerView.web.tsx +2 -6
  55. package/src/internal/adapter/THEOplayerAdapter.ts +44 -10
  56. package/src/internal/adapter/THEOplayerWebAdapter.ts +97 -50
@@ -140,7 +140,7 @@ public class THEOplayerRCTView: UIView {
140
140
  self.player?.removeAllIntegrations()
141
141
  self.player?.destroy()
142
142
  self.player = nil
143
- if DEBUG_THEOPLAYER_INTERACTION { print("[NATIVE] THEOplayer instance destroyed.") }
143
+ if DEBUG_THEOPLAYER_INTERACTION { PrintUtils.printLog(logText: "[NATIVE] THEOplayer instance destroyed.") }
144
144
  }
145
145
 
146
146
  // MARK: - Property bridging (config)
@@ -153,7 +153,7 @@ public class THEOplayerRCTView: UIView {
153
153
  self.chromeless = configDict["chromeless"] as? Bool ?? true
154
154
  self.parseAdsConfig(configDict: configDict)
155
155
  self.parseCastConfig(configDict: configDict)
156
- if DEBUG_VIEW { print("[NATIVE] config prop updated.") }
156
+ if DEBUG_VIEW { PrintUtils.printLog(logText: "[NATIVE] config prop updated.") }
157
157
 
158
158
  // Given the bridged config, create the initial THEOplayer instance
159
159
  self.createPlayer()
@@ -167,7 +167,7 @@ public class THEOplayerRCTView: UIView {
167
167
  @objc(setOnNativePlayerReady:)
168
168
  func setOnNativePlayerReady(nativePlayerReady: @escaping RCTDirectEventBlock) {
169
169
  self.onNativePlayerReady = nativePlayerReady
170
- if DEBUG_VIEW { print("[NATIVE] nativePlayerReady prop set.") }
170
+ if DEBUG_VIEW { PrintUtils.printLog(logText: "[NATIVE] nativePlayerReady prop set.") }
171
171
  }
172
172
 
173
173
  // MARK: - Listener based MAIN event bridging
@@ -175,121 +175,121 @@ public class THEOplayerRCTView: UIView {
175
175
  @objc(setOnNativePlay:)
176
176
  func setOnNativePlay(nativePlay: @escaping RCTDirectEventBlock) {
177
177
  self.mainEventHandler.onNativePlay = nativePlay
178
- if DEBUG_VIEW { print("[NATIVE] nativePlay prop set.") }
178
+ if DEBUG_VIEW { PrintUtils.printLog(logText: "[NATIVE] nativePlay prop set.") }
179
179
  }
180
180
 
181
181
  @objc(setOnNativePause:)
182
182
  func setOnNativePause(nativePause: @escaping RCTDirectEventBlock) {
183
183
  self.mainEventHandler.onNativePause = nativePause
184
- if DEBUG_VIEW { print("[NATIVE] nativePause prop set.") }
184
+ if DEBUG_VIEW { PrintUtils.printLog(logText: "[NATIVE] nativePause prop set.") }
185
185
  }
186
186
 
187
187
  @objc(setOnNativeSourceChange:)
188
188
  func setOnNativeSourceChange(nativeSourceChange: @escaping RCTDirectEventBlock) {
189
189
  self.mainEventHandler.onNativeSourceChange = nativeSourceChange
190
- if DEBUG_VIEW { print("[NATIVE] nativeSourceChange prop set.") }
190
+ if DEBUG_VIEW { PrintUtils.printLog(logText: "[NATIVE] nativeSourceChange prop set.") }
191
191
  }
192
192
 
193
193
  @objc(setOnNativeLoadStart:)
194
194
  func setOnNativeLoadStart(nativeLoadStart: @escaping RCTDirectEventBlock) {
195
195
  self.mainEventHandler.onNativeLoadStart = nativeLoadStart
196
- if DEBUG_VIEW { print("[NATIVE] nativeLoadStart prop set.") }
196
+ if DEBUG_VIEW { PrintUtils.printLog(logText: "[NATIVE] nativeLoadStart prop set.") }
197
197
  }
198
198
 
199
199
  @objc(setOnNativeReadyStateChange:)
200
200
  func setOnNativeReadyStateChange(nativeReadyStateChange: @escaping RCTDirectEventBlock) {
201
201
  self.mainEventHandler.onNativeReadyStateChange = nativeReadyStateChange
202
- if DEBUG_VIEW { print("[NATIVE] nativeReadyStateChange prop set.") }
202
+ if DEBUG_VIEW { PrintUtils.printLog(logText: "[NATIVE] nativeReadyStateChange prop set.") }
203
203
  }
204
204
 
205
205
  @objc(setOnNativeDurationChange:)
206
206
  func setOnNativeDurationChange(nativeDurationChange: @escaping RCTDirectEventBlock) {
207
207
  self.mainEventHandler.onNativeDurationChange = nativeDurationChange
208
- if DEBUG_VIEW { print("[NATIVE] nativeDurationChange prop set.") }
208
+ if DEBUG_VIEW { PrintUtils.printLog(logText: "[NATIVE] nativeDurationChange prop set.") }
209
209
  }
210
210
 
211
211
  @objc(setOnNativeVolumeChange:)
212
212
  func setOnNativeVolumeChange(nativeVolumeChange: @escaping RCTDirectEventBlock) {
213
213
  self.mainEventHandler.onNativeVolumeChange = nativeVolumeChange
214
- if DEBUG_VIEW { print("[NATIVE] nativeVolumeChange prop set.") }
214
+ if DEBUG_VIEW { PrintUtils.printLog(logText: "[NATIVE] nativeVolumeChange prop set.") }
215
215
  }
216
216
 
217
217
  @objc(setOnNativeProgress:)
218
218
  func setOnNativeProgress(nativeProgress: @escaping RCTBubblingEventBlock) {
219
219
  self.mainEventHandler.onNativeProgress = nativeProgress
220
- if DEBUG_VIEW { print("[NATIVE] nativeProgress prop set.") }
220
+ if DEBUG_VIEW { PrintUtils.printLog(logText: "[NATIVE] nativeProgress prop set.") }
221
221
  }
222
222
 
223
223
  @objc(setOnNativeTimeUpdate:)
224
224
  func setOnNativeTimeUpdate(nativeTimeUpdate: @escaping RCTBubblingEventBlock) {
225
225
  self.mainEventHandler.onNativeTimeUpdate = nativeTimeUpdate
226
- if DEBUG_VIEW { print("[NATIVE] nativeTimeUpdate prop set.") }
226
+ if DEBUG_VIEW { PrintUtils.printLog(logText: "[NATIVE] nativeTimeUpdate prop set.") }
227
227
  }
228
228
 
229
229
  @objc(setOnNativePlaying:)
230
230
  func setOnNativePlaying(nativePlaying: @escaping RCTDirectEventBlock) {
231
231
  self.mainEventHandler.onNativePlaying = nativePlaying
232
- if DEBUG_VIEW { print("[NATIVE] nativePlaying prop set.") }
232
+ if DEBUG_VIEW { PrintUtils.printLog(logText: "[NATIVE] nativePlaying prop set.") }
233
233
  }
234
234
 
235
235
  @objc(setOnNativeSeeking:)
236
236
  func setOnNativeSeeking(nativeSeeking: @escaping RCTDirectEventBlock) {
237
237
  self.mainEventHandler.onNativeSeeking = nativeSeeking
238
- if DEBUG_VIEW { print("[NATIVE] nativeSeeking prop set.") }
238
+ if DEBUG_VIEW { PrintUtils.printLog(logText: "[NATIVE] nativeSeeking prop set.") }
239
239
  }
240
240
 
241
241
  @objc(setOnNativeSeeked:)
242
242
  func setOnNativeSeeked(nativeSeeked: @escaping RCTDirectEventBlock) {
243
243
  self.mainEventHandler.onNativeSeeked = nativeSeeked
244
- if DEBUG_VIEW { print("[NATIVE] nativeSeeked prop set.") }
244
+ if DEBUG_VIEW { PrintUtils.printLog(logText: "[NATIVE] nativeSeeked prop set.") }
245
245
  }
246
246
 
247
247
  @objc(setOnNativeEnded:)
248
248
  func setOnNativeEnded(nativeEnded: @escaping RCTDirectEventBlock) {
249
249
  self.mainEventHandler.onNativeEnded = nativeEnded
250
- if DEBUG_VIEW { print("[NATIVE] nativeEnded prop set.") }
250
+ if DEBUG_VIEW { PrintUtils.printLog(logText: "[NATIVE] nativeEnded prop set.") }
251
251
  }
252
252
 
253
253
  @objc(setOnNativeError:)
254
254
  func setOnNativeError(nativeError: @escaping RCTDirectEventBlock) {
255
255
  self.mainEventHandler.onNativeError = nativeError
256
- if DEBUG_VIEW { print("[NATIVE] nativeError prop set.") }
256
+ if DEBUG_VIEW { PrintUtils.printLog(logText: "[NATIVE] nativeError prop set.") }
257
257
  }
258
258
 
259
259
  @objc(setOnNativeLoadedData:)
260
260
  func setOnNativeLoadedData(nativeLoadedData: @escaping RCTDirectEventBlock) {
261
261
  self.mainEventHandler.onNativeLoadedData = nativeLoadedData
262
- if DEBUG_VIEW { print("[NATIVE] nativeLoadedData prop set.") }
262
+ if DEBUG_VIEW { PrintUtils.printLog(logText: "[NATIVE] nativeLoadedData prop set.") }
263
263
  }
264
264
 
265
265
  @objc(setOnNativeRateChange:)
266
266
  func setOnNativeRateChange(nativeRateChange: @escaping RCTDirectEventBlock) {
267
267
  self.mainEventHandler.onNativeRateChange = nativeRateChange
268
- if DEBUG_VIEW { print("[NATIVE] nativeRateChange prop set.") }
268
+ if DEBUG_VIEW { PrintUtils.printLog(logText: "[NATIVE] nativeRateChange prop set.") }
269
269
  }
270
270
 
271
271
  @objc(setOnNativeLoadedMetadata:)
272
272
  func setOnNativeLoadedMetadata(nativeLoadedMetadata: @escaping RCTDirectEventBlock) {
273
273
  self.mainEventHandler.onNativeLoadedMetadata = nativeLoadedMetadata
274
- if DEBUG_VIEW { print("[NATIVE] nativeLoadedMetadata prop set.") }
274
+ if DEBUG_VIEW { PrintUtils.printLog(logText: "[NATIVE] nativeLoadedMetadata prop set.") }
275
275
  }
276
276
 
277
277
  @objc(setOnNativeWaiting:)
278
278
  func setOnNativeWaiting(nativeWaiting: @escaping RCTDirectEventBlock) {
279
279
  self.mainEventHandler.onNativeWaiting = nativeWaiting
280
- if DEBUG_VIEW { print("[NATIVE] nativeWaiting prop set.") }
280
+ if DEBUG_VIEW { PrintUtils.printLog(logText: "[NATIVE] nativeWaiting prop set.") }
281
281
  }
282
282
 
283
283
  @objc(setOnNativeCanPlay:)
284
284
  func setOnNativeCanPlay(nativeCanPlay: @escaping RCTDirectEventBlock) {
285
285
  self.mainEventHandler.onNativeCanPlay = nativeCanPlay
286
- if DEBUG_VIEW { print("[NATIVE] nativeCanPlay prop set.") }
286
+ if DEBUG_VIEW { PrintUtils.printLog(logText: "[NATIVE] nativeCanPlay prop set.") }
287
287
  }
288
288
 
289
289
  @objc(setOnNativePresentationModeChange:)
290
290
  func setOnNativePresentationModeChange(nativePresentationMode: @escaping RCTDirectEventBlock) {
291
291
  self.mainEventHandler.onNativePresentationModeChange = nativePresentationMode
292
- if DEBUG_VIEW { print("[NATIVE] nativePresentationMode prop set.") }
292
+ if DEBUG_VIEW { PrintUtils.printLog(logText: "[NATIVE] nativePresentationMode prop set.") }
293
293
  }
294
294
 
295
295
  // MARK: - Listener based TEXTTRACK event bridging
@@ -297,13 +297,13 @@ public class THEOplayerRCTView: UIView {
297
297
  @objc(setOnNativeTextTrackListEvent:)
298
298
  func setOnNativeTextTrackListEvent(nativeTextTrackListEvent: @escaping RCTDirectEventBlock) {
299
299
  self.textTrackEventHandler.onNativeTextTrackListEvent = nativeTextTrackListEvent
300
- if DEBUG_VIEW { print("[NATIVE] nativeTextTrackListEvent prop set.") }
300
+ if DEBUG_VIEW { PrintUtils.printLog(logText: "[NATIVE] nativeTextTrackListEvent prop set.") }
301
301
  }
302
302
 
303
303
  @objc(setOnNativeTextTrackEvent:)
304
304
  func setOnNativeTextTrackEvent(nativeTextTrackEvent: @escaping RCTDirectEventBlock) {
305
305
  self.textTrackEventHandler.onNativeTextTrackEvent = nativeTextTrackEvent
306
- if DEBUG_VIEW { print("[NATIVE] nativeTextTrackEvent prop set.") }
306
+ if DEBUG_VIEW { PrintUtils.printLog(logText: "[NATIVE] nativeTextTrackEvent prop set.") }
307
307
  }
308
308
 
309
309
  // MARK: - Listener based MEDIATRACK event bridging
@@ -311,13 +311,13 @@ public class THEOplayerRCTView: UIView {
311
311
  @objc(setOnNativeMediaTrackListEvent:)
312
312
  func setOnNativeMediaTrackListEvent(nativeMediaTrackListEvent: @escaping RCTDirectEventBlock) {
313
313
  self.mediaTrackEventHandler.onNativeMediaTrackListEvent = nativeMediaTrackListEvent
314
- if DEBUG_VIEW { print("[NATIVE] nativeMediaTrackListEvent prop set.") }
314
+ if DEBUG_VIEW { PrintUtils.printLog(logText: "[NATIVE] nativeMediaTrackListEvent prop set.") }
315
315
  }
316
316
 
317
317
  @objc(setOnNativeMediaTrackEvent:)
318
318
  func setOnNativeMediaTrackEvent(nativeMediaTrackEvent: @escaping RCTDirectEventBlock) {
319
319
  self.mediaTrackEventHandler.onNativeMediaTrackEvent = nativeMediaTrackEvent
320
- if DEBUG_VIEW { print("[NATIVE] nativeMediaTrackEvent prop set.") }
320
+ if DEBUG_VIEW { PrintUtils.printLog(logText: "[NATIVE] nativeMediaTrackEvent prop set.") }
321
321
  }
322
322
 
323
323
  // MARK: - Listener based CAST event bridging
@@ -325,7 +325,7 @@ public class THEOplayerRCTView: UIView {
325
325
  @objc(setOnNativeCastEvent:)
326
326
  func setOnNativeCastEvent(nativeCastEvent: @escaping RCTDirectEventBlock) {
327
327
  self.castEventHandler.onNativeCastEvent = nativeCastEvent
328
- if DEBUG_VIEW { print("[NATIVE] nativeCastEvent prop set.") }
328
+ if DEBUG_VIEW { PrintUtils.printLog(logText: "[NATIVE] nativeCastEvent prop set.") }
329
329
  }
330
330
 
331
331
  // MARK: - Listener based AD event bridging
@@ -333,6 +333,6 @@ public class THEOplayerRCTView: UIView {
333
333
  @objc(setOnNativeAdEvent:)
334
334
  func setOnNativeAdEvent(nativeAdEvent: @escaping RCTDirectEventBlock) {
335
335
  self.adEventHandler.onNativeAdEvent = nativeAdEvent
336
- if DEBUG_VIEW { print("[NATIVE] nativeAdEvent prop set.") }
336
+ if DEBUG_VIEW { PrintUtils.printLog(logText: "[NATIVE] nativeAdEvent prop set.") }
337
337
  }
338
338
  }
@@ -21,17 +21,17 @@ extension THEOplayerRCTAdsAPI {
21
21
  dai.requestSnapBack { enabled, error in
22
22
  if let err = error {
23
23
  reject(ERROR_CODE_DAI_GET_SNAPBACK_FAILED, err.localizedDescription, error)
24
- if DEBUG_ADS_API { print("[NATIVE] Retrieving dai snapback status failed: \(err.localizedDescription)") }
24
+ if DEBUG_ADS_API { PrintUtils.printLog(logText: "[NATIVE] Retrieving dai snapback status failed: \(err.localizedDescription)") }
25
25
  } else if let snapBack = enabled {
26
26
  resolve(snapBack)
27
27
  } else {
28
28
  reject(ERROR_CODE_DAI_GET_SNAPBACK_UNDEFINED, ERROR_MESSAGE_DAI_GET_SNAPBACK_UNDEFINED, nil)
29
- if DEBUG_ADS_API { print("[NATIVE] Retrieving dai snapback status failed.") }
29
+ if DEBUG_ADS_API { PrintUtils.printLog(logText: "[NATIVE] Retrieving dai snapback status failed.") }
30
30
  }
31
31
  }
32
32
  } else {
33
33
  reject(ERROR_CODE_DAI_ACCESS_FAILURE, ERROR_MESSAGE_DAI_ACCESS_FAILURE, nil)
34
- if DEBUG_ADS_API { print("[NATIVE] Could not retrieve dai snapback status (ads DAI module unavailable).") }
34
+ if DEBUG_ADS_API { PrintUtils.printLog(logText: "[NATIVE] Could not retrieve dai snapback status (ads DAI module unavailable).") }
35
35
  }
36
36
  }
37
37
  }
@@ -44,7 +44,7 @@ extension THEOplayerRCTAdsAPI {
44
44
  let dai = ads.dai {
45
45
  dai.setSnapBack(enabled, completionHandler: nil)
46
46
  } else {
47
- if DEBUG_ADS_API { print("[NATIVE] Could not update dai snapback status (ads DAI module unavailable).") }
47
+ if DEBUG_ADS_API { PrintUtils.printLog(logText: "[NATIVE] Could not update dai snapback status (ads DAI module unavailable).") }
48
48
  }
49
49
  }
50
50
  }
@@ -60,7 +60,7 @@ extension THEOplayerRCTAdsAPI {
60
60
  resolve(contentTime)
61
61
  } else {
62
62
  reject(ERROR_CODE_DAI_ACCESS_FAILURE, ERROR_MESSAGE_DAI_ACCESS_FAILURE, nil)
63
- if DEBUG_ADS_API { print("[NATIVE] Could not convert stream time to content time (ads DAI module unavailable).") }
63
+ if DEBUG_ADS_API { PrintUtils.printLog(logText: "[NATIVE] Could not convert stream time to content time (ads DAI module unavailable).") }
64
64
  }
65
65
  }
66
66
  }
@@ -76,7 +76,7 @@ extension THEOplayerRCTAdsAPI {
76
76
  resolve(streamTime)
77
77
  } else {
78
78
  reject(ERROR_CODE_DAI_ACCESS_FAILURE, ERROR_MESSAGE_DAI_ACCESS_FAILURE, nil)
79
- if DEBUG_ADS_API { print("[NATIVE] Could not convert content time to stream time (ads DAI module unavailable).") }
79
+ if DEBUG_ADS_API { PrintUtils.printLog(logText: "[NATIVE] Could not convert content time to stream time (ads DAI module unavailable).") }
80
80
  }
81
81
  }
82
82
  }
@@ -47,7 +47,7 @@ class THEOplayerRCTAdsAPI: NSObject, RCTBridgeModule {
47
47
  if let ads = theView.ads() {
48
48
  ads.skip()
49
49
  } else {
50
- if DEBUG_ADS_API { print("[NATIVE] Could not skip ad (ads module unavailable).") }
50
+ if DEBUG_ADS_API { PrintUtils.printLog(logText: "[NATIVE] Could not skip ad (ads module unavailable).") }
51
51
  }
52
52
  }
53
53
  }
@@ -60,14 +60,14 @@ class THEOplayerRCTAdsAPI: NSObject, RCTBridgeModule {
60
60
  ads.requestPlaying { playing, error in
61
61
  if let err = error {
62
62
  reject(ERROR_CODE_ADS_GET_PLAYING_STATE_FAILED, err.localizedDescription, error)
63
- if DEBUG_ADS_API { print("[NATIVE] Retrieving ad playing state failed: \(err.localizedDescription)") }
63
+ if DEBUG_ADS_API { PrintUtils.printLog(logText: "[NATIVE] Retrieving ad playing state failed: \(err.localizedDescription)") }
64
64
  } else {
65
65
  resolve(playing)
66
66
  }
67
67
  }
68
68
  } else {
69
69
  reject(ERROR_CODE_ADS_ACCESS_FAILURE, ERROR_MESSAGE_ADS_ACCESS_FAILURE, nil)
70
- if DEBUG_ADS_API { print("[NATIVE] Could not skip ad (ads module unavailable).") }
70
+ if DEBUG_ADS_API { PrintUtils.printLog(logText: "[NATIVE] Could not skip ad (ads module unavailable).") }
71
71
  }
72
72
  }
73
73
  }
@@ -80,17 +80,17 @@ class THEOplayerRCTAdsAPI: NSObject, RCTBridgeModule {
80
80
  ads.requestCurrentAdBreak { adBreak, error in
81
81
  if let err = error {
82
82
  reject(ERROR_CODE_ADS_GET_CURRENT_ADBREAK_FAILED, err.localizedDescription, error)
83
- if DEBUG_ADS_API { print("[NATIVE] Retrieving current adbreak failed: \(err.localizedDescription)") }
83
+ if DEBUG_ADS_API { PrintUtils.printLog(logText: "[NATIVE] Retrieving current adbreak failed: \(err.localizedDescription)") }
84
84
  } else if let currentAdBreak = adBreak {
85
85
  resolve(THEOplayerRCTAdAggregator.aggregateAdBreak(adBreak:currentAdBreak))
86
86
  } else {
87
87
  reject(ERROR_CODE_ADS_GET_CURRENT_ADBREAK_UNDEFINED, ERROR_MESSAGE_ADS_GET_CURRENT_ADBREAK_UNDEFINED, nil)
88
- if DEBUG_ADS_API { print("[NATIVE] Retrieving current adbreak failed: could not load adbreak.") }
88
+ if DEBUG_ADS_API { PrintUtils.printLog(logText: "[NATIVE] Retrieving current adbreak failed: could not load adbreak.") }
89
89
  }
90
90
  }
91
91
  } else {
92
92
  reject(ERROR_CODE_ADS_ACCESS_FAILURE, ERROR_MESSAGE_ADS_ACCESS_FAILURE, nil)
93
- if DEBUG_ADS_API { print("[NATIVE] Could not retrieve current adbreak (ads module unavailable).") }
93
+ if DEBUG_ADS_API { PrintUtils.printLog(logText: "[NATIVE] Could not retrieve current adbreak (ads module unavailable).") }
94
94
  }
95
95
  }
96
96
  }
@@ -103,7 +103,7 @@ class THEOplayerRCTAdsAPI: NSObject, RCTBridgeModule {
103
103
  ads.requestCurrentAds { adsArray, error in
104
104
  if let err = error {
105
105
  reject(ERROR_CODE_ADS_GET_CURRENT_ADS_FAILED, err.localizedDescription, error)
106
- if DEBUG_ADS_API { print("[NATIVE] Retrieving current ads failed: \(err.localizedDescription)") }
106
+ if DEBUG_ADS_API { PrintUtils.printLog(logText: "[NATIVE] Retrieving current ads failed: \(err.localizedDescription)") }
107
107
  } else if let currentAdsArray = adsArray {
108
108
  var currentAds: [[String:Any]] = []
109
109
  for ad in currentAdsArray {
@@ -112,12 +112,12 @@ class THEOplayerRCTAdsAPI: NSObject, RCTBridgeModule {
112
112
  resolve(currentAds)
113
113
  } else {
114
114
  reject(ERROR_CODE_ADS_GET_CURRENT_ADS_UNDEFINED, ERROR_MESSAGE_ADS_GET_CURRENT_ADS_UNDEFINED, nil)
115
- if DEBUG_ADS_API { print("[NATIVE] Retrieving current ads failed: could not load ads.") }
115
+ if DEBUG_ADS_API { PrintUtils.printLog(logText: "[NATIVE] Retrieving current ads failed: could not load ads.") }
116
116
  }
117
117
  }
118
118
  } else {
119
119
  reject(ERROR_CODE_ADS_ACCESS_FAILURE, ERROR_MESSAGE_ADS_ACCESS_FAILURE, nil)
120
- if DEBUG_ADS_API { print("[NATIVE] Could not retrieve current ad (ads module unavailable).") }
120
+ if DEBUG_ADS_API { PrintUtils.printLog(logText: "[NATIVE] Could not retrieve current ad (ads module unavailable).") }
121
121
  }
122
122
  }
123
123
  }
@@ -130,7 +130,7 @@ class THEOplayerRCTAdsAPI: NSObject, RCTBridgeModule {
130
130
  ads.requestScheduledAdBreaks { adBreaksArray, error in
131
131
  if let err = error {
132
132
  reject(ERROR_CODE_ADS_GET_SCHEDULED_ADBREAKS_FAILED, err.localizedDescription, error)
133
- if DEBUG_ADS_API { print("[NATIVE] Retrieving scheduled adbreaks failed: \(err.localizedDescription)") }
133
+ if DEBUG_ADS_API { PrintUtils.printLog(logText: "[NATIVE] Retrieving scheduled adbreaks failed: \(err.localizedDescription)") }
134
134
  } else if let currentAdBreaksArray = adBreaksArray {
135
135
  var currentAdBreaks: [[String:Any]] = []
136
136
  for adbreak in currentAdBreaksArray {
@@ -139,12 +139,12 @@ class THEOplayerRCTAdsAPI: NSObject, RCTBridgeModule {
139
139
  resolve(currentAdBreaks)
140
140
  } else {
141
141
  reject(ERROR_CODE_ADS_GET_SCHEDULED_ADBREAKS_UNDEFINED, ERROR_MESSAGE_ADS_GET_SCHEDULED_ADBREAKS_UNDEFINED, nil)
142
- if DEBUG_ADS_API { print("[NATIVE] Retrieving current adbreaks failed: could not load adbreaks.") }
142
+ if DEBUG_ADS_API { PrintUtils.printLog(logText: "[NATIVE] Retrieving current adbreaks failed: could not load adbreaks.") }
143
143
  }
144
144
  }
145
145
  } else {
146
146
  reject(ERROR_CODE_ADS_ACCESS_FAILURE, ERROR_MESSAGE_ADS_ACCESS_FAILURE, nil)
147
- if DEBUG_ADS_API { print("[NATIVE] Could not retrieve current ad (ads module unavailable).") }
147
+ if DEBUG_ADS_API { PrintUtils.printLog(logText: "[NATIVE] Could not retrieve current ad (ads module unavailable).") }
148
148
  }
149
149
  }
150
150
  }
@@ -158,7 +158,7 @@ class THEOplayerRCTAdsAPI: NSObject, RCTBridgeModule {
158
158
  let adDescription = THEOplayerRCTSourceDescriptionBuilder.buildSingleAdDescription(adData) {
159
159
  ads.schedule(adDescription: adDescription)
160
160
  } else {
161
- if DEBUG_ADS_API { print("[NATIVE] Could not schedule new ad.") }
161
+ if DEBUG_ADS_API { PrintUtils.printLog(logText: "[NATIVE] Could not schedule new ad.") }
162
162
  }
163
163
  }
164
164
  }
@@ -57,7 +57,7 @@ class THEOplayerRCTAdsEventHandler {
57
57
  #if (GOOGLE_IMA || GOOGLE_DAI) || canImport(THEOplayerGoogleIMAIntegration)
58
58
  // AD_BEGIN
59
59
  self.adBeginListener = player.ads.addEventListener(type: AdsEventTypes.AD_BEGIN) { [weak self] event in
60
- if DEBUG_THEOPLAYER_EVENTS { print("[NATIVE] Received AD_BEGIN event from THEOplayer Ads") }
60
+ if DEBUG_THEOPLAYER_EVENTS { PrintUtils.printLog(logText: "[NATIVE] Received AD_BEGIN event from THEOplayer Ads") }
61
61
  if let forwardedAdEvent = self?.onNativeAdEvent,
62
62
  let ad = event.ad {
63
63
  forwardedAdEvent([
@@ -66,11 +66,11 @@ class THEOplayerRCTAdsEventHandler {
66
66
  ])
67
67
  }
68
68
  }
69
- if DEBUG_EVENTHANDLER { print("[NATIVE] AdBegin listener attached to THEOplayer.ads") }
69
+ if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] AdBegin listener attached to THEOplayer.ads") }
70
70
 
71
71
  // AD_END
72
72
  self.adEndListener = player.ads.addEventListener(type: AdsEventTypes.AD_END) { [weak self] event in
73
- if DEBUG_THEOPLAYER_EVENTS { print("[NATIVE] Received AD_END event from THEOplayer Ads") }
73
+ if DEBUG_THEOPLAYER_EVENTS { PrintUtils.printLog(logText: "[NATIVE] Received AD_END event from THEOplayer Ads") }
74
74
  if let forwardedAdEvent = self?.onNativeAdEvent,
75
75
  let ad = event.ad {
76
76
  forwardedAdEvent([
@@ -79,11 +79,11 @@ class THEOplayerRCTAdsEventHandler {
79
79
  ])
80
80
  }
81
81
  }
82
- if DEBUG_EVENTHANDLER { print("[NATIVE] AdEnd listener attached to THEOplayer.ads") }
82
+ if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] AdEnd listener attached to THEOplayer.ads") }
83
83
 
84
84
  // AD_BREAK_BEGIN
85
85
  self.adBreakBeginListener = player.ads.addEventListener(type: AdsEventTypes.AD_BREAK_BEGIN) { [weak self] event in
86
- if DEBUG_THEOPLAYER_EVENTS { print("[NATIVE] Received AD_BREAK_BEGIN event from THEOplayer Ads") }
86
+ if DEBUG_THEOPLAYER_EVENTS { PrintUtils.printLog(logText: "[NATIVE] Received AD_BREAK_BEGIN event from THEOplayer Ads") }
87
87
  if let forwardedAdEvent = self?.onNativeAdEvent,
88
88
  let adBreak = event.ad {
89
89
  forwardedAdEvent([
@@ -92,11 +92,11 @@ class THEOplayerRCTAdsEventHandler {
92
92
  ])
93
93
  }
94
94
  }
95
- if DEBUG_EVENTHANDLER { print("[NATIVE] AdBreakBegin listener attached to THEOplayer.ads") }
95
+ if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] AdBreakBegin listener attached to THEOplayer.ads") }
96
96
 
97
97
  // AD_BREAK_END
98
98
  self.adBreakEndListener = player.ads.addEventListener(type: AdsEventTypes.AD_BREAK_END) { [weak self] event in
99
- if DEBUG_THEOPLAYER_EVENTS { print("[NATIVE] Received AD_BREAK_END event from THEOplayer Ads") }
99
+ if DEBUG_THEOPLAYER_EVENTS { PrintUtils.printLog(logText: "[NATIVE] Received AD_BREAK_END event from THEOplayer Ads") }
100
100
  if let forwardedAdEvent = self?.onNativeAdEvent,
101
101
  let adBreak = event.ad {
102
102
  forwardedAdEvent([
@@ -105,11 +105,11 @@ class THEOplayerRCTAdsEventHandler {
105
105
  ])
106
106
  }
107
107
  }
108
- if DEBUG_EVENTHANDLER { print("[NATIVE] AdBreakEnd listener attached to THEOplayer.ads") }
108
+ if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] AdBreakEnd listener attached to THEOplayer.ads") }
109
109
 
110
110
  // AD_ERROR
111
111
  self.adErrorListener = player.ads.addEventListener(type: AdsEventTypes.AD_ERROR) { [weak self] event in
112
- if DEBUG_THEOPLAYER_EVENTS { print("[NATIVE] Received AD_ERROR event from THEOplayer Ads") }
112
+ if DEBUG_THEOPLAYER_EVENTS { PrintUtils.printLog(logText: "[NATIVE] Received AD_ERROR event from THEOplayer Ads") }
113
113
  if let forwardedAdEvent = self?.onNativeAdEvent,
114
114
  let ad = event.ad {
115
115
  forwardedAdEvent([
@@ -118,11 +118,11 @@ class THEOplayerRCTAdsEventHandler {
118
118
  ])
119
119
  }
120
120
  }
121
- if DEBUG_EVENTHANDLER { print("[NATIVE] AdError listener attached to THEOplayer.ads") }
121
+ if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] AdError listener attached to THEOplayer.ads") }
122
122
 
123
123
  // AD_FIRST_QUARTILE
124
124
  self.adFirstQuartileListener = player.ads.addEventListener(type: AdsEventTypes.AD_FIRST_QUARTILE) { [weak self] event in
125
- if DEBUG_THEOPLAYER_EVENTS { print("[NATIVE] Received AD_FIRST_QUARTILE event from THEOplayer Ads") }
125
+ if DEBUG_THEOPLAYER_EVENTS { PrintUtils.printLog(logText: "[NATIVE] Received AD_FIRST_QUARTILE event from THEOplayer Ads") }
126
126
  if let forwardedAdEvent = self?.onNativeAdEvent,
127
127
  let ad = event.ad {
128
128
  forwardedAdEvent([
@@ -131,11 +131,11 @@ class THEOplayerRCTAdsEventHandler {
131
131
  ])
132
132
  }
133
133
  }
134
- if DEBUG_EVENTHANDLER { print("[NATIVE] AdFirstQuartile listener attached to THEOplayer.ads") }
134
+ if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] AdFirstQuartile listener attached to THEOplayer.ads") }
135
135
 
136
136
  // AD_MIDPOINT
137
137
  self.adMidpointListener = player.ads.addEventListener(type: AdsEventTypes.AD_MIDPOINT) { [weak self] event in
138
- if DEBUG_THEOPLAYER_EVENTS { print("[NATIVE] Received AD_MIDPOINT event from THEOplayer Ads") }
138
+ if DEBUG_THEOPLAYER_EVENTS { PrintUtils.printLog(logText: "[NATIVE] Received AD_MIDPOINT event from THEOplayer Ads") }
139
139
  if let forwardedAdEvent = self?.onNativeAdEvent,
140
140
  let ad = event.ad {
141
141
  forwardedAdEvent([
@@ -144,11 +144,11 @@ class THEOplayerRCTAdsEventHandler {
144
144
  ])
145
145
  }
146
146
  }
147
- if DEBUG_EVENTHANDLER { print("[NATIVE] AdMidpoint listener attached to THEOplayer.ads") }
147
+ if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] AdMidpoint listener attached to THEOplayer.ads") }
148
148
 
149
149
  // AD_THIRD_QUARTILE
150
150
  self.adThirdQuartileListener = player.ads.addEventListener(type: AdsEventTypes.AD_THIRD_QUARTILE) { [weak self] event in
151
- if DEBUG_THEOPLAYER_EVENTS { print("[NATIVE] Received AD_THIRD_QUARTILE event from THEOplayer Ads") }
151
+ if DEBUG_THEOPLAYER_EVENTS { PrintUtils.printLog(logText: "[NATIVE] Received AD_THIRD_QUARTILE event from THEOplayer Ads") }
152
152
  if let forwardedAdEvent = self?.onNativeAdEvent,
153
153
  let ad = event.ad {
154
154
  forwardedAdEvent([
@@ -157,11 +157,11 @@ class THEOplayerRCTAdsEventHandler {
157
157
  ])
158
158
  }
159
159
  }
160
- if DEBUG_EVENTHANDLER { print("[NATIVE] AdThirdQuartile listener attached to THEOplayer.ads") }
160
+ if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] AdThirdQuartile listener attached to THEOplayer.ads") }
161
161
 
162
162
  // AD_LOADED
163
163
  self.adLoadedListener = player.ads.addEventListener(type: AdsEventTypes.AD_LOADED) { [weak self] event in
164
- if DEBUG_THEOPLAYER_EVENTS { print("[NATIVE] Received AD_LOADED event from THEOplayer Ads") }
164
+ if DEBUG_THEOPLAYER_EVENTS { PrintUtils.printLog(logText: "[NATIVE] Received AD_LOADED event from THEOplayer Ads") }
165
165
  if let forwardedAdEvent = self?.onNativeAdEvent,
166
166
  let ad = event.ad {
167
167
  forwardedAdEvent([
@@ -170,7 +170,7 @@ class THEOplayerRCTAdsEventHandler {
170
170
  ])
171
171
  }
172
172
  }
173
- if DEBUG_EVENTHANDLER { print("[NATIVE] AdThirdQuartile listener attached to THEOplayer.ads") }
173
+ if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] AdThirdQuartile listener attached to THEOplayer.ads") }
174
174
  #endif
175
175
 
176
176
  }
@@ -184,55 +184,55 @@ class THEOplayerRCTAdsEventHandler {
184
184
  // AD_BEGIN
185
185
  if let adBeginListener = self.adBeginListener {
186
186
  player.ads.removeEventListener(type: AdsEventTypes.AD_BEGIN, listener: adBeginListener)
187
- if DEBUG_EVENTHANDLER { print("[NATIVE] AdBegin listener dettached from THEOplayer.ads") }
187
+ if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] AdBegin listener dettached from THEOplayer.ads") }
188
188
  }
189
189
 
190
190
  // AD_END
191
191
  if let adEndListener = self.adEndListener {
192
192
  player.ads.removeEventListener(type: AdsEventTypes.AD_END, listener: adEndListener)
193
- if DEBUG_EVENTHANDLER { print("[NATIVE] AdEnd listener dettached from THEOplayer.ads") }
193
+ if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] AdEnd listener dettached from THEOplayer.ads") }
194
194
  }
195
195
 
196
196
  // AD_BREAK_BEGIN
197
197
  if let adBreakBeginListener = self.adBreakBeginListener {
198
198
  player.ads.removeEventListener(type: AdsEventTypes.AD_BREAK_BEGIN, listener: adBreakBeginListener)
199
- if DEBUG_EVENTHANDLER { print("[NATIVE] AdBreakBegin listener dettached from THEOplayer.ads") }
199
+ if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] AdBreakBegin listener dettached from THEOplayer.ads") }
200
200
  }
201
201
 
202
202
  // AD_BREAK_END
203
203
  if let adBreakEndListener = self.adBreakEndListener {
204
204
  player.ads.removeEventListener(type: AdsEventTypes.AD_BREAK_END, listener: adBreakEndListener)
205
- if DEBUG_EVENTHANDLER { print("[NATIVE] AdBreakEnd listener dettached from THEOplayer.ads") }
205
+ if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] AdBreakEnd listener dettached from THEOplayer.ads") }
206
206
  }
207
207
 
208
208
  // AD_ERROR
209
209
  if let adErrorListener = self.adErrorListener {
210
210
  player.ads.removeEventListener(type: AdsEventTypes.AD_ERROR, listener: adErrorListener)
211
- if DEBUG_EVENTHANDLER { print("[NATIVE] AdError listener dettached from THEOplayer.ads") }
211
+ if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] AdError listener dettached from THEOplayer.ads") }
212
212
  }
213
213
 
214
214
  // AD_FIRST_QUARTILE
215
215
  if let adFirstQuartileListener = self.adFirstQuartileListener {
216
216
  player.ads.removeEventListener(type: AdsEventTypes.AD_FIRST_QUARTILE, listener: adFirstQuartileListener)
217
- if DEBUG_EVENTHANDLER { print("[NATIVE] adFirstQuartileListener listener dettached from THEOplayer.ads") }
217
+ if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] adFirstQuartileListener listener dettached from THEOplayer.ads") }
218
218
  }
219
219
 
220
220
  // AD_MIDPOINT
221
221
  if let adMidpointListener = self.adMidpointListener {
222
222
  player.ads.removeEventListener(type: AdsEventTypes.AD_MIDPOINT, listener: adMidpointListener)
223
- if DEBUG_EVENTHANDLER { print("[NATIVE] adMidpointListener listener dettached from THEOplayer.ads") }
223
+ if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] adMidpointListener listener dettached from THEOplayer.ads") }
224
224
  }
225
225
 
226
226
  // AD_THIRD_QUARTILE
227
227
  if let adThirdQuartileListener = self.adThirdQuartileListener {
228
228
  player.ads.removeEventListener(type: AdsEventTypes.AD_THIRD_QUARTILE, listener: adThirdQuartileListener)
229
- if DEBUG_EVENTHANDLER { print("[NATIVE] adThirdQuartileListener listener dettached from THEOplayer.ads") }
229
+ if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] adThirdQuartileListener listener dettached from THEOplayer.ads") }
230
230
  }
231
231
 
232
232
  // AD_LOADED
233
233
  if let adLoadedListener = self.adLoadedListener {
234
234
  player.ads.removeEventListener(type: AdsEventTypes.AD_LOADED, listener: adLoadedListener)
235
- if DEBUG_EVENTHANDLER { print("[NATIVE] adLoadedListener listener dettached from THEOplayer.ads") }
235
+ if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] adLoadedListener listener dettached from THEOplayer.ads") }
236
236
  }
237
237
  #endif
238
238
 
@@ -25,7 +25,7 @@ extension THEOplayerRCTSourceDescriptionBuilder {
25
25
  adsDescriptions?.append(adDescription)
26
26
  } else {
27
27
  if DEBUG_SOURCE_DESCRIPTION_BUIDER {
28
- print("[NATIVE] Could not create THEOplayer GoogleImaAdDescription from adsData array")
28
+ PrintUtils.printLog(logText: "[NATIVE] Could not create THEOplayer GoogleImaAdDescription from adsData array")
29
29
  }
30
30
  return nil
31
31
  }
@@ -37,7 +37,7 @@ extension THEOplayerRCTSourceDescriptionBuilder {
37
37
  adsDescriptions?.append(adDescription)
38
38
  } else {
39
39
  if DEBUG_SOURCE_DESCRIPTION_BUIDER {
40
- print("[NATIVE] Could not create THEOplayer GoogleImaAdDescription from adsData")
40
+ PrintUtils.printLog(logText: "[NATIVE] Could not create THEOplayer GoogleImaAdDescription from adsData")
41
41
  }
42
42
  return nil
43
43
  }
@@ -67,10 +67,10 @@ extension THEOplayerRCTSourceDescriptionBuilder {
67
67
  if let src = srcString {
68
68
  return GoogleImaAdDescription(src: src, timeOffset: timeOffset)
69
69
  } else {
70
- if DEBUG_SOURCE_DESCRIPTION_BUIDER { print("[NATIVE] AdDescription requires 'src' property in 'ads' description.") }
70
+ if DEBUG_SOURCE_DESCRIPTION_BUIDER { PrintUtils.printLog(logText: "[NATIVE] AdDescription requires 'src' property in 'ads' description.") }
71
71
  }
72
72
  }
73
- if DEBUG_SOURCE_DESCRIPTION_BUIDER { print("[NATIVE] We currently require and only support the 'google-ima' integration in the 'ads' description.") }
73
+ if DEBUG_SOURCE_DESCRIPTION_BUIDER { PrintUtils.printLog(logText: "[NATIVE] We currently require and only support the 'google-ima' integration in the 'ads' description.") }
74
74
  #endif
75
75
 
76
76
  return nil
@@ -110,7 +110,7 @@ extension THEOplayerRCTSourceDescriptionBuilder {
110
110
  }
111
111
  default:
112
112
  if DEBUG_SOURCE_DESCRIPTION_BUIDER {
113
- print("[NATIVE] THEOplayer ssai 'availabilityType' must be 'live' or 'vod'")
113
+ PrintUtils.printLog(logText: "[NATIVE] THEOplayer ssai 'availabilityType' must be 'live' or 'vod'")
114
114
  }
115
115
  return nil
116
116
  }