react-native-spalla-player 0.6.1 → 0.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.
@@ -9,7 +9,7 @@ buildscript {
9
9
  }
10
10
 
11
11
  dependencies {
12
- classpath "com.android.tools.build:gradle:7.2.1"
12
+ classpath 'com.android.tools.build:gradle:8.7.3'
13
13
  // noinspection DifferentKotlinGradleVersion
14
14
  classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
15
15
  }
@@ -53,6 +53,7 @@ def supportsNamespace() {
53
53
  return (major == 7 && minor >= 3) || major >= 8
54
54
  }
55
55
 
56
+
56
57
  android {
57
58
  if (supportsNamespace()) {
58
59
  namespace "com.spallaplayer"
@@ -69,7 +70,7 @@ android {
69
70
  defaultConfig {
70
71
  minSdkVersion getExtOrIntegerDefault("minSdkVersion")
71
72
  targetSdkVersion getExtOrIntegerDefault("targetSdkVersion")
72
-
73
+ buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
73
74
  }
74
75
 
75
76
  buildTypes {
@@ -103,7 +104,7 @@ dependencies {
103
104
  implementation "com.facebook.react:react-native:+"
104
105
  implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
105
106
  implementation "androidx.mediarouter:mediarouter:1.2.0"
106
- implementation "stream.spalla:spalla-android-sdk:1.5.0"
107
+ implementation "stream.spalla:spalla-android-sdk:1.6.0"
107
108
  implementation "com.google.android.gms:play-services-cast-framework:21.3.0"
108
109
  }
109
110
 
@@ -4,11 +4,15 @@ import com.facebook.react.bridge.LifecycleEventListener
4
4
  import com.facebook.react.bridge.ReactApplicationContext
5
5
  import com.facebook.react.bridge.ReactContextBaseJavaModule
6
6
  import com.facebook.react.bridge.ReactMethod
7
+ import com.facebook.react.bridge.UIManager
7
8
  import com.facebook.react.uimanager.NativeViewHierarchyManager
9
+ import com.facebook.react.uimanager.UIManagerHelper
8
10
  import com.facebook.react.uimanager.UIManagerModule
11
+ import com.facebook.react.uimanager.common.UIManagerType
9
12
  import com.spalla.sdk.android.core.SpallaSDK
10
13
  import com.spalla.sdk.android.core.player.view.SpallaPlayerView
11
14
 
15
+
12
16
  class SpallaPlayerModule(reactContext: ReactApplicationContext) :
13
17
  ReactContextBaseJavaModule(reactContext),
14
18
  LifecycleEventListener {
@@ -27,6 +31,7 @@ class SpallaPlayerModule(reactContext: ReactApplicationContext) :
27
31
  }
28
32
 
29
33
  override fun onHostPause() {
34
+
30
35
  }
31
36
 
32
37
  override fun onHostDestroy() {
@@ -52,8 +57,24 @@ class SpallaPlayerModule(reactContext: ReactApplicationContext) :
52
57
 
53
58
  @ReactMethod
54
59
  fun pause(tag: Int) {
55
- _reactContext.getNativeModule(UIManagerModule::class.java)!!
56
- .prependUIBlock { nativeViewHierarchyManager: NativeViewHierarchyManager ->
60
+
61
+ if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
62
+ val uiManager = UIManagerHelper.getUIManager(_reactContext, UIManagerType.FABRIC)
63
+ if (uiManager is UIManager) {
64
+ uiManager.resolveView(tag)?.let { view ->
65
+ if (view is SpallaPlayerView) {
66
+ view.pause()
67
+ } else {
68
+ throw ClassCastException(
69
+ "Cannot pause: view with tag #$tag is not a SpallaPlayerView"
70
+ )
71
+ }
72
+ }
73
+ }
74
+ } else {
75
+ val uiManager: UIManagerModule? =
76
+ _reactContext.getNativeModule(UIManagerModule::class.java)
77
+ uiManager?.prependUIBlock { nativeViewHierarchyManager: NativeViewHierarchyManager ->
57
78
  val playerView = nativeViewHierarchyManager.resolveView(tag)
58
79
  if (playerView is SpallaPlayerView) {
59
80
  playerView.pause()
@@ -66,6 +87,9 @@ class SpallaPlayerModule(reactContext: ReactApplicationContext) :
66
87
  )
67
88
  }
68
89
  }
90
+ }
91
+
92
+
69
93
  }
70
94
 
71
95
  @ReactMethod
@@ -86,6 +110,24 @@ class SpallaPlayerModule(reactContext: ReactApplicationContext) :
86
110
  }
87
111
  }
88
112
 
113
+ @ReactMethod
114
+ fun selectSubtitle(tag: Int, subtitle: String?) {
115
+ _reactContext.getNativeModule(UIManagerModule::class.java)!!
116
+ .prependUIBlock { nativeViewHierarchyManager: NativeViewHierarchyManager ->
117
+ val playerView = nativeViewHierarchyManager.resolveView(tag)
118
+ if (playerView is SpallaPlayerView) {
119
+ playerView.selectSubtitle(subtitle)
120
+ } else {
121
+ throw ClassCastException(
122
+ String.format(
123
+ "Cannot play: view with tag #%d is not a SpallaPplayerView",
124
+ tag
125
+ )
126
+ )
127
+ }
128
+ }
129
+ }
130
+
89
131
  @ReactMethod
90
132
  fun initialize(token: String, applicationId: String?) {
91
133
  SpallaSDK.initialize(_reactContext, token)
@@ -3,6 +3,9 @@ package com.spallaplayer
3
3
  import android.util.Log
4
4
  import com.facebook.react.bridge.Arguments
5
5
  import com.facebook.react.bridge.ReactContext
6
+ import com.facebook.react.bridge.ReadableArray
7
+ import com.facebook.react.bridge.ReadableNativeArray
8
+ import com.facebook.react.bridge.WritableArray
6
9
  import com.facebook.react.bridge.WritableMap
7
10
  import com.facebook.react.common.MapBuilder
8
11
  import com.facebook.react.uimanager.SimpleViewManager
@@ -13,6 +16,8 @@ import com.spalla.sdk.android.core.player.entities.SpallaPlayerEvent
13
16
  import com.spalla.sdk.android.core.player.entities.SpallaPlayerEvent.*
14
17
  import com.spalla.sdk.android.core.player.listeners.SpallaPlayerListener
15
18
  import com.spalla.sdk.android.core.player.view.SpallaPlayerView
19
+ import java.util.Timer
20
+ import java.util.TimerTask
16
21
 
17
22
  class RNSpallaPlayerManager() : SimpleViewManager<SpallaPlayerView>(), SpallaPlayerListener {
18
23
  private var _playerView: SpallaPlayerView? = null
@@ -20,6 +25,8 @@ class RNSpallaPlayerManager() : SimpleViewManager<SpallaPlayerView>(), SpallaPla
20
25
 
21
26
  private var contentId: String? = null
22
27
  private var startTime: Double? = null
28
+ private var subtitle: String? = null
29
+ private var loadTimer: Timer? = null
23
30
 
24
31
  override fun getName() = "RNSpallaPlayer"
25
32
 
@@ -69,7 +76,13 @@ class RNSpallaPlayerManager() : SimpleViewManager<SpallaPlayerView>(), SpallaPla
69
76
  @ReactProp(name = "startTime")
70
77
  fun setStartTime(view: SpallaPlayerView, startTime: Double) {
71
78
  this.startTime = startTime
72
- checkAndLoadPlayer(view)
79
+ //checkAndLoadPlayer(view)
80
+ }
81
+
82
+ @ReactProp(name = "subtitle")
83
+ fun setSubtitle(view: SpallaPlayerView, subtitle: String?) {
84
+ this.subtitle = subtitle
85
+ _playerView?.selectSubtitle(subtitle)
73
86
  }
74
87
 
75
88
  private fun checkAndLoadPlayer(view: SpallaPlayerView) {
@@ -78,6 +91,22 @@ class RNSpallaPlayerManager() : SimpleViewManager<SpallaPlayerView>(), SpallaPla
78
91
  }
79
92
  }
80
93
 
94
+ private fun startLoadTimer(view: SpallaPlayerView) {
95
+ // Cancel any existing timer
96
+ loadTimer?.cancel()
97
+
98
+ // Start a new timer to check if all required properties are set
99
+ loadTimer = Timer()
100
+ loadTimer?.schedule(object : TimerTask() {
101
+ override fun run() {
102
+ loadTimer?.cancel()
103
+ loadTimer = null
104
+ // Call view.load with the required properties
105
+ view.load(contentId!!, false, true, startTime!!, subtitle)
106
+ }
107
+ }, 300) // Delay of 200ms to allow all properties to be set
108
+ }
109
+
81
110
  override fun onEvent( spallaPlayerEvent: SpallaPlayerEvent) {
82
111
  val map: WritableMap = Arguments.createMap()
83
112
 
@@ -99,6 +128,19 @@ class RNSpallaPlayerManager() : SimpleViewManager<SpallaPlayerView>(), SpallaPla
99
128
  map.putDouble("time", spallaPlayerEvent.currentTime)
100
129
  }
101
130
  Waiting -> map.putString("event", "buffering")
131
+ is SubtitlesAvailable -> {
132
+ map.putString("event", "subtitlesAvailable")
133
+
134
+ var subs = Arguments.createArray()
135
+ spallaPlayerEvent.subtitles.forEach {
136
+ subs.pushString(it)
137
+ }
138
+ map.putArray("subtitles", subs)
139
+ }
140
+ is SubtitleSelected -> {
141
+ map.putString("event", "subtitleSelected")
142
+ map.putString("subtitle", spallaPlayerEvent.subtitle)
143
+ }
102
144
  }
103
145
  _playerView?.let { player ->
104
146
  _reactContext?.getJSModule(RCTEventEmitter::class.java)?.receiveEvent(
@@ -107,6 +149,13 @@ class RNSpallaPlayerManager() : SimpleViewManager<SpallaPlayerView>(), SpallaPla
107
149
  map
108
150
  )
109
151
  }
110
-
111
152
  }
153
+
154
+
155
+ // Expose a method to set the current subtitle track
156
+ fun setSubtitleTrack(view: SpallaPlayerView, trackId: String) {
157
+ //check if current trackId exists
158
+
159
+ //view.setSubtitleTrack(trackId)
160
+ }
112
161
  }
