react-native-theoplayer 1.8.0 → 1.8.1
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/android/src/main/java/com/theoplayer/ReactTHEOplayerView.kt +1 -0
- package/ios/{THEOplayerRCTViewMainEventHandler.swift → THEOplayerRCTMainEventHandler.swift} +1 -1
- package/ios/{THEOplayerRCTViewMediaTrackEventHandler.swift → THEOplayerRCTMediaTrackEventHandler.swift} +2 -2
- package/ios/THEOplayerRCTSourceDescriptionBuilder.swift +19 -114
- package/ios/{THEOplayerRCTViewTextTrackEventHandler.swift → THEOplayerRCTTextTrackEventHandler.swift} +2 -2
- package/ios/THEOplayerRCTView.swift +33 -133
- package/ios/{THEOplayerRCTAdAggregator.swift → ads/THEOplayerRCTAdAggregator.swift} +1 -1
- package/ios/ads/THEOplayerRCTAdsAPI+DAI.swift +108 -0
- package/ios/{THEOplayerRCTAdsAPI.swift → ads/THEOplayerRCTAdsAPI.swift} +6 -96
- package/ios/{THEOplayerRCTViewAdEventHandler.swift → ads/THEOplayerRCTAdsEventHandler.swift} +3 -3
- package/ios/ads/THEOplayerRCTSourceDescriptionBuilder+Ads.swift +130 -0
- package/ios/ads/THEOplayerRCTView+Ads.swift +15 -0
- package/ios/ads/THEOplayerRCTView+AdsConfig.swift +82 -0
- package/ios/casting/THEOplayerRCTCastAPI+Airplay.swift +97 -0
- package/ios/casting/THEOplayerRCTCastAPI+Chromecast.swift +132 -0
- package/ios/casting/THEOplayerRCTCastAPI.swift +53 -0
- package/ios/{THEOplayerRCTViewCastEventHandler.swift → casting/THEOplayerRCTCastEventHandler.swift} +1 -1
- package/ios/casting/THEOplayerRCTView+CastConfig.swift +47 -0
- package/ios/casting/THEOplayerRCTView+Casting.swift +17 -0
- package/ios/{THEOplayerRCTContentProtectionAPI.swift → contentprotection/THEOplayerRCTContentProtectionAPI.swift} +0 -0
- package/ios/{THEOplayerRCTContentProtectionAggregator.swift → contentprotection/THEOplayerRCTContentProtectionAggregator.swift} +0 -0
- package/ios/{THEOplayerRCTProxyContentProtectionIntegration.swift → contentprotection/THEOplayerRCTProxyContentProtectionIntegration.swift} +0 -0
- package/ios/{THEOplayerRCTProxyContentProtectionIntegrationFactory.swift → contentprotection/THEOplayerRCTProxyContentProtectionIntegrationFactory.swift} +0 -0
- package/ios/custom/react-native-theoplayer_custom.podspec +6 -6
- package/package.json +1 -1
- package/react-native-theoplayer.podspec +1 -1
- package/ios/THEOplayerRCTCastAPI.swift +0 -275
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
//
|
|
2
|
+
// THEOplayerRCTAdsAPI.swift
|
|
3
|
+
// Theoplayer
|
|
4
|
+
//
|
|
5
|
+
// Created by William van Haevre on 09/09/2022.
|
|
6
|
+
// Copyright © 2022 Facebook. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
import Foundation
|
|
10
|
+
|
|
11
|
+
let ERROR_CODE_CAST_ACCESS_FAILURE = "cast_access_failure"
|
|
12
|
+
let ERROR_MESSAGE_CASTING_UNSUPPORTED_FEATURE = "Chromecast and Airplay are not supported by the provided SDK"
|
|
13
|
+
let ERROR_MESSAGE_CAST_ACCESS_FAILURE = "Could not access THEOplayer Cast Module"
|
|
14
|
+
|
|
15
|
+
@objc(THEOplayerRCTCastAPI)
|
|
16
|
+
class THEOplayerRCTCastAPI: NSObject, RCTBridgeModule {
|
|
17
|
+
@objc var bridge: RCTBridge!
|
|
18
|
+
|
|
19
|
+
static func moduleName() -> String! {
|
|
20
|
+
return "CastModule"
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
static func requiresMainQueueSetup() -> Bool {
|
|
24
|
+
return false
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// MARK: CHROMECAST AND AIRPLAY
|
|
28
|
+
#if os(iOS)
|
|
29
|
+
|
|
30
|
+
@objc(casting:resolver:rejecter:)
|
|
31
|
+
func casting(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
32
|
+
DispatchQueue.main.async {
|
|
33
|
+
let theView = self.bridge.uiManager.view(forReactTag: node) as! THEOplayerRCTView
|
|
34
|
+
if let cast = theView.cast() {
|
|
35
|
+
resolve(cast.casting)
|
|
36
|
+
} else {
|
|
37
|
+
reject(ERROR_CODE_CAST_ACCESS_FAILURE, ERROR_MESSAGE_CAST_ACCESS_FAILURE, nil)
|
|
38
|
+
if DEBUG_CAST_API { print("[NATIVE] Could not retrieve current casting status (cast module unavailable).") }
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
#else
|
|
44
|
+
|
|
45
|
+
@objc(casting:resolver:rejecter:)
|
|
46
|
+
func casting(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
47
|
+
if DEBUG_CAST_API { print(ERROR_MESSAGE_CASTING_UNSUPPORTED_FEATURE) }
|
|
48
|
+
resolve(false)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
#endif
|
|
52
|
+
|
|
53
|
+
}
|
package/ios/{THEOplayerRCTViewCastEventHandler.swift → casting/THEOplayerRCTCastEventHandler.swift}
RENAMED
|
@@ -13,7 +13,7 @@ let EVENT_TYPE_CHROMECAST_STATE_CHANGE: String = "chromecaststatechange"
|
|
|
13
13
|
let EVENT_TYPE_CHROMECAST_ERROR: String = "chromecasterror"
|
|
14
14
|
let EVENT_TYPE_AIRPLAY_STATE_CHANGE: String = "airplaystatechange"
|
|
15
15
|
|
|
16
|
-
class
|
|
16
|
+
class THEOplayerRCTCastEventHandler {
|
|
17
17
|
// MARK: Members
|
|
18
18
|
private weak var player: THEOplayer?
|
|
19
19
|
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// THEOplayerRCTView+CastConfig.swift
|
|
2
|
+
|
|
3
|
+
import Foundation
|
|
4
|
+
import THEOplayerSDK
|
|
5
|
+
|
|
6
|
+
struct CastConfig {
|
|
7
|
+
var castStrategyString: String = "manual"
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
extension THEOplayerRCTView {
|
|
11
|
+
|
|
12
|
+
func parseCastConfig(configDict: NSDictionary) {
|
|
13
|
+
if let castConfig = configDict["cast"] as? NSDictionary {
|
|
14
|
+
if let castStrategy = castConfig["strategy"] as? String {
|
|
15
|
+
self.castConfig.castStrategyString = castStrategy
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
#if os(iOS)
|
|
21
|
+
func playerCastConfiguration() -> CastConfiguration? {
|
|
22
|
+
return CastConfiguration(strategy: self.castStrategy())
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
func isCasting() -> Bool {
|
|
26
|
+
if let cast = self.cast() {
|
|
27
|
+
return cast.casting
|
|
28
|
+
}
|
|
29
|
+
return false
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
private func castStrategy() -> THEOplayerSDK.CastStrategy {
|
|
33
|
+
switch self.castConfig.castStrategyString {
|
|
34
|
+
case "auto":
|
|
35
|
+
return THEOplayerSDK.CastStrategy.auto
|
|
36
|
+
case "manual":
|
|
37
|
+
return THEOplayerSDK.CastStrategy.manual
|
|
38
|
+
case "disabled":
|
|
39
|
+
return THEOplayerSDK.CastStrategy.disabled
|
|
40
|
+
default :
|
|
41
|
+
return THEOplayerSDK.CastStrategy.manual
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
#else
|
|
45
|
+
func isCasting() -> Bool { return false }
|
|
46
|
+
#endif
|
|
47
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// THEOplayerRCTView+Casting.swift
|
|
2
|
+
|
|
3
|
+
import Foundation
|
|
4
|
+
import THEOplayerSDK
|
|
5
|
+
|
|
6
|
+
extension THEOplayerRCTView {
|
|
7
|
+
|
|
8
|
+
#if os(iOS)
|
|
9
|
+
func cast() -> Cast? {
|
|
10
|
+
guard let player = self.player else {
|
|
11
|
+
return nil
|
|
12
|
+
}
|
|
13
|
+
return player.cast
|
|
14
|
+
}
|
|
15
|
+
#endif
|
|
16
|
+
|
|
17
|
+
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -17,7 +17,7 @@ Pod::Spec.new do |s|
|
|
|
17
17
|
s.platforms = { :ios => "12.0", :tvos => "12.0" }
|
|
18
18
|
s.source = { :git => "https://www.theoplayer.com/.git", :tag => "#{s.version}" }
|
|
19
19
|
|
|
20
|
-
s.source_files =
|
|
20
|
+
s.source_files = 'ios/*.{h,m,swift}', 'ios/ads/*.swift', 'ios/casting/*.swift', 'ios/contentprotection/*.swift'
|
|
21
21
|
s.resources = ['ios/*.css']
|
|
22
22
|
|
|
23
23
|
s.dependency "React-Core"
|
|
@@ -33,14 +33,14 @@ Pod::Spec.new do |s|
|
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
### Set custom player SDK
|
|
36
|
-
s.ios.vendored_frameworks =
|
|
37
|
-
s.tvos.vendored_frameworks =
|
|
36
|
+
s.ios.vendored_frameworks = 'ios/custom/Frameworks/ios/THEOplayerSDK.xcframework'
|
|
37
|
+
s.tvos.vendored_frameworks = 'ios/custom/Frameworks/tvos/THEOplayerSDK.xcframework'
|
|
38
38
|
|
|
39
39
|
### Set Ads dependencies
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
s.ios.dependency "GoogleAds-IMA-iOS-SDK", "3.14.1"
|
|
41
|
+
s.tvos.dependency "GoogleAds-IMA-tvOS-SDK", "4.4.1"
|
|
42
42
|
|
|
43
43
|
### Set ChromeCast dependency (iOS only)
|
|
44
|
-
|
|
44
|
+
s.ios.dependency "google-cast-sdk-dynamic-xcframework-no-bluetooth"
|
|
45
45
|
|
|
46
46
|
end
|
package/package.json
CHANGED
|
@@ -13,7 +13,7 @@ Pod::Spec.new do |s|
|
|
|
13
13
|
s.platforms = { :ios => "11.0", :tvos => "12.0" }
|
|
14
14
|
s.source = { :git => "https://www.theoplayer.com/.git", :tag => "#{s.version}" }
|
|
15
15
|
|
|
16
|
-
s.source_files =
|
|
16
|
+
s.source_files = 'ios/*.{h,m,swift}', 'ios/ads/*.swift', 'ios/casting/*.swift', 'ios/contentprotection/*.swift'
|
|
17
17
|
s.resources = ['ios/*.css']
|
|
18
18
|
|
|
19
19
|
s.dependency "React-Core"
|
|
@@ -1,275 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// THEOplayerRCTAdsAPI.swift
|
|
3
|
-
// Theoplayer
|
|
4
|
-
//
|
|
5
|
-
// Created by William van Haevre on 09/09/2022.
|
|
6
|
-
// Copyright © 2022 Facebook. All rights reserved.
|
|
7
|
-
//
|
|
8
|
-
|
|
9
|
-
import Foundation
|
|
10
|
-
import UIKit
|
|
11
|
-
|
|
12
|
-
let ERROR_CODE_CAST_ACCESS_FAILURE = "cast_access_failure"
|
|
13
|
-
let ERROR_CODE_CHROMECAST_ACCESS_FAILURE = "chromecast_access_failure"
|
|
14
|
-
let ERROR_CODE_AIRPLAY_ACCESS_FAILURE = "airplay_access_failure"
|
|
15
|
-
|
|
16
|
-
let ERROR_MESSAGE_CASTING_UNSUPPORTED_FEATURE = "Chromecast and Airplay are not supported by the provided iOS SDK"
|
|
17
|
-
let ERROR_MESSAGE_CHROMECAST_UNSUPPORTED_FEATURE = "Chromecast is not supported by the provided iOS SDK"
|
|
18
|
-
let ERROR_MESSAGE_AIRPLAY_UNSUPPORTED_FEATURE = "Airplay is not supported by the provided iOS SDK"
|
|
19
|
-
let ERROR_MESSAGE_CAST_ACCESS_FAILURE = "Could not access THEOplayer Cast Module"
|
|
20
|
-
let ERROR_MESSAGE_CHROMECAST_ACCESS_FAILURE = "Could not access THEOplayer Chromecast API"
|
|
21
|
-
let ERROR_MESSAGE_AIRPLAY_ACCESS_FAILURE = "Could not access THEOplayer Airplay API"
|
|
22
|
-
|
|
23
|
-
@objc(THEOplayerRCTCastAPI)
|
|
24
|
-
class THEOplayerRCTCastAPI: NSObject, RCTBridgeModule {
|
|
25
|
-
@objc var bridge: RCTBridge!
|
|
26
|
-
|
|
27
|
-
static func moduleName() -> String! {
|
|
28
|
-
return "CastModule"
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
static func requiresMainQueueSetup() -> Bool {
|
|
32
|
-
return false
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
// MARK: CHROMECAST AND AIRPLAY
|
|
36
|
-
|
|
37
|
-
#if os(iOS)
|
|
38
|
-
|
|
39
|
-
@objc(casting:resolver:rejecter:)
|
|
40
|
-
func casting(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
41
|
-
DispatchQueue.main.async {
|
|
42
|
-
let theView = self.bridge.uiManager.view(forReactTag: node) as! THEOplayerRCTView
|
|
43
|
-
if let cast = theView.cast() {
|
|
44
|
-
resolve(cast.casting)
|
|
45
|
-
} else {
|
|
46
|
-
reject(ERROR_CODE_CAST_ACCESS_FAILURE, ERROR_MESSAGE_CAST_ACCESS_FAILURE, nil)
|
|
47
|
-
if DEBUG_CAST_API { print("[NATIVE] Could not retrieve current casting status (cast module unavailable).") }
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
#else
|
|
53
|
-
|
|
54
|
-
@objc(casting:resolver:rejecter:)
|
|
55
|
-
func casting(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
56
|
-
if DEBUG_CAST_API { print(ERROR_MESSAGE_CASTING_UNSUPPORTED_FEATURE) }
|
|
57
|
-
resolve(false)
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
#endif
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
// MARK: CHROMECAST SPECIFIC
|
|
65
|
-
|
|
66
|
-
#if os(iOS) && CHROMECAST
|
|
67
|
-
@objc(chromecastCasting:resolver:rejecter:)
|
|
68
|
-
func chromecastCasting(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
69
|
-
DispatchQueue.main.async {
|
|
70
|
-
let theView = self.bridge.uiManager.view(forReactTag: node) as! THEOplayerRCTView
|
|
71
|
-
if let cast = theView.cast(),
|
|
72
|
-
let chromecast = cast.chromecast {
|
|
73
|
-
resolve(chromecast.casting)
|
|
74
|
-
} else {
|
|
75
|
-
reject(ERROR_CODE_CHROMECAST_ACCESS_FAILURE, ERROR_MESSAGE_CHROMECAST_ACCESS_FAILURE, nil)
|
|
76
|
-
if DEBUG_CAST_API { print("[NATIVE] Could not retrieve current chromecast casting status.") }
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
@objc(chromecastState:resolver:rejecter:)
|
|
82
|
-
func chromecastState(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
83
|
-
DispatchQueue.main.async {
|
|
84
|
-
let theView = self.bridge.uiManager.view(forReactTag: node) as! THEOplayerRCTView
|
|
85
|
-
if let cast = theView.cast(),
|
|
86
|
-
let chromecast = cast.chromecast {
|
|
87
|
-
resolve(chromecast.state?._rawValue)
|
|
88
|
-
} else {
|
|
89
|
-
reject(ERROR_CODE_CHROMECAST_ACCESS_FAILURE, ERROR_MESSAGE_CHROMECAST_ACCESS_FAILURE, nil)
|
|
90
|
-
if DEBUG_CAST_API { print("[NATIVE] Could not retrieve current chromecast state.") }
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
@objc(chromecastStart:)
|
|
96
|
-
func chromecastStart(_ node: NSNumber) -> Void {
|
|
97
|
-
DispatchQueue.main.async {
|
|
98
|
-
let theView = self.bridge.uiManager.view(forReactTag: node) as! THEOplayerRCTView
|
|
99
|
-
if let cast = theView.cast(),
|
|
100
|
-
let chromecast = cast.chromecast {
|
|
101
|
-
if DEBUG_CAST_API { print("[NATIVE] Starting chromecast session.") }
|
|
102
|
-
chromecast.start()
|
|
103
|
-
} else {
|
|
104
|
-
if DEBUG_CAST_API { print("[NATIVE] Could not start chromecast session.") }
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
@objc(chromecastStop:)
|
|
110
|
-
func chromecastStop(_ node: NSNumber) -> Void {
|
|
111
|
-
DispatchQueue.main.async {
|
|
112
|
-
let theView = self.bridge.uiManager.view(forReactTag: node) as! THEOplayerRCTView
|
|
113
|
-
if let cast = theView.cast(),
|
|
114
|
-
let chromecast = cast.chromecast {
|
|
115
|
-
if DEBUG_CAST_API { print("[NATIVE] Stopping chromecast session.") }
|
|
116
|
-
chromecast.stop()
|
|
117
|
-
} else {
|
|
118
|
-
if DEBUG_CAST_API { print("[NATIVE] Could not stop chromecast session.") }
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
@objc(chromecastJoin:)
|
|
124
|
-
func chromecastJoin(_ node: NSNumber) -> Void {
|
|
125
|
-
DispatchQueue.main.async {
|
|
126
|
-
let theView = self.bridge.uiManager.view(forReactTag: node) as! THEOplayerRCTView
|
|
127
|
-
if let cast = theView.cast(),
|
|
128
|
-
let chromecast = cast.chromecast {
|
|
129
|
-
if DEBUG_CAST_API { print("[NATIVE] Joining chromecast session.") }
|
|
130
|
-
chromecast.join()
|
|
131
|
-
} else {
|
|
132
|
-
if DEBUG_CAST_API { print("[NATIVE] Could not join chromecast session.") }
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
@objc(chromecastLeave:)
|
|
138
|
-
func chromecastLeave(_ node: NSNumber) -> Void {
|
|
139
|
-
DispatchQueue.main.async {
|
|
140
|
-
let theView = self.bridge.uiManager.view(forReactTag: node) as! THEOplayerRCTView
|
|
141
|
-
if let cast = theView.cast(),
|
|
142
|
-
let chromecast = cast.chromecast {
|
|
143
|
-
if DEBUG_CAST_API { print("[NATIVE] Leaving chromecast session.") }
|
|
144
|
-
chromecast.leave()
|
|
145
|
-
} else {
|
|
146
|
-
if DEBUG_CAST_API { print("[NATIVE] Could not leave chromecast session.") }
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
#else
|
|
152
|
-
|
|
153
|
-
@objc(chromecastCasting:resolver:rejecter:)
|
|
154
|
-
func chromecastCasting(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
155
|
-
if DEBUG_CAST_API { print(ERROR_MESSAGE_CHROMECAST_UNSUPPORTED_FEATURE) }
|
|
156
|
-
resolve(false)
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
@objc(chromecastState:resolver:rejecter:)
|
|
160
|
-
func chromecastState(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
161
|
-
if DEBUG_CAST_API { print(ERROR_MESSAGE_CHROMECAST_UNSUPPORTED_FEATURE) }
|
|
162
|
-
resolve("unavailable")
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
@objc(chromecastStart:)
|
|
166
|
-
func chromecastStart(_ node: NSNumber) -> Void {
|
|
167
|
-
if DEBUG_CAST_API { print(ERROR_MESSAGE_CHROMECAST_UNSUPPORTED_FEATURE) }
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
@objc(chromecastStop:)
|
|
171
|
-
func chromecastStop(_ node: NSNumber) -> Void {
|
|
172
|
-
if DEBUG_CAST_API { print(ERROR_MESSAGE_CHROMECAST_UNSUPPORTED_FEATURE) }
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
@objc(chromecastJoin:)
|
|
176
|
-
func chromecastJoin(_ node: NSNumber) -> Void {
|
|
177
|
-
if DEBUG_CAST_API { print(ERROR_MESSAGE_CHROMECAST_UNSUPPORTED_FEATURE) }
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
@objc(chromecastLeave:)
|
|
181
|
-
func chromecastLeave(_ node: NSNumber) -> Void {
|
|
182
|
-
if DEBUG_CAST_API { print(ERROR_MESSAGE_CHROMECAST_UNSUPPORTED_FEATURE) }
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
#endif
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
// MARK: AIRPLAY SPECIFIC
|
|
190
|
-
|
|
191
|
-
#if os(iOS)
|
|
192
|
-
|
|
193
|
-
@objc(airplayCasting:resolver:rejecter:)
|
|
194
|
-
func airplayCasting(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
195
|
-
DispatchQueue.main.async {
|
|
196
|
-
let theView = self.bridge.uiManager.view(forReactTag: node) as! THEOplayerRCTView
|
|
197
|
-
if let cast = theView.cast(),
|
|
198
|
-
let airplay = cast.airPlay {
|
|
199
|
-
resolve(airplay.casting)
|
|
200
|
-
} else {
|
|
201
|
-
reject(ERROR_CODE_AIRPLAY_ACCESS_FAILURE, ERROR_MESSAGE_AIRPLAY_ACCESS_FAILURE, nil)
|
|
202
|
-
if DEBUG_CAST_API { print("[NATIVE] Could not retrieve current airplay casting status.") }
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
@objc(airplayState:resolver:rejecter:)
|
|
208
|
-
func airplayState(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
209
|
-
DispatchQueue.main.async {
|
|
210
|
-
let theView = self.bridge.uiManager.view(forReactTag: node) as! THEOplayerRCTView
|
|
211
|
-
if let cast = theView.cast(),
|
|
212
|
-
let airplay = cast.airPlay {
|
|
213
|
-
resolve(airplay.state._rawValue)
|
|
214
|
-
} else {
|
|
215
|
-
reject(ERROR_CODE_AIRPLAY_ACCESS_FAILURE, ERROR_MESSAGE_AIRPLAY_ACCESS_FAILURE, nil)
|
|
216
|
-
if DEBUG_CAST_API { print("[NATIVE] Could not retrieve current airplay state.") }
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
@objc(airplayStart:)
|
|
222
|
-
func airplayStart(_ node: NSNumber) -> Void {
|
|
223
|
-
DispatchQueue.main.async {
|
|
224
|
-
let theView = self.bridge.uiManager.view(forReactTag: node) as! THEOplayerRCTView
|
|
225
|
-
if let cast = theView.cast(),
|
|
226
|
-
let airplay = cast.airPlay {
|
|
227
|
-
if DEBUG_CAST_API { print("[NATIVE] Starting airplay session.") }
|
|
228
|
-
airplay.start()
|
|
229
|
-
} else {
|
|
230
|
-
if DEBUG_CAST_API { print("[NATIVE] Could not start airplay session.") }
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
@objc(airplayStop:)
|
|
236
|
-
func airplayStop(_ node: NSNumber) -> Void {
|
|
237
|
-
DispatchQueue.main.async {
|
|
238
|
-
let theView = self.bridge.uiManager.view(forReactTag: node) as! THEOplayerRCTView
|
|
239
|
-
if let cast = theView.cast(),
|
|
240
|
-
let airplay = cast.airPlay {
|
|
241
|
-
if DEBUG_CAST_API { print("[NATIVE] Stopping airplay session.") }
|
|
242
|
-
airplay.stop()
|
|
243
|
-
} else {
|
|
244
|
-
if DEBUG_CAST_API { print("[NATIVE] Could not stop airplay session.") }
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
#else
|
|
250
|
-
|
|
251
|
-
@objc(airplayCasting:resolver:rejecter:)
|
|
252
|
-
func airplayCasting(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
253
|
-
if DEBUG_CAST_API { print(ERROR_MESSAGE_AIRPLAY_UNSUPPORTED_FEATURE) }
|
|
254
|
-
resolve(false)
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
@objc(airplayState:resolver:rejecter:)
|
|
258
|
-
func airplayState(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
259
|
-
if DEBUG_CAST_API { print(ERROR_MESSAGE_AIRPLAY_UNSUPPORTED_FEATURE) }
|
|
260
|
-
resolve("unavailable")
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
@objc(airplayStart:)
|
|
264
|
-
func airplayStart(_ node: NSNumber) -> Void {
|
|
265
|
-
if DEBUG_CAST_API { print(ERROR_MESSAGE_AIRPLAY_UNSUPPORTED_FEATURE) }
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
@objc(airplayStop:)
|
|
269
|
-
func airplayStop(_ node: NSNumber) -> Void {
|
|
270
|
-
if DEBUG_CAST_API { print(ERROR_MESSAGE_AIRPLAY_UNSUPPORTED_FEATURE) }
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
#endif
|
|
274
|
-
|
|
275
|
-
}
|