@bluebillywig/react-native-bb-player 8.47.1 → 8.47.2
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/build.gradle +0 -10
- package/ios/BBCastButtonView.swift +1 -1
- package/ios/BBCastButtonViewManager.swift +2 -2
- package/ios/BBCastMiniControlsView.swift +1 -1
- package/ios/BBCastMiniControlsViewManager.swift +2 -2
- package/ios/BBPlayerExtensions.swift +1 -1
- package/ios/BBPlayerModule.swift +68 -154
- package/ios/BBPlayerView.swift +13 -9
- package/ios/BBPlayerViewManager.swift +33 -72
- package/ios/BBShortsView.swift +3 -2
- package/ios/BBShortsViewManager.swift +10 -8
- package/lib/commonjs/index.js +0 -4
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/index.js +0 -8
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/index.d.ts +0 -4
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/react-native-bb-player.podspec +3 -2
- package/src/index.ts +0 -8
package/android/build.gradle
CHANGED
|
@@ -78,16 +78,6 @@ repositories {
|
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
-
// Propagate vendored repo to consumer app so transitive deps resolve
|
|
82
|
-
rootProject.allprojects { proj ->
|
|
83
|
-
proj.repositories {
|
|
84
|
-
def vendoredRepo = file("${project.projectDir}/repo")
|
|
85
|
-
if (vendoredRepo.exists()) {
|
|
86
|
-
maven { url vendoredRepo.toURI() }
|
|
87
|
-
}
|
|
88
|
-
maven { url "https://maven.bluebillywig.com/releases" }
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
81
|
|
|
92
82
|
dependencies {
|
|
93
83
|
// React Native
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import React
|
|
1
|
+
@preconcurrency import React
|
|
2
2
|
|
|
3
3
|
@objc(BBCastButtonViewManager)
|
|
4
|
-
class BBCastButtonViewManager: RCTViewManager {
|
|
4
|
+
class BBCastButtonViewManager: RCTViewManager, @unchecked Sendable {
|
|
5
5
|
override func view() -> UIView! {
|
|
6
6
|
return BBCastButtonView()
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import React
|
|
1
|
+
@preconcurrency import React
|
|
2
2
|
|
|
3
3
|
@objc(BBCastMiniControlsViewManager)
|
|
4
|
-
class BBCastMiniControlsViewManager: RCTViewManager {
|
|
4
|
+
class BBCastMiniControlsViewManager: RCTViewManager, @unchecked Sendable {
|
|
5
5
|
override func view() -> UIView! {
|
|
6
6
|
return BBCastMiniControlsView()
|
|
7
7
|
}
|
package/ios/BBPlayerModule.swift
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import Foundation
|
|
2
|
-
import React
|
|
3
|
-
import BBNativePlayerKit
|
|
2
|
+
@preconcurrency import React
|
|
3
|
+
@preconcurrency import BBNativePlayerKit
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Global registry for BBPlayerView instances.
|
|
7
|
-
*
|
|
8
|
-
* with
|
|
7
|
+
* Needed because bridge.uiManager.view(forReactTag:) doesn't work
|
|
8
|
+
* with Fabric. Views register themselves when added to the window.
|
|
9
9
|
*/
|
|
10
|
-
class BBPlayerViewRegistry: NSObject {
|
|
10
|
+
final class BBPlayerViewRegistry: NSObject, @unchecked Sendable {
|
|
11
11
|
static let shared = BBPlayerViewRegistry()
|
|
12
12
|
|
|
13
13
|
private var views: [Int: BBPlayerView] = [:]
|
|
@@ -41,10 +41,10 @@ class BBPlayerViewRegistry: NSObject {
|
|
|
41
41
|
/**
|
|
42
42
|
* Native Module for BBPlayer commands.
|
|
43
43
|
* Extends RCTEventEmitter to support module-level events (modal player).
|
|
44
|
-
*
|
|
44
|
+
* Looks up BBPlayerView instances by React tag and dispatches commands.
|
|
45
45
|
*/
|
|
46
46
|
@objc(BBPlayerModule)
|
|
47
|
-
class BBPlayerModule: RCTEventEmitter {
|
|
47
|
+
class BBPlayerModule: RCTEventEmitter, @unchecked Sendable {
|
|
48
48
|
|
|
49
49
|
private var modalPlayerView: BBNativePlayerView?
|
|
50
50
|
private var modalDelegate: ModalPlayerDelegate?
|
|
@@ -79,150 +79,113 @@ class BBPlayerModule: RCTEventEmitter {
|
|
|
79
79
|
hasListeners = false
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
-
// MARK: -
|
|
82
|
+
// MARK: - Helpers
|
|
83
83
|
|
|
84
84
|
private func getView(_ reactTag: NSNumber) -> BBPlayerView? {
|
|
85
|
-
// First try the view registry (works with both old and new architecture)
|
|
86
85
|
if let view = BBPlayerViewRegistry.shared.getView(tag: reactTag.intValue) {
|
|
87
86
|
return view
|
|
88
87
|
}
|
|
89
|
-
|
|
90
|
-
// Fallback to bridge.uiManager for old architecture
|
|
91
88
|
if let bridge = self.bridge {
|
|
92
89
|
if let view = bridge.uiManager.view(forReactTag: reactTag) as? BBPlayerView {
|
|
93
90
|
return view
|
|
94
91
|
}
|
|
95
92
|
}
|
|
96
|
-
|
|
97
93
|
NSLog("BBPlayerModule: Could not find view with tag %@", reactTag)
|
|
98
94
|
return nil
|
|
99
95
|
}
|
|
100
96
|
|
|
97
|
+
/// Dispatch to main queue and enter @MainActor context.
|
|
98
|
+
private func onMainActor(_ work: @MainActor @Sendable @escaping () -> Void) {
|
|
99
|
+
DispatchQueue.main.async {
|
|
100
|
+
MainActor.assumeIsolated(work)
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
101
104
|
// MARK: - Commands
|
|
102
105
|
|
|
103
106
|
@objc func play(_ viewTag: NSNumber) {
|
|
104
|
-
|
|
105
|
-
self.getView(viewTag)?.play()
|
|
106
|
-
}
|
|
107
|
+
onMainActor { self.getView(viewTag)?.play() }
|
|
107
108
|
}
|
|
108
109
|
|
|
109
110
|
@objc func pause(_ viewTag: NSNumber) {
|
|
110
|
-
|
|
111
|
-
self.getView(viewTag)?.pause()
|
|
112
|
-
}
|
|
111
|
+
onMainActor { self.getView(viewTag)?.pause() }
|
|
113
112
|
}
|
|
114
113
|
|
|
115
114
|
@objc func seek(_ viewTag: NSNumber, position: NSNumber) {
|
|
116
|
-
|
|
117
|
-
self.getView(viewTag)?.seek(position.intValue)
|
|
118
|
-
}
|
|
115
|
+
onMainActor { self.getView(viewTag)?.seek(position.intValue) }
|
|
119
116
|
}
|
|
120
117
|
|
|
121
118
|
@objc func seekRelative(_ viewTag: NSNumber, offsetSeconds: NSNumber) {
|
|
122
|
-
|
|
123
|
-
self.getView(viewTag)?.seekRelative(offsetSeconds.doubleValue)
|
|
124
|
-
}
|
|
119
|
+
onMainActor { self.getView(viewTag)?.seekRelative(offsetSeconds.doubleValue) }
|
|
125
120
|
}
|
|
126
121
|
|
|
127
122
|
@objc func setMuted(_ viewTag: NSNumber, muted: Bool) {
|
|
128
|
-
|
|
129
|
-
self.getView(viewTag)?.setMuted(muted)
|
|
130
|
-
}
|
|
123
|
+
onMainActor { self.getView(viewTag)?.setMuted(muted) }
|
|
131
124
|
}
|
|
132
125
|
|
|
133
126
|
@objc func setVolume(_ viewTag: NSNumber, volume: NSNumber) {
|
|
134
|
-
|
|
135
|
-
self.getView(viewTag)?.setVolume(volume.doubleValue)
|
|
136
|
-
}
|
|
127
|
+
onMainActor { self.getView(viewTag)?.setVolume(volume.doubleValue) }
|
|
137
128
|
}
|
|
138
129
|
|
|
139
130
|
@objc func enterFullscreen(_ viewTag: NSNumber) {
|
|
140
|
-
|
|
141
|
-
self.getView(viewTag)?.enterFullscreen()
|
|
142
|
-
}
|
|
131
|
+
onMainActor { self.getView(viewTag)?.enterFullscreen() }
|
|
143
132
|
}
|
|
144
133
|
|
|
145
134
|
@objc func enterFullscreenLandscape(_ viewTag: NSNumber) {
|
|
146
|
-
|
|
147
|
-
self.getView(viewTag)?.enterFullscreenLandscape()
|
|
148
|
-
}
|
|
135
|
+
onMainActor { self.getView(viewTag)?.enterFullscreenLandscape() }
|
|
149
136
|
}
|
|
150
137
|
|
|
151
138
|
@objc func exitFullscreen(_ viewTag: NSNumber) {
|
|
152
|
-
|
|
153
|
-
self.getView(viewTag)?.exitFullscreen()
|
|
154
|
-
}
|
|
139
|
+
onMainActor { self.getView(viewTag)?.exitFullscreen() }
|
|
155
140
|
}
|
|
156
141
|
|
|
157
142
|
@objc func collapse(_ viewTag: NSNumber) {
|
|
158
|
-
|
|
159
|
-
self.getView(viewTag)?.collapse()
|
|
160
|
-
}
|
|
143
|
+
onMainActor { self.getView(viewTag)?.collapse() }
|
|
161
144
|
}
|
|
162
145
|
|
|
163
146
|
@objc func expand(_ viewTag: NSNumber) {
|
|
164
|
-
|
|
165
|
-
self.getView(viewTag)?.expand()
|
|
166
|
-
}
|
|
147
|
+
onMainActor { self.getView(viewTag)?.expand() }
|
|
167
148
|
}
|
|
168
149
|
|
|
169
150
|
@objc func autoPlayNextCancel(_ viewTag: NSNumber) {
|
|
170
|
-
|
|
171
|
-
self.getView(viewTag)?.autoPlayNextCancel()
|
|
172
|
-
}
|
|
151
|
+
onMainActor { self.getView(viewTag)?.autoPlayNextCancel() }
|
|
173
152
|
}
|
|
174
153
|
|
|
175
154
|
@objc func destroy(_ viewTag: NSNumber) {
|
|
176
|
-
|
|
177
|
-
self.getView(viewTag)?.destroy()
|
|
178
|
-
}
|
|
155
|
+
onMainActor { self.getView(viewTag)?.destroy() }
|
|
179
156
|
}
|
|
180
157
|
|
|
181
158
|
@objc func showCastPicker(_ viewTag: NSNumber) {
|
|
182
|
-
|
|
183
|
-
self.getView(viewTag)?.showCastPicker()
|
|
184
|
-
}
|
|
159
|
+
onMainActor { self.getView(viewTag)?.showCastPicker() }
|
|
185
160
|
}
|
|
186
161
|
|
|
187
162
|
@objc func loadWithClipId(_ viewTag: NSNumber, clipId: String?, initiator: String?, autoPlay: Bool, seekTo: NSNumber?, contextJson: String?) {
|
|
188
|
-
|
|
189
|
-
self.getView(viewTag)?.loadWithClipId(clipId ?? "", initiator: initiator, autoPlay: autoPlay, seekTo: seekTo?.doubleValue, contextJson: contextJson)
|
|
190
|
-
}
|
|
163
|
+
onMainActor { self.getView(viewTag)?.loadWithClipId(clipId ?? "", initiator: initiator, autoPlay: autoPlay, seekTo: seekTo?.doubleValue, contextJson: contextJson) }
|
|
191
164
|
}
|
|
192
165
|
|
|
193
166
|
@objc func loadWithClipListId(_ viewTag: NSNumber, clipListId: String?, initiator: String?, autoPlay: Bool, seekTo: NSNumber?, contextJson: String?) {
|
|
194
|
-
|
|
195
|
-
self.getView(viewTag)?.loadWithClipListId(clipListId ?? "", initiator: initiator, autoPlay: autoPlay, seekTo: seekTo?.doubleValue, contextJson: contextJson)
|
|
196
|
-
}
|
|
167
|
+
onMainActor { self.getView(viewTag)?.loadWithClipListId(clipListId ?? "", initiator: initiator, autoPlay: autoPlay, seekTo: seekTo?.doubleValue, contextJson: contextJson) }
|
|
197
168
|
}
|
|
198
169
|
|
|
199
170
|
@objc func loadWithProjectId(_ viewTag: NSNumber, projectId: String?, initiator: String?, autoPlay: Bool, seekTo: NSNumber?, contextJson: String?) {
|
|
200
|
-
|
|
201
|
-
self.getView(viewTag)?.loadWithProjectId(projectId ?? "", initiator: initiator, autoPlay: autoPlay, seekTo: seekTo?.doubleValue, contextJson: contextJson)
|
|
202
|
-
}
|
|
171
|
+
onMainActor { self.getView(viewTag)?.loadWithProjectId(projectId ?? "", initiator: initiator, autoPlay: autoPlay, seekTo: seekTo?.doubleValue, contextJson: contextJson) }
|
|
203
172
|
}
|
|
204
173
|
|
|
205
174
|
@objc func loadWithClipJson(_ viewTag: NSNumber, clipJson: String?, initiator: String?, autoPlay: Bool, seekTo: NSNumber?, contextJson: String?) {
|
|
206
|
-
|
|
207
|
-
self.getView(viewTag)?.loadWithClipJson(clipJson ?? "", initiator: initiator, autoPlay: autoPlay, seekTo: seekTo?.doubleValue, contextJson: contextJson)
|
|
208
|
-
}
|
|
175
|
+
onMainActor { self.getView(viewTag)?.loadWithClipJson(clipJson ?? "", initiator: initiator, autoPlay: autoPlay, seekTo: seekTo?.doubleValue, contextJson: contextJson) }
|
|
209
176
|
}
|
|
210
177
|
|
|
211
178
|
@objc func loadWithClipListJson(_ viewTag: NSNumber, clipListJson: String?, initiator: String?, autoPlay: Bool, seekTo: NSNumber?, contextJson: String?) {
|
|
212
|
-
|
|
213
|
-
self.getView(viewTag)?.loadWithClipListJson(clipListJson ?? "", initiator: initiator, autoPlay: autoPlay, seekTo: seekTo?.doubleValue, contextJson: contextJson)
|
|
214
|
-
}
|
|
179
|
+
onMainActor { self.getView(viewTag)?.loadWithClipListJson(clipListJson ?? "", initiator: initiator, autoPlay: autoPlay, seekTo: seekTo?.doubleValue, contextJson: contextJson) }
|
|
215
180
|
}
|
|
216
181
|
|
|
217
182
|
@objc func loadWithProjectJson(_ viewTag: NSNumber, projectJson: String?, initiator: String?, autoPlay: Bool, seekTo: NSNumber?, contextJson: String?) {
|
|
218
|
-
|
|
219
|
-
self.getView(viewTag)?.loadWithProjectJson(projectJson ?? "", initiator: initiator, autoPlay: autoPlay, seekTo: seekTo?.doubleValue, contextJson: contextJson)
|
|
220
|
-
}
|
|
183
|
+
onMainActor { self.getView(viewTag)?.loadWithProjectJson(projectJson ?? "", initiator: initiator, autoPlay: autoPlay, seekTo: seekTo?.doubleValue, contextJson: contextJson) }
|
|
221
184
|
}
|
|
222
185
|
|
|
223
186
|
@objc func loadWithJsonUrl(_ viewTag: NSNumber, jsonUrl: String?, autoPlay: Bool, contextJson: String?) {
|
|
224
187
|
NSLog("BBPlayerModule.loadWithJsonUrl called - viewTag: %@, jsonUrl: %@, autoPlay: %d, context: %@", viewTag, jsonUrl ?? "nil", autoPlay, contextJson ?? "nil")
|
|
225
|
-
|
|
188
|
+
onMainActor {
|
|
226
189
|
let view = self.getView(viewTag)
|
|
227
190
|
NSLog("BBPlayerModule.loadWithJsonUrl - view found: %@", view != nil ? "YES" : "NO")
|
|
228
191
|
if let view = view, let url = jsonUrl {
|
|
@@ -235,7 +198,7 @@ class BBPlayerModule: RCTEventEmitter {
|
|
|
235
198
|
}
|
|
236
199
|
|
|
237
200
|
@objc func loadWithContentIdAndType(_ viewTag: NSNumber, contentId: String?, contentType: String?, autoPlay: Bool, contextJson: String?) {
|
|
238
|
-
|
|
201
|
+
onMainActor {
|
|
239
202
|
let view = self.getView(viewTag)
|
|
240
203
|
guard let view = view, let id = contentId, let type = contentType else {
|
|
241
204
|
NSLog("BBPlayerModule.loadWithContentIdAndType - FAILED: view=%@, id=%@, type=%@",
|
|
@@ -247,101 +210,77 @@ class BBPlayerModule: RCTEventEmitter {
|
|
|
247
210
|
}
|
|
248
211
|
|
|
249
212
|
// MARK: - Getter methods with Promise support
|
|
213
|
+
// Note: nonisolated(unsafe) on resolver because RCTPromiseResolveBlock is a
|
|
214
|
+
// non-Sendable ObjC block, but RN guarantees safe cross-thread usage.
|
|
250
215
|
|
|
251
216
|
@objc func getDuration(_ viewTag: NSNumber, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
resolver(duration)
|
|
255
|
-
}
|
|
217
|
+
nonisolated(unsafe) let resolve = resolver
|
|
218
|
+
onMainActor { resolve(self.getView(viewTag)?.duration()) }
|
|
256
219
|
}
|
|
257
220
|
|
|
258
221
|
@objc func getMuted(_ viewTag: NSNumber, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
resolver(muted)
|
|
262
|
-
}
|
|
222
|
+
nonisolated(unsafe) let resolve = resolver
|
|
223
|
+
onMainActor { resolve(self.getView(viewTag)?.muted()) }
|
|
263
224
|
}
|
|
264
225
|
|
|
265
226
|
@objc func getVolume(_ viewTag: NSNumber, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
resolver(volume)
|
|
269
|
-
}
|
|
227
|
+
nonisolated(unsafe) let resolve = resolver
|
|
228
|
+
onMainActor { resolve(self.getView(viewTag)?.volume()) }
|
|
270
229
|
}
|
|
271
230
|
|
|
272
231
|
@objc func getPhase(_ viewTag: NSNumber, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
resolver(phase)
|
|
276
|
-
}
|
|
232
|
+
nonisolated(unsafe) let resolve = resolver
|
|
233
|
+
onMainActor { resolve(self.getView(viewTag)?.phase()) }
|
|
277
234
|
}
|
|
278
235
|
|
|
279
236
|
@objc func getState(_ viewTag: NSNumber, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
resolver(state)
|
|
283
|
-
}
|
|
237
|
+
nonisolated(unsafe) let resolve = resolver
|
|
238
|
+
onMainActor { resolve(self.getView(viewTag)?.state()) }
|
|
284
239
|
}
|
|
285
240
|
|
|
286
241
|
@objc func getMode(_ viewTag: NSNumber, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
resolver(mode)
|
|
290
|
-
}
|
|
242
|
+
nonisolated(unsafe) let resolve = resolver
|
|
243
|
+
onMainActor { resolve(self.getView(viewTag)?.mode()) }
|
|
291
244
|
}
|
|
292
245
|
|
|
293
246
|
@objc func getClipData(_ viewTag: NSNumber, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
resolver(clipData)
|
|
297
|
-
}
|
|
247
|
+
nonisolated(unsafe) let resolve = resolver
|
|
248
|
+
onMainActor { resolve(self.getView(viewTag)?.clipData()) }
|
|
298
249
|
}
|
|
299
250
|
|
|
300
251
|
@objc func getProjectData(_ viewTag: NSNumber, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
resolver(projectData)
|
|
304
|
-
}
|
|
252
|
+
nonisolated(unsafe) let resolve = resolver
|
|
253
|
+
onMainActor { resolve(self.getView(viewTag)?.projectData()) }
|
|
305
254
|
}
|
|
306
255
|
|
|
307
256
|
@objc func getPlayoutData(_ viewTag: NSNumber, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
resolver(playoutData)
|
|
311
|
-
}
|
|
257
|
+
nonisolated(unsafe) let resolve = resolver
|
|
258
|
+
onMainActor { resolve(self.getView(viewTag)?.playoutData()) }
|
|
312
259
|
}
|
|
313
260
|
|
|
314
261
|
@objc func setInView(_ viewTag: NSNumber, inView: Bool) {
|
|
315
|
-
|
|
316
|
-
self.getView(viewTag)?.setInView(inView)
|
|
317
|
-
}
|
|
262
|
+
onMainActor { self.getView(viewTag)?.setInView(inView) }
|
|
318
263
|
}
|
|
319
264
|
|
|
320
265
|
@objc func getInView(_ viewTag: NSNumber, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
resolver(inView)
|
|
324
|
-
}
|
|
266
|
+
nonisolated(unsafe) let resolve = resolver
|
|
267
|
+
onMainActor { resolve(self.getView(viewTag)?.inView()) }
|
|
325
268
|
}
|
|
326
269
|
|
|
327
270
|
@objc func getAdMediaWidth(_ viewTag: NSNumber, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
resolver(width)
|
|
331
|
-
}
|
|
271
|
+
nonisolated(unsafe) let resolve = resolver
|
|
272
|
+
onMainActor { resolve(self.getView(viewTag)?.adMediaWidth()) }
|
|
332
273
|
}
|
|
333
274
|
|
|
334
275
|
@objc func getAdMediaHeight(_ viewTag: NSNumber, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
resolver(height)
|
|
338
|
-
}
|
|
276
|
+
nonisolated(unsafe) let resolve = resolver
|
|
277
|
+
onMainActor { resolve(self.getView(viewTag)?.adMediaHeight()) }
|
|
339
278
|
}
|
|
340
279
|
|
|
341
280
|
// MARK: - Modal Player API
|
|
342
281
|
|
|
343
282
|
@objc func presentModalPlayer(_ jsonUrl: String, optionsJson: String?, contextJson: String?) {
|
|
344
|
-
|
|
283
|
+
onMainActor {
|
|
345
284
|
// RCTPresentedViewController() can return nil with RCTReactNativeFactory (RN 0.83+).
|
|
346
285
|
// Fallback to UIScene-based lookup to find the root view controller.
|
|
347
286
|
guard let rootVC = RCTPresentedViewController()
|
|
@@ -371,14 +310,9 @@ class BBPlayerModule: RCTEventEmitter {
|
|
|
371
310
|
}
|
|
372
311
|
loadOptions["showBackArrow"] = options?["showBackArrow"] as? Bool ?? false
|
|
373
312
|
|
|
374
|
-
// When context has a cliplist (contextCollectionId), load clip by ID
|
|
375
|
-
// with cliplist context. ProgramController will swap to loading the
|
|
376
|
-
// cliplist and find the clip by ID (matching web standardplayer pattern).
|
|
377
|
-
// Deferred until apiReady to avoid racing with initial jsonUrl load.
|
|
378
313
|
let collectionId = context?["contextCollectionId"] as? String
|
|
379
314
|
let clipId = context?["contextEntityId"] as? String
|
|
380
315
|
|
|
381
|
-
// Create and present modal player using SDK factory method
|
|
382
316
|
let playerView = BBNativePlayer.createModalPlayerView(uiViewContoller: rootVC, jsonUrl: jsonUrl, options: loadOptions)
|
|
383
317
|
|
|
384
318
|
if let collectionId = collectionId, let clipId = clipId {
|
|
@@ -391,38 +325,16 @@ class BBPlayerModule: RCTEventEmitter {
|
|
|
391
325
|
}
|
|
392
326
|
}
|
|
393
327
|
|
|
394
|
-
// Set up delegate for event forwarding
|
|
395
328
|
let delegate = ModalPlayerDelegate(module: self)
|
|
396
329
|
playerView.delegate = delegate
|
|
397
330
|
|
|
398
331
|
self.modalPlayerView = playerView
|
|
399
332
|
self.modalDelegate = delegate
|
|
400
|
-
|
|
401
|
-
}
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
private func extractIdFromUrl(_ url: String, pattern: String) -> String? {
|
|
405
|
-
do {
|
|
406
|
-
let regex = try NSRegularExpression(pattern: pattern, options: [])
|
|
407
|
-
let range = NSRange(url.startIndex..., in: url)
|
|
408
|
-
if let match = regex.firstMatch(in: url, options: [], range: range) {
|
|
409
|
-
for i in 1..<match.numberOfRanges {
|
|
410
|
-
if let groupRange = Range(match.range(at: i), in: url) {
|
|
411
|
-
let extracted = String(url[groupRange])
|
|
412
|
-
if !extracted.isEmpty {
|
|
413
|
-
return extracted
|
|
414
|
-
}
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
|
-
} catch {
|
|
419
|
-
NSLog("BBPlayerModule: Regex error: %@", error.localizedDescription)
|
|
420
333
|
}
|
|
421
|
-
return nil
|
|
422
334
|
}
|
|
423
335
|
|
|
424
336
|
@objc func dismissModalPlayer() {
|
|
425
|
-
|
|
337
|
+
onMainActor {
|
|
426
338
|
self.modalPlayerView?.player.closeModalPlayer()
|
|
427
339
|
self.modalPlayerView = nil
|
|
428
340
|
self.modalDelegate = nil
|
|
@@ -446,7 +358,9 @@ class BBPlayerModule: RCTEventEmitter {
|
|
|
446
358
|
|
|
447
359
|
// MARK: - Modal Player Delegate
|
|
448
360
|
|
|
361
|
+
@MainActor
|
|
449
362
|
private class ModalPlayerDelegate: NSObject, BBNativePlayerViewDelegate {
|
|
363
|
+
// Module ref is @unchecked Sendable, safe to access from @MainActor
|
|
450
364
|
weak var module: BBPlayerModule?
|
|
451
365
|
|
|
452
366
|
init(module: BBPlayerModule) {
|
package/ios/BBPlayerView.swift
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import BBNativePlayerKit
|
|
1
|
+
@preconcurrency import BBNativePlayerKit
|
|
2
|
+
@preconcurrency import React
|
|
2
3
|
import WebKit
|
|
3
|
-
import bbnativeshared
|
|
4
|
+
@preconcurrency import bbnativeshared
|
|
4
5
|
import os
|
|
5
|
-
import GoogleCast
|
|
6
|
+
@preconcurrency import GoogleCast
|
|
6
7
|
|
|
7
8
|
// MARK: - Logging Helper
|
|
8
9
|
private enum LogLevel {
|
|
@@ -49,6 +50,8 @@ class BBPlayerView: UIView, BBNativePlayerViewDelegate {
|
|
|
49
50
|
private var independentCastButton: GCKUICastButton?
|
|
50
51
|
// Store parent view controller reference for SDK
|
|
51
52
|
private weak var parentViewController: UIViewController?
|
|
53
|
+
// Cached tag for deinit (nonisolated(unsafe) because deinit is nonisolated in Swift 6)
|
|
54
|
+
nonisolated(unsafe) private var _cachedTag: Int?
|
|
52
55
|
|
|
53
56
|
// MARK: - Props (set from React Native)
|
|
54
57
|
|
|
@@ -130,7 +133,9 @@ class BBPlayerView: UIView, BBNativePlayerViewDelegate {
|
|
|
130
133
|
|
|
131
134
|
// Register with view registry for command dispatch (supports New Architecture)
|
|
132
135
|
if let tag = self.reactTag {
|
|
133
|
-
|
|
136
|
+
let tagInt = tag.intValue
|
|
137
|
+
_cachedTag = tagInt
|
|
138
|
+
BBPlayerViewRegistry.shared.register(self, tag: tagInt)
|
|
134
139
|
}
|
|
135
140
|
|
|
136
141
|
// Find the parent view controller from the responder chain
|
|
@@ -163,12 +168,11 @@ class BBPlayerView: UIView, BBNativePlayerViewDelegate {
|
|
|
163
168
|
}
|
|
164
169
|
|
|
165
170
|
deinit {
|
|
166
|
-
// Unregister from view registry
|
|
167
|
-
|
|
168
|
-
|
|
171
|
+
// Unregister from view registry using cached tag
|
|
172
|
+
// (deinit is nonisolated in Swift 6, can't access @MainActor properties)
|
|
173
|
+
if let tag = _cachedTag {
|
|
174
|
+
BBPlayerViewRegistry.shared.unregister(tag: tag)
|
|
169
175
|
}
|
|
170
|
-
independentCastButton?.removeFromSuperview()
|
|
171
|
-
independentCastButton = nil
|
|
172
176
|
}
|
|
173
177
|
|
|
174
178
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import Foundation
|
|
2
|
-
import React
|
|
2
|
+
@preconcurrency import React
|
|
3
3
|
|
|
4
4
|
@objc(BBPlayerViewManager)
|
|
5
|
-
class BBPlayerViewManager: RCTViewManager {
|
|
5
|
+
class BBPlayerViewManager: RCTViewManager, @unchecked Sendable {
|
|
6
6
|
|
|
7
7
|
override func view() -> UIView! {
|
|
8
8
|
return BBPlayerView()
|
|
@@ -12,154 +12,115 @@ class BBPlayerViewManager: RCTViewManager {
|
|
|
12
12
|
return true
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
// Override moduleName to expose as "BBPlayerView" instead of default "BBPlayer"
|
|
16
|
-
// This is required for Fabric interop to find the component correctly
|
|
17
15
|
@objc override static func moduleName() -> String! {
|
|
18
16
|
return "BBPlayerView"
|
|
19
17
|
}
|
|
20
18
|
|
|
21
|
-
// MARK: -
|
|
19
|
+
// MARK: - Helpers
|
|
22
20
|
|
|
23
21
|
private func getView(_ reactTag: NSNumber) -> BBPlayerView? {
|
|
24
22
|
return self.bridge.uiManager.view(forReactTag: reactTag) as? BBPlayerView
|
|
25
23
|
}
|
|
26
24
|
|
|
25
|
+
/// Dispatch to main queue and enter @MainActor context for calling UIView methods.
|
|
26
|
+
private func onMainActor(_ work: @MainActor @Sendable @escaping () -> Void) {
|
|
27
|
+
DispatchQueue.main.async {
|
|
28
|
+
MainActor.assumeIsolated(work)
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
27
32
|
// MARK: - Commands
|
|
28
33
|
|
|
29
34
|
@objc func play(_ reactTag: NSNumber) {
|
|
30
|
-
|
|
31
|
-
self.getView(reactTag)?.play()
|
|
32
|
-
}
|
|
35
|
+
onMainActor { self.getView(reactTag)?.play() }
|
|
33
36
|
}
|
|
34
37
|
|
|
35
38
|
@objc func pause(_ reactTag: NSNumber) {
|
|
36
|
-
|
|
37
|
-
self.getView(reactTag)?.pause()
|
|
38
|
-
}
|
|
39
|
+
onMainActor { self.getView(reactTag)?.pause() }
|
|
39
40
|
}
|
|
40
41
|
|
|
41
42
|
@objc func seek(_ reactTag: NSNumber, offsetInSeconds: NSNumber) {
|
|
42
|
-
|
|
43
|
-
self.getView(reactTag)?.seek(offsetInSeconds.intValue)
|
|
44
|
-
}
|
|
43
|
+
onMainActor { self.getView(reactTag)?.seek(offsetInSeconds.intValue) }
|
|
45
44
|
}
|
|
46
45
|
|
|
47
46
|
@objc func seekRelative(_ reactTag: NSNumber, offsetInSeconds: NSNumber) {
|
|
48
|
-
|
|
49
|
-
self.getView(reactTag)?.seekRelative(offsetInSeconds.doubleValue)
|
|
50
|
-
}
|
|
47
|
+
onMainActor { self.getView(reactTag)?.seekRelative(offsetInSeconds.doubleValue) }
|
|
51
48
|
}
|
|
52
49
|
|
|
53
50
|
@objc func setMuted(_ reactTag: NSNumber, muted: Bool) {
|
|
54
|
-
|
|
55
|
-
self.getView(reactTag)?.setMuted(muted)
|
|
56
|
-
}
|
|
51
|
+
onMainActor { self.getView(reactTag)?.setMuted(muted) }
|
|
57
52
|
}
|
|
58
53
|
|
|
59
54
|
@objc func setVolume(_ reactTag: NSNumber, volume: NSNumber) {
|
|
60
|
-
|
|
61
|
-
self.getView(reactTag)?.setVolume(volume.doubleValue)
|
|
62
|
-
}
|
|
55
|
+
onMainActor { self.getView(reactTag)?.setVolume(volume.doubleValue) }
|
|
63
56
|
}
|
|
64
57
|
|
|
65
58
|
@objc func presentModal(_ reactTag: NSNumber) {
|
|
66
|
-
|
|
67
|
-
self.getView(reactTag)?.presentModal()
|
|
68
|
-
}
|
|
59
|
+
onMainActor { self.getView(reactTag)?.presentModal() }
|
|
69
60
|
}
|
|
70
61
|
|
|
71
62
|
@objc func closeModal(_ reactTag: NSNumber) {
|
|
72
|
-
|
|
73
|
-
self.getView(reactTag)?.closeModal()
|
|
74
|
-
}
|
|
63
|
+
onMainActor { self.getView(reactTag)?.closeModal() }
|
|
75
64
|
}
|
|
76
65
|
|
|
77
66
|
@objc func enterFullscreen(_ reactTag: NSNumber) {
|
|
78
|
-
|
|
79
|
-
self.getView(reactTag)?.enterFullscreen()
|
|
80
|
-
}
|
|
67
|
+
onMainActor { self.getView(reactTag)?.enterFullscreen() }
|
|
81
68
|
}
|
|
82
69
|
|
|
83
70
|
@objc func enterFullscreenLandscape(_ reactTag: NSNumber) {
|
|
84
|
-
|
|
85
|
-
self.getView(reactTag)?.enterFullscreenLandscape()
|
|
86
|
-
}
|
|
71
|
+
onMainActor { self.getView(reactTag)?.enterFullscreenLandscape() }
|
|
87
72
|
}
|
|
88
73
|
|
|
89
74
|
@objc func exitFullscreen(_ reactTag: NSNumber) {
|
|
90
|
-
|
|
91
|
-
self.getView(reactTag)?.exitFullscreen()
|
|
92
|
-
}
|
|
75
|
+
onMainActor { self.getView(reactTag)?.exitFullscreen() }
|
|
93
76
|
}
|
|
94
77
|
|
|
95
78
|
@objc func collapse(_ reactTag: NSNumber) {
|
|
96
|
-
|
|
97
|
-
self.getView(reactTag)?.collapse()
|
|
98
|
-
}
|
|
79
|
+
onMainActor { self.getView(reactTag)?.collapse() }
|
|
99
80
|
}
|
|
100
81
|
|
|
101
82
|
@objc func expand(_ reactTag: NSNumber) {
|
|
102
|
-
|
|
103
|
-
self.getView(reactTag)?.expand()
|
|
104
|
-
}
|
|
83
|
+
onMainActor { self.getView(reactTag)?.expand() }
|
|
105
84
|
}
|
|
106
85
|
|
|
107
86
|
@objc func autoPlayNextCancel(_ reactTag: NSNumber) {
|
|
108
|
-
|
|
109
|
-
self.getView(reactTag)?.autoPlayNextCancel()
|
|
110
|
-
}
|
|
87
|
+
onMainActor { self.getView(reactTag)?.autoPlayNextCancel() }
|
|
111
88
|
}
|
|
112
89
|
|
|
113
90
|
@objc func destroy(_ reactTag: NSNumber) {
|
|
114
|
-
|
|
115
|
-
self.getView(reactTag)?.destroy()
|
|
116
|
-
}
|
|
91
|
+
onMainActor { self.getView(reactTag)?.destroy() }
|
|
117
92
|
}
|
|
118
93
|
|
|
119
94
|
@objc func showCastPicker(_ reactTag: NSNumber) {
|
|
120
|
-
|
|
121
|
-
self.getView(reactTag)?.showCastPicker()
|
|
122
|
-
}
|
|
95
|
+
onMainActor { self.getView(reactTag)?.showCastPicker() }
|
|
123
96
|
}
|
|
124
97
|
|
|
125
98
|
@objc func loadWithClipId(_ reactTag: NSNumber, clipId: String?, initiator: String?, autoPlay: Bool, seekTo: NSNumber?) {
|
|
126
|
-
|
|
127
|
-
self.getView(reactTag)?.loadWithClipId(clipId ?? "", initiator: initiator, autoPlay: autoPlay, seekTo: seekTo?.doubleValue)
|
|
128
|
-
}
|
|
99
|
+
onMainActor { self.getView(reactTag)?.loadWithClipId(clipId ?? "", initiator: initiator, autoPlay: autoPlay, seekTo: seekTo?.doubleValue) }
|
|
129
100
|
}
|
|
130
101
|
|
|
131
102
|
@objc func loadWithClipListId(_ reactTag: NSNumber, clipListId: String?, initiator: String?, autoPlay: Bool, seekTo: NSNumber?) {
|
|
132
|
-
|
|
133
|
-
self.getView(reactTag)?.loadWithClipListId(clipListId ?? "", initiator: initiator, autoPlay: autoPlay, seekTo: seekTo?.doubleValue)
|
|
134
|
-
}
|
|
103
|
+
onMainActor { self.getView(reactTag)?.loadWithClipListId(clipListId ?? "", initiator: initiator, autoPlay: autoPlay, seekTo: seekTo?.doubleValue) }
|
|
135
104
|
}
|
|
136
105
|
|
|
137
106
|
@objc func loadWithProjectId(_ reactTag: NSNumber, projectId: String?, initiator: String?, autoPlay: Bool, seekTo: NSNumber?) {
|
|
138
|
-
|
|
139
|
-
self.getView(reactTag)?.loadWithProjectId(projectId ?? "", initiator: initiator, autoPlay: autoPlay, seekTo: seekTo?.doubleValue)
|
|
140
|
-
}
|
|
107
|
+
onMainActor { self.getView(reactTag)?.loadWithProjectId(projectId ?? "", initiator: initiator, autoPlay: autoPlay, seekTo: seekTo?.doubleValue) }
|
|
141
108
|
}
|
|
142
109
|
|
|
143
110
|
@objc func loadWithClipJson(_ reactTag: NSNumber, clipJson: String?, initiator: String?, autoPlay: Bool, seekTo: NSNumber?) {
|
|
144
|
-
|
|
145
|
-
self.getView(reactTag)?.loadWithClipJson(clipJson ?? "", initiator: initiator, autoPlay: autoPlay, seekTo: seekTo?.doubleValue)
|
|
146
|
-
}
|
|
111
|
+
onMainActor { self.getView(reactTag)?.loadWithClipJson(clipJson ?? "", initiator: initiator, autoPlay: autoPlay, seekTo: seekTo?.doubleValue) }
|
|
147
112
|
}
|
|
148
113
|
|
|
149
114
|
@objc func loadWithClipListJson(_ reactTag: NSNumber, clipListJson: String?, initiator: String?, autoPlay: Bool, seekTo: NSNumber?) {
|
|
150
|
-
|
|
151
|
-
self.getView(reactTag)?.loadWithClipListJson(clipListJson ?? "", initiator: initiator, autoPlay: autoPlay, seekTo: seekTo?.doubleValue)
|
|
152
|
-
}
|
|
115
|
+
onMainActor { self.getView(reactTag)?.loadWithClipListJson(clipListJson ?? "", initiator: initiator, autoPlay: autoPlay, seekTo: seekTo?.doubleValue) }
|
|
153
116
|
}
|
|
154
117
|
|
|
155
118
|
@objc func loadWithProjectJson(_ reactTag: NSNumber, projectJson: String?, initiator: String?, autoPlay: Bool, seekTo: NSNumber?) {
|
|
156
|
-
|
|
157
|
-
self.getView(reactTag)?.loadWithProjectJson(projectJson ?? "", initiator: initiator, autoPlay: autoPlay, seekTo: seekTo?.doubleValue)
|
|
158
|
-
}
|
|
119
|
+
onMainActor { self.getView(reactTag)?.loadWithProjectJson(projectJson ?? "", initiator: initiator, autoPlay: autoPlay, seekTo: seekTo?.doubleValue) }
|
|
159
120
|
}
|
|
160
121
|
|
|
161
122
|
@objc func loadWithJsonUrl(_ reactTag: NSNumber, jsonUrl: String?, autoPlay: Bool) {
|
|
162
|
-
|
|
123
|
+
onMainActor {
|
|
163
124
|
if let url = jsonUrl {
|
|
164
125
|
self.getView(reactTag)?.loadWithJsonUrl(url, autoPlay: autoPlay)
|
|
165
126
|
}
|
package/ios/BBShortsView.swift
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import Foundation
|
|
2
|
-
import React
|
|
2
|
+
@preconcurrency import React
|
|
3
3
|
|
|
4
4
|
@objc(BBShortsViewManager)
|
|
5
|
-
class BBShortsViewManager: RCTViewManager {
|
|
5
|
+
class BBShortsViewManager: RCTViewManager, @unchecked Sendable {
|
|
6
6
|
|
|
7
7
|
override func view() -> UIView! {
|
|
8
8
|
return BBShortsView()
|
|
@@ -12,23 +12,25 @@ class BBShortsViewManager: RCTViewManager {
|
|
|
12
12
|
return true
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
// Override moduleName to expose as "BBShortsView" instead of default "BBShorts"
|
|
16
|
-
// This is required for Fabric interop to find the component correctly
|
|
17
15
|
@objc override static func moduleName() -> String! {
|
|
18
16
|
return "BBShortsView"
|
|
19
17
|
}
|
|
20
18
|
|
|
21
|
-
// MARK: -
|
|
19
|
+
// MARK: - Helpers
|
|
22
20
|
|
|
23
21
|
private func getView(_ reactTag: NSNumber) -> BBShortsView? {
|
|
24
22
|
return self.bridge.uiManager.view(forReactTag: reactTag) as? BBShortsView
|
|
25
23
|
}
|
|
26
24
|
|
|
25
|
+
private func onMainActor(_ work: @MainActor @Sendable @escaping () -> Void) {
|
|
26
|
+
DispatchQueue.main.async {
|
|
27
|
+
MainActor.assumeIsolated(work)
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
27
31
|
// MARK: - Commands
|
|
28
32
|
|
|
29
33
|
@objc func destroy(_ reactTag: NSNumber) {
|
|
30
|
-
|
|
31
|
-
self.getView(reactTag)?.destroy()
|
|
32
|
-
}
|
|
34
|
+
onMainActor { self.getView(reactTag)?.destroy() }
|
|
33
35
|
}
|
|
34
36
|
}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -61,10 +61,6 @@ Object.defineProperty(exports, "ExpoBBPlayerView", {
|
|
|
61
61
|
return _BBPlayerView.default;
|
|
62
62
|
}
|
|
63
63
|
});
|
|
64
|
-
require("./specs/BBPlayerViewNativeComponent");
|
|
65
|
-
require("./specs/BBShortsViewNativeComponent");
|
|
66
|
-
require("./specs/BBCastButtonViewNativeComponent");
|
|
67
|
-
require("./specs/BBCastMiniControlsViewNativeComponent");
|
|
68
64
|
var _BBPlayerView = _interopRequireDefault(require("./BBPlayerView"));
|
|
69
65
|
var _BBShortsView = _interopRequireWildcard(require("./BBShortsView"));
|
|
70
66
|
Object.keys(_BBShortsView).forEach(function (key) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["_BBPlayerView","_interopRequireDefault","require","_BBShortsView","_interopRequireWildcard","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_BBOutstreamView","_BBCastButton","_BBCastMiniControls","_BBModalPlayer","_BBPlayer","_types","_utils","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","set","getOwnPropertyDescriptor"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -1,13 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
// Fabric codegen component registrations (side-effect imports for New Architecture).
|
|
4
|
-
// These trigger NativeComponentRegistry.register on Fabric, falling back to
|
|
5
|
-
// requireNativeComponent's lazy resolution on old architecture.
|
|
6
|
-
import "./specs/BBPlayerViewNativeComponent";
|
|
7
|
-
import "./specs/BBShortsViewNativeComponent";
|
|
8
|
-
import "./specs/BBCastButtonViewNativeComponent";
|
|
9
|
-
import "./specs/BBCastMiniControlsViewNativeComponent";
|
|
10
|
-
|
|
11
3
|
// Main exports
|
|
12
4
|
export { default as BBPlayerView } from "./BBPlayerView";
|
|
13
5
|
export { default as BBShortsView } from "./BBShortsView";
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["default","BBPlayerView","BBShortsView","BBOutstreamPlayerView","BBCastButton","BBCastMiniControls","BBModalPlayer","BBOutstreamView","ExpoBBPlayerView"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA;AACA
|
|
1
|
+
{"version":3,"names":["default","BBPlayerView","BBShortsView","BBOutstreamPlayerView","BBCastButton","BBCastMiniControls","BBModalPlayer","BBOutstreamView","ExpoBBPlayerView"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA;AACA,SAASA,OAAO,IAAIC,YAAY,QAAQ,gBAAgB;AACxD,SAASD,OAAO,IAAIE,YAAY,QAAQ,gBAAgB;AACxD,SAASF,OAAO,IAAIG,qBAAqB,QAAQ,mBAAmB;AACpE,SAASH,OAAO,IAAII,YAAY,QAAQ,gBAAgB;AACxD,SAASJ,OAAO,IAAIK,kBAAkB,QAAQ,sBAAsB;AACpE,SAASC,aAAa,QAAQ,iBAAiB;AAE/C,cAAc,kBAAkB;AAChC,cAAc,gBAAgB,CAAC,CAAC;AAChC,cAAc,mBAAmB,CAAC,CAAC;AACnC,cAAc,gBAAgB,CAAC,CAAC;AAChC,cAAc,sBAAsB,CAAC,CAAC;AACtC,cAAc,SAAS;AACvB,cAAc,SAAS;;AAEvB;AACA;AACA,SAASN,OAAO,IAAIO,eAAe,QAAQ,mBAAmB;AAC9D;AACA,SAASP,OAAO,IAAIQ,gBAAgB,QAAQ,gBAAgB","ignoreList":[]}
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
import "./specs/BBPlayerViewNativeComponent";
|
|
2
|
-
import "./specs/BBShortsViewNativeComponent";
|
|
3
|
-
import "./specs/BBCastButtonViewNativeComponent";
|
|
4
|
-
import "./specs/BBCastMiniControlsViewNativeComponent";
|
|
5
1
|
export { default as BBPlayerView } from "./BBPlayerView";
|
|
6
2
|
export { default as BBShortsView } from "./BBShortsView";
|
|
7
3
|
export { default as BBOutstreamPlayerView } from "./BBOutstreamView";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC9E,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AAGxB,uDAAuD;AACvD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/D,uDAAuD;AACvD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EACL,KAAK,iBAAiB,IAAI,qBAAqB,EAC/C,KAAK,mBAAmB,IAAI,oBAAoB,GACjD,MAAM,kBAAkB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bluebillywig/react-native-bb-player",
|
|
3
|
-
"version": "8.47.
|
|
3
|
+
"version": "8.47.2",
|
|
4
4
|
"description": "Blue Billywig Native Video Player for React Native - iOS AVPlayer and Android ExoPlayer integration",
|
|
5
5
|
"main": "lib/commonjs/index.js",
|
|
6
6
|
"module": "lib/module/index.js",
|
|
@@ -18,7 +18,7 @@ Pod::Spec.new do |s|
|
|
|
18
18
|
s.author = 'Blue Billywig'
|
|
19
19
|
s.homepage = 'https://github.com/bluebillywig/react-native-bb-player'
|
|
20
20
|
s.platforms = { :ios => '14.0' }
|
|
21
|
-
s.swift_version = '
|
|
21
|
+
s.swift_version = '6.0'
|
|
22
22
|
s.source = { :git => 'https://github.com/bluebillywig/react-native-bb-player.git', :tag => "v#{s.version}" }
|
|
23
23
|
s.static_framework = true
|
|
24
24
|
|
|
@@ -40,7 +40,8 @@ Pod::Spec.new do |s|
|
|
|
40
40
|
# Swift/Objective-C compatibility
|
|
41
41
|
s.pod_target_xcconfig = {
|
|
42
42
|
'DEFINES_MODULE' => 'YES',
|
|
43
|
-
'SWIFT_COMPILATION_MODE' => 'wholemodule'
|
|
43
|
+
'SWIFT_COMPILATION_MODE' => 'wholemodule',
|
|
44
|
+
'SWIFT_STRICT_CONCURRENCY' => 'complete'
|
|
44
45
|
}
|
|
45
46
|
|
|
46
47
|
s.source_files = "ios/*.{h,m,mm,swift,hpp,cpp}"
|
package/src/index.ts
CHANGED
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
// Fabric codegen component registrations (side-effect imports for New Architecture).
|
|
2
|
-
// These trigger NativeComponentRegistry.register on Fabric, falling back to
|
|
3
|
-
// requireNativeComponent's lazy resolution on old architecture.
|
|
4
|
-
import "./specs/BBPlayerViewNativeComponent";
|
|
5
|
-
import "./specs/BBShortsViewNativeComponent";
|
|
6
|
-
import "./specs/BBCastButtonViewNativeComponent";
|
|
7
|
-
import "./specs/BBCastMiniControlsViewNativeComponent";
|
|
8
|
-
|
|
9
1
|
// Main exports
|
|
10
2
|
export { default as BBPlayerView } from "./BBPlayerView";
|
|
11
3
|
export { default as BBShortsView } from "./BBShortsView";
|