@@ -13,6 +13,8 @@ RCT_EXPORT_VIEW_PROPERTY(hideUI, BOOL)
13
13
 
14
14
  RCT_EXPORT_VIEW_PROPERTY(startTime, NSNumber)
15
15
 
16
+ RCT_EXPORT_VIEW_PROPERTY(subtitle, NSString)
17
+
16
18
  RCT_EXPORT_METHOD(play: (nonnull NSNumber *) reactTag {
17
19
 
18
20
  [self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary<NSNumber *,UIView *> *viewRegistry) {
@@ -51,6 +53,18 @@ RCT_EXPORT_METHOD(seekTo: (nonnull NSNumber *) reactTag time:(float)time) {
51
53
  }];
52
54
  }
53
55
 
56
+ RCT_EXPORT_METHOD(selectSubtitle: (nonnull NSNumber *) reactTag subtitle:(NSString *)subtitle) {
57
+ [self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary<NSNumber *,UIView *> *viewRegistry) {
58
+ UIView *view = viewRegistry[reactTag];
59
+ if (!view || ![view isKindOfClass:[SpallaPlayerWrapper class]]) {
60
+ RCTLogError(@"Cannot find NativeView with tag #%@", reactTag);
61
+ return;
62
+ } else {
63
+ [(SpallaPlayerWrapper *)view selectSubtitle: subtitle];
64
+ }
65
+ }];
66
+ }
67
+
54
68
  RCT_EXPORT_METHOD(initialize: (nonnull NSString *) token: (NSString *) applicationId) {
55
69
  dispatch_async(dispatch_get_main_queue(), ^{
56
70
  [SpallaPlayerWrapper initializeWithToken: token applicationId: applicationId];
@@ -17,7 +17,6 @@ import SpallaSDK
17
17
  didSet {
18
18
  print("Content id: \(contentId ?? "nil")")
19
19
  // hacky! this needs to be delayed a bit so hideUI and startTime can be set first when comming from RN
20
- // ideally we should use a chromeless class
21
20
  DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { [self] in
22
21
  self.setupPlayer()
23
22
  }
@@ -44,6 +43,13 @@ import SpallaSDK
44
43
  }
45
44
  }
46
45
 
46
+ @objc var subtitle: String? = nil {
47
+ didSet {
48
+ print("Subtitle set \(subtitle ?? "nil")")
49
+ viewController.selectSubtitle(subtitle: subtitle)
50
+ }
51
+ }
52
+
47
53
  @objc var onPlayerEvent: RCTBubblingEventBlock?
48
54
 
49
55
  convenience public init() {
@@ -78,8 +84,7 @@ import SpallaSDK
78
84
 
79
85
  func setupPlayer() {
80
86
  if let contentId {
81
- print("Start time \(startTime)")
82
- viewController.setup(with: contentId, isLive: false, hideUI: hideUI, startTime: startTime.doubleValue)
87
+ viewController.setup(with: contentId, isLive: false, hideUI: hideUI, startTime: startTime.doubleValue, subtitle: subtitle)
83
88
  }
84
89
  }
85
90
 
@@ -95,6 +100,10 @@ import SpallaSDK
95
100
  viewController.seekTo(time: TimeInterval(time))
96
101
  }
97
102
 
103
+ @objc public func selectSubtitle(_ subtitle: String?) {
104
+ viewController.selectSubtitle(subtitle: subtitle)
105
+ }
106
+
98
107
  private func updateMutedState() {
99
108
  viewController.mute()
100
109
  if muted {
@@ -141,6 +150,10 @@ extension SpallaPlayerWrapper: SpallaPlayerListener {
141
150
  onPlayerEvent(["event": "timeUpdate", "time": time])
142
151
  case .waiting:
143
152
  onPlayerEvent(["event": "buffering"])
153
+ case .subtitlesAvailable(let subtitles):
154
+ onPlayerEvent(["event": "subtitlesAvailable", "subtitles": subtitles])
155
+ case .subtitleSelected(let subtitle):
156
+ onPlayerEvent(["event": "subtitleSelected", "subtitle": subtitle != nil ? subtitle! : NSNull()])
144
157
  @unknown default:
145
158
  break
146
159
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_jsxRuntime","_CastButton","e","__esModule","default","RNSpallaPlayer","requireNativeComponent","RNSpallaPlayerModule","NativeModules","play","ref","handle","findNodeHandle","exports","pause","seekTo","time","SpallaPlayer","React","Component","_player","_setRef","render","style","startTime","props","jsx","children","initialize","token","applicationId","_default"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAKsB,IAAAE,WAAA,GAAAF,OAAA;AA0GtB,IAAAG,WAAA,GAAAJ,sBAAA,CAAAC,OAAA;AAAsE,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAjGtE,MAAMG,cAAc,GAClB,IAAAC,mCAAsB,EAAsB,gBAAgB,CAAC;AAE/D,MAAMC,oBAAoB,GAAGC,0BAAa,CAACH,cAAc;AAuClD,MAAMI,IAAI,GAAIC,GAAQ,IAAK;EAChC,MAAMC,MAAM,GAAG,IAAAC,2BAAc,EAACF,GAAG,CAAC;EAClCH,oBAAoB,CAACE,IAAI,CAACE,MAAM,CAAC;AACnC,CAAC;AAACE,OAAA,CAAAJ,IAAA,GAAAA,IAAA;AAEK,MAAMK,KAAK,GAAIJ,GAAQ,IAAK;EACjC,MAAMC,MAAM,GAAG,IAAAC,2BAAc,EAACF,GAAG,CAAC;EAClCH,oBAAoB,CAACO,KAAK,CAACH,MAAM,CAAC;AACpC,CAAC;AAACE,OAAA,CAAAC,KAAA,GAAAA,KAAA;AAEK,MAAMC,MAAM,GAAGA,CAACL,GAAQ,EAAEM,IAAY,KAAK;EAChD,MAAML,MAAM,GAAG,IAAAC,2BAAc,EAACF,GAAG,CAAC;EAClCH,oBAAoB,CAACQ,MAAM,CAACJ,MAAM,EAAEK,IAAI,CAAC;AAC3C,CAAC;;AAED;AAAAH,OAAA,CAAAE,MAAA,GAAAA,MAAA;AAEA,MAAME,YAAY,SAASC,cAAK,CAACC,SAAS,CAAQ;EAChDC,OAAO,GAAG,IAAI;EAEdC,OAAO,GAAIX,GAAQ,IAAK;IACtB,IAAI,CAACU,OAAO,GAAGV,GAAG;EACpB,CAAC;EAEDY,MAAMA,CAAA,EAAG;IACP,MAAM;MAAEC,KAAK;MAAEC;IAAU,CAAC,GAAG,IAAI,CAACC,KAAK;IAEvC,oBACE,IAAAzB,WAAA,CAAA0B,GAAA,EAACrB,cAAc;MAAA,GACT,IAAI,CAACoB,KAAK;MACdf,GAAG,EAAE,IAAI,CAACW,OAAQ;MAClBE,KAAK,EAAEA,KAAM;MACbC,SAAS,EAAEA,SAAS,IAAI,CAAE;MAAAG,QAAA,EAEzB,IAAI,CAACF,KAAK,CAACE;IAAQ,CACN,CAAC;EAErB;EAEAlB,IAAI,GAAGA,CAAA,KAAM;IACX,MAAME,MAAM,GAAG,IAAAC,2BAAc,EAAC,IAAI,CAACQ,OAAO,CAAC;IAC3Cb,oBAAoB,CAACE,IAAI,CAACE,MAAM,CAAC;EACnC,CAAC;EAEDG,KAAK,GAAGA,CAAA,KAAM;IACZ,MAAMH,MAAM,GAAG,IAAAC,2BAAc,EAAC,IAAI,CAACQ,OAAO,CAAC;IAC3Cb,oBAAoB,CAACO,KAAK,CAACH,MAAM,CAAC;EACpC,CAAC;AACH;AAEO,MAAMiB,UAAU,GAAGA,CAACC,KAAa,EAAEC,aAA4B,KAAK;EACzEvB,oBAAoB,CAACqB,UAAU,CAACC,KAAK,EAAEC,aAAa,CAAC;AACvD,CAAC;AAACjB,OAAA,CAAAe,UAAA,GAAAA,UAAA;AAAA,IAAAG,QAAA,GAAAlB,OAAA,CAAAT,OAAA,GAEaa,YAAY","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_jsxRuntime","_CastButton","e","__esModule","default","RNSpallaPlayer","requireNativeComponent","RNSpallaPlayerModule","NativeModules","play","ref","handle","findNodeHandle","exports","pause","seekTo","time","SpallaPlayer","React","Component","_player","_setRef","render","style","startTime","props","jsx","children","initialize","token","applicationId","_default"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAKsB,IAAAE,WAAA,GAAAF,OAAA;AAuHtB,IAAAG,WAAA,GAAAJ,sBAAA,CAAAC,OAAA;AAAsE,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AA7GtE,MAAMG,cAAc,GAClB,IAAAC,mCAAsB,EAAsB,gBAAgB,CAAC;AAE/D,MAAMC,oBAAoB,GAAGC,0BAAa,CAACH,cAAc;AAmDlD,MAAMI,IAAI,GAAIC,GAAQ,IAAK;EAChC,MAAMC,MAAM,GAAG,IAAAC,2BAAc,EAACF,GAAG,CAAC;EAClCH,oBAAoB,CAACE,IAAI,CAACE,MAAM,CAAC;AACnC,CAAC;AAACE,OAAA,CAAAJ,IAAA,GAAAA,IAAA;AAEK,MAAMK,KAAK,GAAIJ,GAAQ,IAAK;EACjC,MAAMC,MAAM,GAAG,IAAAC,2BAAc,EAACF,GAAG,CAAC;EAClCH,oBAAoB,CAACO,KAAK,CAACH,MAAM,CAAC;AACpC,CAAC;AAACE,OAAA,CAAAC,KAAA,GAAAA,KAAA;AAEK,MAAMC,MAAM,GAAGA,CAACL,GAAQ,EAAEM,IAAY,KAAK;EAChD,MAAML,MAAM,GAAG,IAAAC,2BAAc,EAACF,GAAG,CAAC;EAClCH,oBAAoB,CAACQ,MAAM,CAACJ,MAAM,EAAEK,IAAI,CAAC;AAC3C,CAAC;;AAED;AAAAH,OAAA,CAAAE,MAAA,GAAAA,MAAA;AAEA,MAAME,YAAY,SAASC,cAAK,CAACC,SAAS,CAAQ;EAChDC,OAAO,GAAG,IAAI;EAEdC,OAAO,GAAIX,GAAQ,IAAK;IACtB,IAAI,CAACU,OAAO,GAAGV,GAAG;EACpB,CAAC;EAEDY,MAAMA,CAAA,EAAG;IACP,MAAM;MAAEC,KAAK;MAAEC;IAAU,CAAC,GAAG,IAAI,CAACC,KAAK;IAEvC,oBACE,IAAAzB,WAAA,CAAA0B,GAAA,EAACrB,cAAc;MAAA,GACT,IAAI,CAACoB,KAAK;MACdf,GAAG,EAAE,IAAI,CAACW,OAAQ;MAClBE,KAAK,EAAEA,KAAM;MACbC,SAAS,EAAEA,SAAS,IAAI,CAAE;MAAAG,QAAA,EAEzB,IAAI,CAACF,KAAK,CAACE;IAAQ,CACN,CAAC;EAErB;EAEAlB,IAAI,GAAGA,CAAA,KAAM;IACX,MAAME,MAAM,GAAG,IAAAC,2BAAc,EAAC,IAAI,CAACQ,OAAO,CAAC;IAC3Cb,oBAAoB,CAACE,IAAI,CAACE,MAAM,CAAC;EACnC,CAAC;EAEDG,KAAK,GAAGA,CAAA,KAAM;IACZ,MAAMH,MAAM,GAAG,IAAAC,2BAAc,EAAC,IAAI,CAACQ,OAAO,CAAC;IAC3Cb,oBAAoB,CAACO,KAAK,CAACH,MAAM,CAAC;EACpC,CAAC;AACH;AAEO,MAAMiB,UAAU,GAAGA,CAACC,KAAa,EAAEC,aAA4B,KAAK;EACzEvB,oBAAoB,CAACqB,UAAU,CAACC,KAAK,EAAEC,aAAa,CAAC;AACvD,CAAC;AAACjB,OAAA,CAAAe,UAAA,GAAAA,UAAA;AAAA,IAAAG,QAAA,GAAAlB,OAAA,CAAAT,OAAA,GAEaa,YAAY","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["React","requireNativeComponent","NativeModules","findNodeHandle","jsx","_jsx","RNSpallaPlayer","RNSpallaPlayerModule","play","ref","handle","pause","seekTo","time","SpallaPlayer","Component","_player","_setRef","render","style","startTime","props","children","initialize","token","applicationId","default","SpallaCastButton"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SACEC,sBAAsB,EAEtBC,aAAa,EACbC,cAAc,QACT,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAStB,MAAMC,cAAc,GAClBL,sBAAsB,CAAsB,gBAAgB,CAAC;AAE/D,MAAMM,oBAAoB,GAAGL,aAAa,CAACI,cAAc;AAuCzD,OAAO,MAAME,IAAI,GAAIC,GAAQ,IAAK;EAChC,MAAMC,MAAM,GAAGP,cAAc,CAACM,GAAG,CAAC;EAClCF,oBAAoB,CAACC,IAAI,CAACE,MAAM,CAAC;AACnC,CAAC;AAED,OAAO,MAAMC,KAAK,GAAIF,GAAQ,IAAK;EACjC,MAAMC,MAAM,GAAGP,cAAc,CAACM,GAAG,CAAC;EAClCF,oBAAoB,CAACI,KAAK,CAACD,MAAM,CAAC;AACpC,CAAC;AAED,OAAO,MAAME,MAAM,GAAGA,CAACH,GAAQ,EAAEI,IAAY,KAAK;EAChD,MAAMH,MAAM,GAAGP,cAAc,CAACM,GAAG,CAAC;EAClCF,oBAAoB,CAACK,MAAM,CAACF,MAAM,EAAEG,IAAI,CAAC;AAC3C,CAAC;;AAED;;AAEA,MAAMC,YAAY,SAASd,KAAK,CAACe,SAAS,CAAQ;EAChDC,OAAO,GAAG,IAAI;EAEdC,OAAO,GAAIR,GAAQ,IAAK;IACtB,IAAI,CAACO,OAAO,GAAGP,GAAG;EACpB,CAAC;EAEDS,MAAMA,CAAA,EAAG;IACP,MAAM;MAAEC,KAAK;MAAEC;IAAU,CAAC,GAAG,IAAI,CAACC,KAAK;IAEvC,oBACEhB,IAAA,CAACC,cAAc;MAAA,GACT,IAAI,CAACe,KAAK;MACdZ,GAAG,EAAE,IAAI,CAACQ,OAAQ;MAClBE,KAAK,EAAEA,KAAM;MACbC,SAAS,EAAEA,SAAS,IAAI,CAAE;MAAAE,QAAA,EAEzB,IAAI,CAACD,KAAK,CAACC;IAAQ,CACN,CAAC;EAErB;EAEAd,IAAI,GAAGA,CAAA,KAAM;IACX,MAAME,MAAM,GAAGP,cAAc,CAAC,IAAI,CAACa,OAAO,CAAC;IAC3CT,oBAAoB,CAACC,IAAI,CAACE,MAAM,CAAC;EACnC,CAAC;EAEDC,KAAK,GAAGA,CAAA,KAAM;IACZ,MAAMD,MAAM,GAAGP,cAAc,CAAC,IAAI,CAACa,OAAO,CAAC;IAC3CT,oBAAoB,CAACI,KAAK,CAACD,MAAM,CAAC;EACpC,CAAC;AACH;AAEA,OAAO,MAAMa,UAAU,GAAGA,CAACC,KAAa,EAAEC,aAA4B,KAAK;EACzElB,oBAAoB,CAACgB,UAAU,CAACC,KAAK,EAAEC,aAAa,CAAC;AACvD,CAAC;AAED,eAAeX,YAAY;AAC3B,SAASY,OAAO,IAAIC,gBAAgB,QAAQ,4BAAyB","ignoreList":[]}
1
+ {"version":3,"names":["React","requireNativeComponent","NativeModules","findNodeHandle","jsx","_jsx","RNSpallaPlayer","RNSpallaPlayerModule","play","ref","handle","pause","seekTo","time","SpallaPlayer","Component","_player","_setRef","render","style","startTime","props","children","initialize","token","applicationId","default","SpallaCastButton"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SACEC,sBAAsB,EAEtBC,aAAa,EACbC,cAAc,QACT,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAUtB,MAAMC,cAAc,GAClBL,sBAAsB,CAAsB,gBAAgB,CAAC;AAE/D,MAAMM,oBAAoB,GAAGL,aAAa,CAACI,cAAc;AAmDzD,OAAO,MAAME,IAAI,GAAIC,GAAQ,IAAK;EAChC,MAAMC,MAAM,GAAGP,cAAc,CAACM,GAAG,CAAC;EAClCF,oBAAoB,CAACC,IAAI,CAACE,MAAM,CAAC;AACnC,CAAC;AAED,OAAO,MAAMC,KAAK,GAAIF,GAAQ,IAAK;EACjC,MAAMC,MAAM,GAAGP,cAAc,CAACM,GAAG,CAAC;EAClCF,oBAAoB,CAACI,KAAK,CAACD,MAAM,CAAC;AACpC,CAAC;AAED,OAAO,MAAME,MAAM,GAAGA,CAACH,GAAQ,EAAEI,IAAY,KAAK;EAChD,MAAMH,MAAM,GAAGP,cAAc,CAACM,GAAG,CAAC;EAClCF,oBAAoB,CAACK,MAAM,CAACF,MAAM,EAAEG,IAAI,CAAC;AAC3C,CAAC;;AAED;;AAEA,MAAMC,YAAY,SAASd,KAAK,CAACe,SAAS,CAAQ;EAChDC,OAAO,GAAG,IAAI;EAEdC,OAAO,GAAIR,GAAQ,IAAK;IACtB,IAAI,CAACO,OAAO,GAAGP,GAAG;EACpB,CAAC;EAEDS,MAAMA,CAAA,EAAG;IACP,MAAM;MAAEC,KAAK;MAAEC;IAAU,CAAC,GAAG,IAAI,CAACC,KAAK;IAEvC,oBACEhB,IAAA,CAACC,cAAc;MAAA,GACT,IAAI,CAACe,KAAK;MACdZ,GAAG,EAAE,IAAI,CAACQ,OAAQ;MAClBE,KAAK,EAAEA,KAAM;MACbC,SAAS,EAAEA,SAAS,IAAI,CAAE;MAAAE,QAAA,EAEzB,IAAI,CAACD,KAAK,CAACC;IAAQ,CACN,CAAC;EAErB;EAEAd,IAAI,GAAGA,CAAA,KAAM;IACX,MAAME,MAAM,GAAGP,cAAc,CAAC,IAAI,CAACa,OAAO,CAAC;IAC3CT,oBAAoB,CAACC,IAAI,CAACE,MAAM,CAAC;EACnC,CAAC;EAEDC,KAAK,GAAGA,CAAA,KAAM;IACZ,MAAMD,MAAM,GAAGP,cAAc,CAAC,IAAI,CAACa,OAAO,CAAC;IAC3CT,oBAAoB,CAACI,KAAK,CAACD,MAAM,CAAC;EACpC,CAAC;AACH;AAEA,OAAO,MAAMa,UAAU,GAAGA,CAACC,KAAa,EAAEC,aAA4B,KAAK;EACzElB,oBAAoB,CAACgB,UAAU,CAACC,KAAK,EAAEC,aAAa,CAAC;AACvD,CAAC;AAED,eAAeX,YAAY;AAC3B,SAASY,OAAO,IAAIC,gBAAgB,QAAQ,4BAAyB","ignoreList":[]}
@@ -8,6 +8,14 @@ interface PlayerEventDurationUpdate {
8
8
  event: 'durationUpdate';
9
9
  duration: number;
10
10
  }
11
+ interface PlayerEventSubtitlesAvailable {
12
+ event: 'subtitlesAvailable';
13
+ subtitles: Array<String>;
14
+ }
15
+ interface PlayerEventSubtitleSelected {
16
+ event: 'subtitleSelected';
17
+ subtitle: String;
18
+ }
11
19
  interface PlayerEvent {
12
20
  event: 'play' | 'pause' | 'ended' | 'muted' | 'unmuted' | 'buffering' | 'playing';
13
21
  }
@@ -19,8 +27,9 @@ interface Props {
19
27
  muted?: boolean;
20
28
  autoplay?: boolean;
21
29
  startTime?: number;
30
+ subtitle?: String | null;
22
31
  onPlayerEvent?: (event: {
23
- nativeEvent: PlayerEventTimeUpdate | PlayerEvent | PlayerEventDurationUpdate;
32
+ nativeEvent: PlayerEventTimeUpdate | PlayerEvent | PlayerEventDurationUpdate | PlayerEventSubtitlesAvailable | PlayerEventSubtitleSelected;
24
33
  }) => void;
25
34
  }
26
35
  export declare const play: (ref: any) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAEL,KAAK,SAAS,EAGf,MAAM,cAAc,CAAC;AActB,UAAU,qBAAqB;IAC7B,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,yBAAyB;IACjC,KAAK,EAAE,gBAAgB,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,WAAW;IACnB,KAAK,EACD,MAAM,GACN,OAAO,GACP,OAAO,GACP,OAAO,GACP,SAAS,GACT,WAAW,GACX,SAAS,CAAC;CACf;AAED,UAAU,KAAK;IACb,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE;QACtB,WAAW,EACP,qBAAqB,GACrB,WAAW,GACX,yBAAyB,CAAC;KAC/B,KAAK,IAAI,CAAC;CACZ;AAED,eAAO,MAAM,IAAI,QAAS,GAAG,SAG5B,CAAC;AAEF,eAAO,MAAM,KAAK,QAAS,GAAG,SAG7B,CAAC;AAEF,eAAO,MAAM,MAAM,QAAS,GAAG,QAAQ,MAAM,SAG5C,CAAC;AAIF,cAAM,YAAa,SAAQ,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC;IAC/C,OAAO,OAAQ;IAEf,OAAO,QAAS,GAAG,UAEjB;IAEF,MAAM;IAeN,IAAI,aAGF;IAEF,KAAK,aAGH;CACH;AAED,eAAO,MAAM,UAAU,UAAW,MAAM,iBAAiB,MAAM,GAAG,IAAI,SAErE,CAAC;AAEF,eAAe,YAAY,CAAC;AAC5B,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAEL,KAAK,SAAS,EAGf,MAAM,cAAc,CAAC;AAetB,UAAU,qBAAqB;IAC7B,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,yBAAyB;IACjC,KAAK,EAAE,gBAAgB,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,6BAA6B;IACrC,KAAK,EAAE,oBAAoB,CAAC;IAC5B,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CAC1B;AAED,UAAU,2BAA2B;IACnC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB;AACD,UAAU,WAAW;IACnB,KAAK,EACD,MAAM,GACN,OAAO,GACP,OAAO,GACP,OAAO,GACP,SAAS,GACT,WAAW,GACX,SAAS,CAAC;CACf;AAED,UAAU,KAAK;IACb,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE;QACtB,WAAW,EACP,qBAAqB,GACrB,WAAW,GACX,yBAAyB,GACzB,6BAA6B,GAC7B,2BAA2B,CAAC;KACjC,KAAK,IAAI,CAAC;CACZ;AAED,eAAO,MAAM,IAAI,QAAS,GAAG,SAG5B,CAAC;AAEF,eAAO,MAAM,KAAK,QAAS,GAAG,SAG7B,CAAC;AAEF,eAAO,MAAM,MAAM,QAAS,GAAG,QAAQ,MAAM,SAG5C,CAAC;AAIF,cAAM,YAAa,SAAQ,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC;IAC/C,OAAO,OAAQ;IAEf,OAAO,QAAS,GAAG,UAEjB;IAEF,MAAM;IAeN,IAAI,aAGF;IAEF,KAAK,aAGH;CACH;AAED,eAAO,MAAM,UAAU,UAAW,MAAM,iBAAiB,MAAM,GAAG,IAAI,SAErE,CAAC;AAEF,eAAe,YAAY,CAAC;AAC5B,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -8,6 +8,14 @@ interface PlayerEventDurationUpdate {
8
8
  event: 'durationUpdate';
9
9
  duration: number;
10
10
  }
11
+ interface PlayerEventSubtitlesAvailable {
12
+ event: 'subtitlesAvailable';
13
+ subtitles: Array<String>;
14
+ }
15
+ interface PlayerEventSubtitleSelected {
16
+ event: 'subtitleSelected';
17
+ subtitle: String;
18
+ }
11
19
  interface PlayerEvent {
12
20
  event: 'play' | 'pause' | 'ended' | 'muted' | 'unmuted' | 'buffering' | 'playing';
13
21
  }
@@ -19,8 +27,9 @@ interface Props {
19
27
  muted?: boolean;
20
28
  autoplay?: boolean;
21
29
  startTime?: number;
30
+ subtitle?: String | null;
22
31
  onPlayerEvent?: (event: {
23
- nativeEvent: PlayerEventTimeUpdate | PlayerEvent | PlayerEventDurationUpdate;
32
+ nativeEvent: PlayerEventTimeUpdate | PlayerEvent | PlayerEventDurationUpdate | PlayerEventSubtitlesAvailable | PlayerEventSubtitleSelected;
24
33
  }) => void;
25
34
  }
26
35
  export declare const play: (ref: any) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAEL,KAAK,SAAS,EAGf,MAAM,cAAc,CAAC;AActB,UAAU,qBAAqB;IAC7B,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,yBAAyB;IACjC,KAAK,EAAE,gBAAgB,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,WAAW;IACnB,KAAK,EACD,MAAM,GACN,OAAO,GACP,OAAO,GACP,OAAO,GACP,SAAS,GACT,WAAW,GACX,SAAS,CAAC;CACf;AAED,UAAU,KAAK;IACb,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE;QACtB,WAAW,EACP,qBAAqB,GACrB,WAAW,GACX,yBAAyB,CAAC;KAC/B,KAAK,IAAI,CAAC;CACZ;AAED,eAAO,MAAM,IAAI,QAAS,GAAG,SAG5B,CAAC;AAEF,eAAO,MAAM,KAAK,QAAS,GAAG,SAG7B,CAAC;AAEF,eAAO,MAAM,MAAM,QAAS,GAAG,QAAQ,MAAM,SAG5C,CAAC;AAIF,cAAM,YAAa,SAAQ,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC;IAC/C,OAAO,OAAQ;IAEf,OAAO,QAAS,GAAG,UAEjB;IAEF,MAAM;IAeN,IAAI,aAGF;IAEF,KAAK,aAGH;CACH;AAED,eAAO,MAAM,UAAU,UAAW,MAAM,iBAAiB,MAAM,GAAG,IAAI,SAErE,CAAC;AAEF,eAAe,YAAY,CAAC;AAC5B,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAEL,KAAK,SAAS,EAGf,MAAM,cAAc,CAAC;AAetB,UAAU,qBAAqB;IAC7B,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,yBAAyB;IACjC,KAAK,EAAE,gBAAgB,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,6BAA6B;IACrC,KAAK,EAAE,oBAAoB,CAAC;IAC5B,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CAC1B;AAED,UAAU,2BAA2B;IACnC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB;AACD,UAAU,WAAW;IACnB,KAAK,EACD,MAAM,GACN,OAAO,GACP,OAAO,GACP,OAAO,GACP,SAAS,GACT,WAAW,GACX,SAAS,CAAC;CACf;AAED,UAAU,KAAK;IACb,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE;QACtB,WAAW,EACP,qBAAqB,GACrB,WAAW,GACX,yBAAyB,GACzB,6BAA6B,GAC7B,2BAA2B,CAAC;KACjC,KAAK,IAAI,CAAC;CACZ;AAED,eAAO,MAAM,IAAI,QAAS,GAAG,SAG5B,CAAC;AAEF,eAAO,MAAM,KAAK,QAAS,GAAG,SAG7B,CAAC;AAEF,eAAO,MAAM,MAAM,QAAS,GAAG,QAAQ,MAAM,SAG5C,CAAC;AAIF,cAAM,YAAa,SAAQ,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC;IAC/C,OAAO,OAAQ;IAEf,OAAO,QAAS,GAAG,UAEjB;IAEF,MAAM;IAeN,IAAI,aAGF;IAEF,KAAK,aAGH;CACH;AAED,eAAO,MAAM,UAAU,UAAW,MAAM,iBAAiB,MAAM,GAAG,IAAI,SAErE,CAAC;AAEF,eAAe,YAAY,CAAC;AAC5B,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-spalla-player",
3
- "version": "0.6.1",
3
+ "version": "0.7.0",
4
4
  "description": "Spalla SDK for RN",
5
5
  "source": "./src/index.tsx",
6
6
  "main": "./lib/commonjs/index.js",
@@ -16,7 +16,7 @@ Pod::Spec.new do |s|
16
16
 
17
17
  s.source_files = "ios/**/*.{h,m,mm,swift}"
18
18
 
19
- s.dependency "SpallaSDK", "~> 0.8.0"
19
+ s.dependency "SpallaSDK", "~> 0.9.0"
20
20
 
21
21
  # Use install_modules_dependencies helper to install the dependencies if React Native version >=0.71.0.
22
22
  # See https://github.com/facebook/react-native/blob/febf6b7f33fdb4904669f99d795eba4c0f95d7bf/scripts/cocoapods/new_architecture.rb#L79.
package/src/index.tsx CHANGED
@@ -10,6 +10,7 @@ interface RNSpallaPlayerProps {
10
10
  children?: React.ReactNode;
11
11
  style?: ViewStyle;
12
12
  startTime: number;
13
+ subtitle?: String | null;
13
14
  ref?: (ref: any) => void;
14
15
  }
15
16
 
@@ -28,6 +29,15 @@ interface PlayerEventDurationUpdate {
28
29
  duration: number;
29
30
  }
30
31
 
32
+ interface PlayerEventSubtitlesAvailable {
33
+ event: 'subtitlesAvailable';
34
+ subtitles: Array<String>;
35
+ }
36
+
37
+ interface PlayerEventSubtitleSelected {
38
+ event: 'subtitleSelected';
39
+ subtitle: String;
40
+ }
31
41
  interface PlayerEvent {
32
42
  event:
33
43
  | 'play'
@@ -47,11 +57,14 @@ interface Props {
47
57
  muted?: boolean;
48
58
  autoplay?: boolean;
49
59
  startTime?: number;
60
+ subtitle?: String | null;
50
61
  onPlayerEvent?: (event: {
51
62
  nativeEvent:
52
63
  | PlayerEventTimeUpdate
53
64
  | PlayerEvent
54
- | PlayerEventDurationUpdate;
65
+ | PlayerEventDurationUpdate
66
+ | PlayerEventSubtitlesAvailable
67
+ | PlayerEventSubtitleSelected;
55
68
  }) => void;
56
69
  }
57
70