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.
- package/CHANGELOG.md +24 -1
- package/android/build.gradle +2 -1
- package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/6.10.0/ads-wrapper-6.10.0.aar +0 -0
- 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
- package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/maven-metadata-local.xml +4 -4
- package/android/src/main/java/com/theoplayer/PlayerConfigAdapter.kt +4 -0
- package/android/src/main/java/com/theoplayer/ReactTHEOplayerContext.kt +7 -0
- package/android/src/main/java/com/theoplayer/ads/AdEventAdapter.kt +9 -4
- package/android/src/main/java/com/theoplayer/ads/AdsModule.kt +1 -1
- package/android/src/main/java/com/theoplayer/audio/AudioFocusManager.kt +57 -26
- package/android/src/main/java/com/theoplayer/broadcast/EventBroadcastModule.kt +1 -1
- package/android/src/main/java/com/theoplayer/cache/CacheModule.kt +1 -1
- package/android/src/main/java/com/theoplayer/cast/CastModule.kt +1 -1
- package/android/src/main/java/com/theoplayer/drm/ContentProtectionModule.kt +1 -1
- package/android/src/main/java/com/theoplayer/media/MediaPlaybackService.kt +8 -17
- package/android/src/main/java/com/theoplayer/player/PlayerModule.kt +1 -1
- package/ios/THEOplayerRCTBridge.m +6 -6
- package/ios/THEOplayerRCTPlayerAPI.swift +25 -25
- package/ios/ads/THEOplayerRCTAdsAPI.swift +17 -17
- package/ios/backgroundAudio/THEOplayerRCTNowPlayingManager.swift +4 -0
- package/ios/cache/THEOplayerRCTCacheAPI.swift +29 -29
- package/ios/casting/THEOplayerRCTCastAPI.swift +9 -9
- package/ios/contentprotection/THEOplayerRCTContentProtectionAPI.swift +22 -22
- package/ios/eventBroadcasting/THEOplayerRCTEventBroadcastAPI.swift +5 -5
- package/lib/commonjs/api/config/PlayerConfiguration.js.map +1 -1
- package/lib/commonjs/internal/adapter/THEOplayerAdapter.js +19 -18
- package/lib/commonjs/internal/adapter/THEOplayerAdapter.js.map +1 -1
- package/lib/commonjs/internal/adapter/abr/AbrAdapter.js +2 -1
- package/lib/commonjs/internal/adapter/abr/AbrAdapter.js.map +1 -1
- package/lib/commonjs/internal/adapter/ads/THEOplayerNativeAdsAdapter.js +7 -6
- package/lib/commonjs/internal/adapter/ads/THEOplayerNativeAdsAdapter.js.map +1 -1
- package/lib/commonjs/internal/adapter/ads/THEOplayerNativeGoogleDAI.js +5 -4
- package/lib/commonjs/internal/adapter/ads/THEOplayerNativeGoogleDAI.js.map +1 -1
- package/lib/commonjs/internal/adapter/broadcast/EventBroadcastAdapter.js +2 -1
- package/lib/commonjs/internal/adapter/broadcast/EventBroadcastAdapter.js.map +1 -1
- package/lib/commonjs/internal/adapter/cast/THEOplayerNativeAirplay.js +5 -4
- package/lib/commonjs/internal/adapter/cast/THEOplayerNativeAirplay.js.map +1 -1
- package/lib/commonjs/internal/adapter/cast/THEOplayerNativeChromecast.js +7 -6
- package/lib/commonjs/internal/adapter/cast/THEOplayerNativeChromecast.js.map +1 -1
- package/lib/commonjs/internal/adapter/track/TextTrackStyleAdapter.js +11 -10
- package/lib/commonjs/internal/adapter/track/TextTrackStyleAdapter.js.map +1 -1
- package/lib/commonjs/internal/cache/MediaCache.js +4 -3
- package/lib/commonjs/internal/cache/MediaCache.js.map +1 -1
- package/lib/commonjs/internal/cache/NativeCachingTaskAdapter.js +5 -4
- package/lib/commonjs/internal/cache/NativeCachingTaskAdapter.js.map +1 -1
- package/lib/commonjs/internal/drm/ContentProtectionRegistry.js +23 -22
- package/lib/commonjs/internal/drm/ContentProtectionRegistry.js.map +1 -1
- package/lib/module/api/config/PlayerConfiguration.js.map +1 -1
- package/lib/module/internal/adapter/THEOplayerAdapter.js +19 -18
- package/lib/module/internal/adapter/THEOplayerAdapter.js.map +1 -1
- package/lib/module/internal/adapter/abr/AbrAdapter.js +2 -1
- package/lib/module/internal/adapter/abr/AbrAdapter.js.map +1 -1
- package/lib/module/internal/adapter/ads/THEOplayerNativeAdsAdapter.js +7 -6
- package/lib/module/internal/adapter/ads/THEOplayerNativeAdsAdapter.js.map +1 -1
- package/lib/module/internal/adapter/ads/THEOplayerNativeGoogleDAI.js +5 -4
- package/lib/module/internal/adapter/ads/THEOplayerNativeGoogleDAI.js.map +1 -1
- package/lib/module/internal/adapter/broadcast/EventBroadcastAdapter.js +2 -1
- package/lib/module/internal/adapter/broadcast/EventBroadcastAdapter.js.map +1 -1
- package/lib/module/internal/adapter/cast/THEOplayerNativeAirplay.js +5 -4
- package/lib/module/internal/adapter/cast/THEOplayerNativeAirplay.js.map +1 -1
- package/lib/module/internal/adapter/cast/THEOplayerNativeChromecast.js +7 -6
- package/lib/module/internal/adapter/cast/THEOplayerNativeChromecast.js.map +1 -1
- package/lib/module/internal/adapter/track/TextTrackStyleAdapter.js +11 -10
- package/lib/module/internal/adapter/track/TextTrackStyleAdapter.js.map +1 -1
- package/lib/module/internal/cache/MediaCache.js +4 -3
- package/lib/module/internal/cache/MediaCache.js.map +1 -1
- package/lib/module/internal/cache/NativeCachingTaskAdapter.js +5 -4
- package/lib/module/internal/cache/NativeCachingTaskAdapter.js.map +1 -1
- package/lib/module/internal/drm/ContentProtectionRegistry.js +23 -22
- package/lib/module/internal/drm/ContentProtectionRegistry.js.map +1 -1
- package/lib/typescript/api/config/PlayerConfiguration.d.ts +10 -0
- package/package.json +1 -1
- package/react-native-theoplayer.podspec +11 -6
- package/src/api/config/PlayerConfiguration.ts +11 -0
- package/src/internal/adapter/THEOplayerAdapter.ts +20 -18
- package/src/internal/adapter/abr/AbrAdapter.ts +3 -1
- package/src/internal/adapter/ads/THEOplayerNativeAdsAdapter.ts +8 -6
- package/src/internal/adapter/ads/THEOplayerNativeGoogleDAI.ts +6 -4
- package/src/internal/adapter/broadcast/EventBroadcastAdapter.ts +3 -1
- package/src/internal/adapter/cast/THEOplayerNativeAirplay.ts +6 -4
- package/src/internal/adapter/cast/THEOplayerNativeChromecast.ts +8 -6
- package/src/internal/adapter/track/TextTrackStyleAdapter.ts +11 -10
- package/src/internal/cache/MediaCache.ts +5 -3
- package/src/internal/cache/NativeCachingTaskAdapter.ts +6 -4
- package/src/internal/drm/ContentProtectionRegistry.ts +24 -22
- 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 "
|
|
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 "
|
|
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
|
}
|
|
@@ -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 "
|
|
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 "
|
|
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
|
}
|