react-native-tpstreams 1.1.9 → 1.1.10

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.
@@ -21,7 +21,7 @@ Pod::Spec.new do |s|
21
21
  'DEFINES_MODULE' => 'YES',
22
22
  'CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES' => 'YES'
23
23
  }
24
- s.dependency "TPStreamsSDK" , "1.2.16"
24
+ s.dependency "TPStreamsSDK" , "1.2.23"
25
25
 
26
26
 
27
27
  # Ensure the module is not built as a framework to avoid bridging header conflicts
@@ -3,4 +3,4 @@ Tpstreams_minSdkVersion=24
3
3
  Tpstreams_targetSdkVersion=34
4
4
  Tpstreams_compileSdkVersion=35
5
5
  Tpstreams_ndkVersion=27.1.12297006
6
- Tpstreams_tpstreamsAndroidPlayerVersion=1.1.8
6
+ Tpstreams_tpstreamsAndroidPlayerVersion=1.1.9
@@ -1,5 +1,6 @@
1
1
  package com.tpstreams
2
2
 
3
+ import org.json.JSONException
3
4
  import org.json.JSONObject
4
5
 
5
6
  object JsonUtils {
@@ -43,4 +44,16 @@ object JsonUtils {
43
44
  }
44
45
  return map
45
46
  }
46
- }
47
+
48
+ fun jsonStringToMap(jsonString: String?): Map<String, String>? {
49
+ if (jsonString.isNullOrEmpty()) return null
50
+ return try {
51
+ val jsonObject = JSONObject(jsonString)
52
+ jsonObject.keys()
53
+ .asSequence()
54
+ .associate { it to jsonObject.getString(it) }
55
+ } catch (e: JSONException) {
56
+ null
57
+ }
58
+ }
59
+ }
@@ -6,6 +6,7 @@ import com.facebook.react.bridge.Arguments
6
6
  import com.facebook.react.bridge.ReactMethod
7
7
  import com.facebook.react.bridge.ReactApplicationContext
8
8
  import com.facebook.react.bridge.ReactContextBaseJavaModule
9
+ import com.facebook.react.bridge.ReadableMap
9
10
  import com.facebook.react.bridge.WritableMap
10
11
  import com.facebook.react.modules.core.DeviceEventManagerModule
11
12
  import com.tpstreams.player.download.DownloadClient
@@ -23,6 +24,37 @@ class TPStreamsDownloadModule(private val reactContext: ReactApplicationContext)
23
24
  return "TPStreamsDownload"
24
25
  }
25
26
 
27
+ @ReactMethod
28
+ fun startDownload(
29
+ videoId: String,
30
+ accessToken: String,
31
+ resolution: String?,
32
+ metadata: ReadableMap?,
33
+ promise: Promise
34
+ ) {
35
+ try {
36
+ val metadataString = metadata?.let { org.json.JSONObject(it.toHashMap()).toString() }
37
+ val metadataMap = JsonUtils.jsonStringToMap(metadataString)
38
+
39
+ val activity = currentActivity ?: run {
40
+ promise.reject("DOWNLOAD_START_ERROR", "No current activity available")
41
+ return
42
+ }
43
+
44
+ downloadClient.startDownload(
45
+ activity,
46
+ videoId,
47
+ accessToken,
48
+ resolution,
49
+ metadataMap
50
+ )
51
+ promise.resolve(null)
52
+ } catch (e: Exception) {
53
+ Log.e(TAG, "Error starting download: ${e.message}", e)
54
+ promise.reject("DOWNLOAD_START_ERROR", e.message, e)
55
+ }
56
+ }
57
+
26
58
  @ReactMethod
27
59
  fun addDownloadProgressListener(promise: Promise) {
28
60
  try {
@@ -78,23 +110,78 @@ class TPStreamsDownloadModule(private val reactContext: ReactApplicationContext)
78
110
  }
79
111
  }
80
112
 
113
+ override fun onDownloadStarted(downloadItem: DownloadItem) {
114
+ try {
115
+ if (isListening) {
116
+ emitEvent("onDownloadStarted", createDownloadStateEventMap(downloadItem))
117
+ }
118
+ } catch (e: Exception) {
119
+ Log.e(TAG, "Error in onDownloadStarted: ${e.message}", e)
120
+ }
121
+ }
122
+
123
+ override fun onDownloadResumed(downloadItem: DownloadItem) {
124
+ try {
125
+ if (isListening) {
126
+ emitEvent("onDownloadResumed", createDownloadStateEventMap(downloadItem))
127
+ }
128
+ } catch (e: Exception) {
129
+ Log.e(TAG, "Error in onDownloadResumed: ${e.message}", e)
130
+ }
131
+ }
132
+
133
+ override fun onDownloadCompleted(downloadItem: DownloadItem) {
134
+ try {
135
+ if (isListening) {
136
+ emitEvent("onDownloadCompleted", createDownloadStateEventMap(downloadItem))
137
+ }
138
+ } catch (e: Exception) {
139
+ Log.e(TAG, "Error in onDownloadCompleted: ${e.message}", e)
140
+ }
141
+ }
142
+
143
+ override fun onDownloadFailed(downloadItem: DownloadItem, error: Exception) {
144
+ try {
145
+ if (isListening) {
146
+ emitEvent("onDownloadFailed", createDownloadStateEventMap(downloadItem, error))
147
+ }
148
+ } catch (e: Exception) {
149
+ Log.e(TAG, "Error in onDownloadFailed: ${e.message}", e)
150
+ }
151
+ }
152
+
153
+ override fun onDownloadDeleted(assetId: String) {
154
+ try {
155
+ if (isListening) {
156
+ val map = Arguments.createMap()
157
+ map.putString("videoId", assetId)
158
+ emitEvent("onDownloadDeleted", map)
159
+ }
160
+ } catch (e: Exception) {
161
+ Log.e(TAG, "Error in onDownloadDeleted: ${e.message}", e)
162
+ }
163
+ }
164
+
165
+ private fun createDownloadStateEventMap(downloadItem: DownloadItem, error: Exception? = null): WritableMap {
166
+ val map = Arguments.createMap()
167
+ map.putMap("downloadItem", createDownloadItemMap(downloadItem))
168
+
169
+ if (error != null) {
170
+ val errorMap = Arguments.createMap()
171
+ errorMap.putString("message", error.message ?: "Unknown error")
172
+ errorMap.putString("type", error.javaClass.simpleName)
173
+ map.putMap("error", errorMap)
174
+ } else {
175
+ map.putNull("error")
176
+ }
177
+ return map
178
+ }
179
+
81
180
  override fun onDownloadStateChanged(downloadItem: DownloadItem, error: Exception?) {
82
- try {
83
- val map = Arguments.createMap()
84
- val downloadItemMap = createDownloadItemMap(downloadItem)
85
- map.putMap("downloadItem", downloadItemMap)
86
-
87
- if (error != null) {
88
- val errorMap = Arguments.createMap()
89
- errorMap.putString("message", error.message ?: "Unknown error")
90
- errorMap.putString("type", error.javaClass.simpleName)
91
- map.putMap("error", errorMap)
92
- } else {
93
- map.putNull("error")
181
+ try {
182
+ if (isListening) {
183
+ emitEvent("onDownloadStateChanged", createDownloadStateEventMap(downloadItem, error))
94
184
  }
95
-
96
- emitEvent("onDownloadStateChanged", map)
97
-
98
185
  } catch (e: Exception) {
99
186
  Log.e(TAG, "Error in onDownloadStateChanged: ${e.message}", e)
100
187
  }
@@ -96,20 +96,7 @@ class TPStreamsRNPlayerViewManager : SimpleViewManager<TPStreamsRNPlayerView>(),
96
96
 
97
97
  @ReactProp(name = "downloadMetadata")
98
98
  override fun setDownloadMetadata(view: TPStreamsRNPlayerView, metadata: String?) {
99
- val metadataMap = if (!metadata.isNullOrEmpty()) {
100
- try {
101
- val jsonObject = org.json.JSONObject(metadata)
102
- val map = jsonObject.keys()
103
- .asSequence()
104
- .associate { it to jsonObject.getString(it) }
105
- .toMutableMap()
106
- map
107
- } catch (e: org.json.JSONException) {
108
- android.util.Log.w("TPStreamsRN", "Error parsing download metadata: ${e.message}")
109
- null
110
- }
111
- } else null
112
- view.setDownloadMetadata(metadataMap)
99
+ view.setDownloadMetadata(JsonUtils.jsonStringToMap(metadata))
113
100
  }
114
101
 
115
102
  // Command implementations
@@ -11,6 +11,13 @@ RCT_EXTERN_METHOD(removeDownloadProgressListener:(RCTPromiseResolveBlock)resolve
11
11
  rejecter:(RCTPromiseRejectBlock)reject)
12
12
 
13
13
  // Download Control Methods
14
+ RCT_EXTERN_METHOD(startDownload:(NSString *)videoId
15
+ accessToken:(NSString *)accessToken
16
+ resolution:(NSString *)resolution
17
+ metadata:(NSDictionary *)metadata
18
+ resolver:(RCTPromiseResolveBlock)resolve
19
+ rejecter:(RCTPromiseRejectBlock)reject)
20
+
14
21
  RCT_EXTERN_METHOD(pauseDownload:(NSString *)videoId
15
22
  resolver:(RCTPromiseResolveBlock)resolve
16
23
  rejecter:(RCTPromiseRejectBlock)reject)
@@ -49,6 +49,20 @@ class TPStreamsDownloadModule: RCTEventEmitter, TPStreamsDownloadDelegate {
49
49
  return true
50
50
  }
51
51
 
52
+ @objc
53
+ func startDownload(_ videoId: String, accessToken: String, resolution: String?, metadata: NSDictionary?, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
54
+ DispatchQueue.main.async { [weak self] in
55
+ guard let self = self else { return }
56
+
57
+ let metadataDict = metadata as? [String: Any]
58
+ let res = (resolution?.isEmpty ?? true) ? nil : resolution
59
+ let presentingVC = (res == nil) ? RCTPresentedViewController() : nil
60
+
61
+ self.downloadManager.startDownload(assetID: videoId, accessToken: accessToken, resolution: res, allowResolutionFallback: true, metadata: metadataDict, presentingViewController: presentingVC, completion: nil)
62
+ resolve(nil)
63
+ }
64
+ }
65
+
52
66
  @objc
53
67
  func addDownloadProgressListener(_ resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
54
68
  isListening = true
@@ -76,74 +90,58 @@ class TPStreamsDownloadModule: RCTEventEmitter, TPStreamsDownloadDelegate {
76
90
 
77
91
  func onDelete(assetId: String) {
78
92
  if isListening {
79
- if let offlineAsset = getOfflineAsset(assetId: assetId) {
80
- notifyDownloadStateChanged(offlineAsset: offlineAsset)
81
- }
82
- notifyDownloadsChange()
93
+ emitDeletedEvent(assetId: assetId)
94
+ }
95
+ }
96
+
97
+ func onFailed(offlineAsset: OfflineAsset, error: Error?) {
98
+ if isListening {
99
+ notifyDownloadLifecycleEvent(name: "onDownloadFailed", asset: offlineAsset, error: error)
83
100
  }
84
101
  }
85
102
 
86
103
  func onStart(offlineAsset: OfflineAsset) {
87
104
  if isListening {
88
- notifyDownloadStateChanged(offlineAsset: offlineAsset)
89
- notifyDownloadsChange()
105
+ notifyDownloadLifecycleEvent(name: "onDownloadStarted", asset: offlineAsset)
90
106
  }
91
107
  }
92
108
 
93
109
  func onComplete(offlineAsset: OfflineAsset) {
94
110
  if isListening {
95
- notifyDownloadStateChanged(offlineAsset: offlineAsset)
96
- notifyDownloadsChange()
111
+ notifyDownloadLifecycleEvent(name: "onDownloadCompleted", asset: offlineAsset)
97
112
  }
98
113
  }
99
114
 
100
115
  func onPause(offlineAsset: OfflineAsset) {
101
116
  if isListening {
102
- notifyDownloadStateChanged(offlineAsset: offlineAsset)
103
- notifyDownloadsChange()
117
+ notifyDownloadLifecycleEvent(name: "onDownloadPaused", asset: offlineAsset)
104
118
  }
105
119
  }
106
120
 
107
121
  func onResume(offlineAsset: OfflineAsset) {
108
122
  if isListening {
109
- notifyDownloadStateChanged(offlineAsset: offlineAsset)
110
- notifyDownloadsChange()
123
+ notifyDownloadLifecycleEvent(name: "onDownloadResumed", asset: offlineAsset)
111
124
  }
112
125
  }
113
126
 
114
127
  func onCanceled(assetId: String) {
115
128
  if isListening {
116
- if let offlineAsset = getOfflineAsset(assetId: assetId) {
117
- notifyDownloadStateChanged(offlineAsset: offlineAsset)
118
- }
119
- notifyDownloadsChange()
129
+ emitDeletedEvent(assetId: assetId)
120
130
  }
121
131
  }
122
132
 
123
- func onRequestNewAccessToken(assetId: String, completion: @escaping (String?) -> Void) {
124
- if let delegate = tokenDelegate {
125
- delegate.requestToken(for: assetId, completion: completion)
126
- } else {
127
- completion(nil)
128
- }
129
- }
130
-
131
- private func notifyDownloadsChange() {
132
- DispatchQueue.main.async { [weak self] in
133
- guard let self = self else { return }
134
- let downloadAssets = self.getAllDownloadItems()
135
- self.sendEvent(withName: "onDownloadProgressChanged", body: downloadAssets)
136
- }
133
+ private func notifyDownloadLifecycleEvent(name: String, asset: OfflineAsset, error: Error? = nil) {
134
+ emitSingleDownloadEvent(name: name, asset: asset, error: error)
135
+ emitSingleDownloadEvent(name: "onDownloadStateChanged", asset: asset, error: error)
136
+ notifyDownloadsChange()
137
137
  }
138
-
139
- private func notifyDownloadStateChanged(offlineAsset: OfflineAsset, error: Error? = nil) {
138
+
139
+ private func emitSingleDownloadEvent(name: String, asset: OfflineAsset, error: Error? = nil) {
140
140
  DispatchQueue.main.async { [weak self] in
141
141
  guard let self = self else { return }
142
142
 
143
- let downloadItem = self.mapOfflineAssetToDict(offlineAsset)
144
-
145
- var eventData: [String: Any] = [:]
146
- eventData["downloadItem"] = downloadItem
143
+ let downloadItem = self.mapOfflineAssetToDict(asset)
144
+ var eventData: [String: Any] = ["downloadItem": downloadItem]
147
145
 
148
146
  if let error = error {
149
147
  eventData["error"] = [
@@ -154,7 +152,29 @@ class TPStreamsDownloadModule: RCTEventEmitter, TPStreamsDownloadDelegate {
154
152
  eventData["error"] = NSNull()
155
153
  }
156
154
 
157
- self.sendEvent(withName: "onDownloadStateChanged", body: eventData)
155
+ self.sendEvent(withName: name, body: eventData)
156
+ }
157
+ }
158
+
159
+ private func emitDeletedEvent(assetId: String) {
160
+ let eventData: [String: Any] = ["videoId": assetId]
161
+ self.sendEvent(withName: "onDownloadDeleted", body: eventData)
162
+ notifyDownloadsChange()
163
+ }
164
+
165
+ func onRequestNewAccessToken(assetId: String, completion: @escaping (String?) -> Void) {
166
+ if let delegate = tokenDelegate {
167
+ delegate.requestToken(for: assetId, completion: completion)
168
+ } else {
169
+ completion(nil)
170
+ }
171
+ }
172
+
173
+ private func notifyDownloadsChange() {
174
+ DispatchQueue.main.async { [weak self] in
175
+ guard let self = self else { return }
176
+ let downloadAssets = self.getAllDownloadItems()
177
+ self.sendEvent(withName: "onDownloadProgressChanged", body: downloadAssets)
158
178
  }
159
179
  }
160
180
 
@@ -314,7 +334,16 @@ class TPStreamsDownloadModule: RCTEventEmitter, TPStreamsDownloadDelegate {
314
334
 
315
335
  @objc
316
336
  override func supportedEvents() -> [String] {
317
- return ["onDownloadProgressChanged", "onDownloadStateChanged"]
337
+ return [
338
+ "onDownloadProgressChanged",
339
+ "onDownloadStateChanged",
340
+ "onDownloadStarted",
341
+ "onDownloadPaused",
342
+ "onDownloadResumed",
343
+ "onDownloadCompleted",
344
+ "onDownloadFailed",
345
+ "onDownloadDeleted"
346
+ ]
318
347
  }
319
348
 
320
349
  @objc
@@ -5,6 +5,9 @@ const {
5
5
  TPStreamsDownload
6
6
  } = NativeModules;
7
7
  const downloadEventEmitter = new NativeEventEmitter(TPStreamsDownload);
8
+ export function startDownload(videoId, accessToken, resolution = null, metadata = null) {
9
+ return TPStreamsDownload.startDownload(videoId, accessToken, resolution, metadata);
10
+ }
8
11
  export function addDownloadProgressListener() {
9
12
  return TPStreamsDownload.addDownloadProgressListener();
10
13
  }
@@ -14,10 +17,21 @@ export function removeDownloadProgressListener() {
14
17
  export function onDownloadProgressChanged(listener) {
15
18
  return downloadEventEmitter.addListener('onDownloadProgressChanged', listener);
16
19
  }
17
- export function onDownloadStateChanged(listener) {
18
- return downloadEventEmitter.addListener('onDownloadStateChanged', event => {
20
+ const createDownloadStateListener = eventName => listener => {
21
+ return downloadEventEmitter.addListener(eventName, event => {
19
22
  listener(event.downloadItem, event.error);
20
23
  });
24
+ };
25
+ export const onDownloadStateChanged = createDownloadStateListener('onDownloadStateChanged');
26
+ export const onDownloadStarted = createDownloadStateListener('onDownloadStarted');
27
+ export const onDownloadPaused = createDownloadStateListener('onDownloadPaused');
28
+ export const onDownloadResumed = createDownloadStateListener('onDownloadResumed');
29
+ export const onDownloadCompleted = createDownloadStateListener('onDownloadCompleted');
30
+ export const onDownloadFailed = createDownloadStateListener('onDownloadFailed');
31
+ export function onDownloadDeleted(listener) {
32
+ return downloadEventEmitter.addListener('onDownloadDeleted', event => {
33
+ listener(event.videoId);
34
+ });
21
35
  }
22
36
  export function pauseDownload(videoId) {
23
37
  return TPStreamsDownload.pauseDownload(videoId);
@@ -1 +1 @@
1
- {"version":3,"names":["NativeModules","NativeEventEmitter","TPStreamsDownload","downloadEventEmitter","addDownloadProgressListener","removeDownloadProgressListener","onDownloadProgressChanged","listener","addListener","onDownloadStateChanged","event","downloadItem","error","pauseDownload","videoId","resumeDownload","removeDownload","isDownloaded","isDownloading","isPaused","getDownloadStatus","getAllDownloads"],"sourceRoot":"../../src","sources":["TPStreamsDownload.tsx"],"mappings":";;AAAA,SAASA,aAAa,EAAEC,kBAAkB,QAAQ,cAAc;AAGhE,MAAM;EAAEC;AAAkB,CAAC,GAAGF,aAAa;AA4B3C,MAAMG,oBAAoB,GAAG,IAAIF,kBAAkB,CAACC,iBAAiB,CAAC;AAEtE,OAAO,SAASE,2BAA2BA,CAAA,EAAkB;EAC3D,OAAOF,iBAAiB,CAACE,2BAA2B,CAAC,CAAC;AACxD;AAEA,OAAO,SAASC,8BAA8BA,CAAA,EAAkB;EAC9D,OAAOH,iBAAiB,CAACG,8BAA8B,CAAC,CAAC;AAC3D;AAEA,OAAO,SAASC,yBAAyBA,CACvCC,QAAkC,EACb;EACrB,OAAOJ,oBAAoB,CAACK,WAAW,CACrC,2BAA2B,EAC3BD,QACF,CAAC;AACH;AAEA,OAAO,SAASE,sBAAsBA,CACpCF,QAAqC,EAChB;EACrB,OAAOJ,oBAAoB,CAACK,WAAW,CAAC,wBAAwB,EAAGE,KAAK,IAAK;IAC3EH,QAAQ,CAACG,KAAK,CAACC,YAAY,EAAED,KAAK,CAACE,KAAK,CAAC;EAC3C,CAAC,CAAC;AACJ;AAEA,OAAO,SAASC,aAAaA,CAACC,OAAe,EAAiB;EAC5D,OAAOZ,iBAAiB,CAACW,aAAa,CAACC,OAAO,CAAC;AACjD;AAEA,OAAO,SAASC,cAAcA,CAACD,OAAe,EAAiB;EAC7D,OAAOZ,iBAAiB,CAACa,cAAc,CAACD,OAAO,CAAC;AAClD;AAEA,OAAO,SAASE,cAAcA,CAACF,OAAe,EAAiB;EAC7D,OAAOZ,iBAAiB,CAACc,cAAc,CAACF,OAAO,CAAC;AAClD;AAEA,OAAO,SAASG,YAAYA,CAACH,OAAe,EAAoB;EAC9D,OAAOZ,iBAAiB,CAACe,YAAY,CAACH,OAAO,CAAC;AAChD;AAEA,OAAO,SAASI,aAAaA,CAACJ,OAAe,EAAoB;EAC/D,OAAOZ,iBAAiB,CAACgB,aAAa,CAACJ,OAAO,CAAC;AACjD;AAEA,OAAO,SAASK,QAAQA,CAACL,OAAe,EAAoB;EAC1D,OAAOZ,iBAAiB,CAACiB,QAAQ,CAACL,OAAO,CAAC;AAC5C;AAEA,OAAO,SAASM,iBAAiBA,CAACN,OAAe,EAAmB;EAClE,OAAOZ,iBAAiB,CAACkB,iBAAiB,CAACN,OAAO,CAAC;AACrD;AAEA,OAAO,SAASO,eAAeA,CAAA,EAA4B;EACzD,OAAOnB,iBAAiB,CAACmB,eAAe,CAAC,CAAC;AAC5C","ignoreList":[]}
1
+ {"version":3,"names":["NativeModules","NativeEventEmitter","TPStreamsDownload","downloadEventEmitter","startDownload","videoId","accessToken","resolution","metadata","addDownloadProgressListener","removeDownloadProgressListener","onDownloadProgressChanged","listener","addListener","createDownloadStateListener","eventName","event","downloadItem","error","onDownloadStateChanged","onDownloadStarted","onDownloadPaused","onDownloadResumed","onDownloadCompleted","onDownloadFailed","onDownloadDeleted","pauseDownload","resumeDownload","removeDownload","isDownloaded","isDownloading","isPaused","getDownloadStatus","getAllDownloads"],"sourceRoot":"../../src","sources":["TPStreamsDownload.tsx"],"mappings":"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","ignoreList":[]}
@@ -7,7 +7,7 @@ export * from './TPStreamsPlayerViewNativeComponent';
7
7
 
8
8
  // Export the wrapper component as TPStreamsPlayerView
9
9
  export { default as TPStreamsPlayerView } from "./TPStreamsPlayer.js";
10
- export { pauseDownload, resumeDownload, removeDownload, isDownloaded, isDownloading, isPaused, getDownloadStatus, getAllDownloads, addDownloadProgressListener, removeDownloadProgressListener, onDownloadProgressChanged, onDownloadStateChanged } from "./TPStreamsDownload.js";
10
+ export { startDownload, pauseDownload, resumeDownload, removeDownload, isDownloaded, isDownloading, isPaused, getDownloadStatus, getAllDownloads, addDownloadProgressListener, removeDownloadProgressListener, onDownloadProgressChanged, onDownloadStateChanged, onDownloadStarted, onDownloadPaused, onDownloadResumed, onDownloadCompleted, onDownloadFailed, onDownloadDeleted } from "./TPStreamsDownload.js";
11
11
  const TPStreamsModule = NativeModules.TPStreams;
12
12
  export const TPStreams = {
13
13
  initialize: organizationId => {
@@ -1 +1 @@
1
- {"version":3,"names":["NativeModules","default","TPStreamsPlayerNative","TPStreamsPlayerView","pauseDownload","resumeDownload","removeDownload","isDownloaded","isDownloading","isPaused","getDownloadStatus","getAllDownloads","addDownloadProgressListener","removeDownloadProgressListener","onDownloadProgressChanged","onDownloadStateChanged","TPStreamsModule","TPStreams","initialize","organizationId","TPStreamsLiveChat"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,aAAa,QAAQ,cAAc;AAC5C;AACA,SAASC,OAAO,IAAIC,qBAAqB,QAAQ,sCAAsC;AACvF,cAAc,sCAAsC;;AAEpD;AACA,SAASD,OAAO,IAAIE,mBAAmB,QAAQ,sBAAmB;AAGlE,SACEC,aAAa,EACbC,cAAc,EACdC,cAAc,EACdC,YAAY,EACZC,aAAa,EACbC,QAAQ,EACRC,iBAAiB,EACjBC,eAAe,EACfC,2BAA2B,EAC3BC,8BAA8B,EAC9BC,yBAAyB,EACzBC,sBAAsB,QAKjB,wBAAqB;AAE5B,MAAMC,eAAe,GAAGhB,aAAa,CAACiB,SAAS;AAE/C,OAAO,MAAMA,SAAS,GAAG;EACvBC,UAAU,EAAGC,cAAsB,IAAW;IAC5CH,eAAe,CAACE,UAAU,CAACC,cAAc,CAAC;EAC5C;AACF,CAAC;AAED,SAASlB,OAAO,IAAImB,iBAAiB,QAAQ,wBAAqB","ignoreList":[]}
1
+ {"version":3,"names":["NativeModules","default","TPStreamsPlayerNative","TPStreamsPlayerView","startDownload","pauseDownload","resumeDownload","removeDownload","isDownloaded","isDownloading","isPaused","getDownloadStatus","getAllDownloads","addDownloadProgressListener","removeDownloadProgressListener","onDownloadProgressChanged","onDownloadStateChanged","onDownloadStarted","onDownloadPaused","onDownloadResumed","onDownloadCompleted","onDownloadFailed","onDownloadDeleted","TPStreamsModule","TPStreams","initialize","organizationId","TPStreamsLiveChat"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,aAAa,QAAQ,cAAc;AAC5C;AACA,SAASC,OAAO,IAAIC,qBAAqB,QAAQ,sCAAsC;AACvF,cAAc,sCAAsC;;AAEpD;AACA,SAASD,OAAO,IAAIE,mBAAmB,QAAQ,sBAAmB;AAGlE,SACEC,aAAa,EACbC,aAAa,EACbC,cAAc,EACdC,cAAc,EACdC,YAAY,EACZC,aAAa,EACbC,QAAQ,EACRC,iBAAiB,EACjBC,eAAe,EACfC,2BAA2B,EAC3BC,8BAA8B,EAC9BC,yBAAyB,EACzBC,sBAAsB,EACtBC,iBAAiB,EACjBC,gBAAgB,EAChBC,iBAAiB,EACjBC,mBAAmB,EACnBC,gBAAgB,EAChBC,iBAAiB,QAKZ,wBAAqB;AAE5B,MAAMC,eAAe,GAAGvB,aAAa,CAACwB,SAAS;AAE/C,OAAO,MAAMA,SAAS,GAAG;EACvBC,UAAU,EAAGC,cAAsB,IAAW;IAC5CH,eAAe,CAACE,UAAU,CAACC,cAAc,CAAC;EAC5C;AACF,CAAC;AAED,SAASzB,OAAO,IAAI0B,iBAAiB,QAAQ,wBAAqB","ignoreList":[]}
@@ -16,10 +16,17 @@ export interface DownloadError {
16
16
  type: string;
17
17
  }
18
18
  export type DownloadStateChangeListener = (downloadItem: DownloadItem, error: DownloadError | null) => void;
19
+ export declare function startDownload(videoId: string, accessToken: string, resolution?: string | null, metadata?: Record<string, any> | null): Promise<void>;
19
20
  export declare function addDownloadProgressListener(): Promise<void>;
20
21
  export declare function removeDownloadProgressListener(): Promise<void>;
21
22
  export declare function onDownloadProgressChanged(listener: DownloadProgressListener): EmitterSubscription;
22
- export declare function onDownloadStateChanged(listener: DownloadStateChangeListener): EmitterSubscription;
23
+ export declare const onDownloadStateChanged: (listener: DownloadStateChangeListener) => EmitterSubscription;
24
+ export declare const onDownloadStarted: (listener: DownloadStateChangeListener) => EmitterSubscription;
25
+ export declare const onDownloadPaused: (listener: DownloadStateChangeListener) => EmitterSubscription;
26
+ export declare const onDownloadResumed: (listener: DownloadStateChangeListener) => EmitterSubscription;
27
+ export declare const onDownloadCompleted: (listener: DownloadStateChangeListener) => EmitterSubscription;
28
+ export declare const onDownloadFailed: (listener: DownloadStateChangeListener) => EmitterSubscription;
29
+ export declare function onDownloadDeleted(listener: (videoId: string) => void): EmitterSubscription;
23
30
  export declare function pauseDownload(videoId: string): Promise<void>;
24
31
  export declare function resumeDownload(videoId: string): Promise<void>;
25
32
  export declare function removeDownload(videoId: string): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"TPStreamsDownload.d.ts","sourceRoot":"","sources":["../../../src/TPStreamsDownload.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAIxD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC/B;AAED,MAAM,MAAM,sBAAsB,GAAG,YAAY,CAAC;AAClD,MAAM,MAAM,wBAAwB,GAAG,CACrC,SAAS,EAAE,sBAAsB,EAAE,KAChC,IAAI,CAAC;AAEV,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,2BAA2B,GAAG,CACxC,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,aAAa,GAAG,IAAI,KACxB,IAAI,CAAC;AAIV,wBAAgB,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3D;AAED,wBAAgB,8BAA8B,IAAI,OAAO,CAAC,IAAI,CAAC,CAE9D;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,wBAAwB,GACjC,mBAAmB,CAKrB;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,2BAA2B,GACpC,mBAAmB,CAIrB;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5D;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7D;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7D;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAE9D;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAE/D;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAE1D;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAElE;AAED,wBAAgB,eAAe,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAEzD"}
1
+ {"version":3,"file":"TPStreamsDownload.d.ts","sourceRoot":"","sources":["../../../src/TPStreamsDownload.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAIxD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC/B;AAED,MAAM,MAAM,sBAAsB,GAAG,YAAY,CAAC;AAClD,MAAM,MAAM,wBAAwB,GAAG,CACrC,SAAS,EAAE,sBAAsB,EAAE,KAChC,IAAI,CAAC;AAEV,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,2BAA2B,GAAG,CACxC,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,aAAa,GAAG,IAAI,KACxB,IAAI,CAAC;AAIV,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,UAAU,GAAE,MAAM,GAAG,IAAW,EAChC,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAW,GAC1C,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAgB,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3D;AAED,wBAAgB,8BAA8B,IAAI,OAAO,CAAC,IAAI,CAAC,CAE9D;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,wBAAwB,GACjC,mBAAmB,CAKrB;AAUD,eAAO,MAAM,sBAAsB,aANtB,2BAA2B,KAAG,mBAQ1C,CAAC;AACF,eAAO,MAAM,iBAAiB,aATjB,2BAA2B,KAAG,mBAUO,CAAC;AACnD,eAAO,MAAM,gBAAgB,aAXhB,2BAA2B,KAAG,mBAWoC,CAAC;AAChF,eAAO,MAAM,iBAAiB,aAZjB,2BAA2B,KAAG,mBAaO,CAAC;AACnD,eAAO,MAAM,mBAAmB,aAdnB,2BAA2B,KAAG,mBAgB1C,CAAC;AACF,eAAO,MAAM,gBAAgB,aAjBhB,2BAA2B,KAAG,mBAiBoC,CAAC;AAEhF,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAClC,mBAAmB,CAIrB;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5D;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7D;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7D;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAE9D;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAE/D;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAE1D;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAElE;AAED,wBAAgB,eAAe,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAEzD"}
@@ -2,7 +2,7 @@ export { default as TPStreamsPlayerNative } from './TPStreamsPlayerViewNativeCom
2
2
  export * from './TPStreamsPlayerViewNativeComponent';
3
3
  export { default as TPStreamsPlayerView } from './TPStreamsPlayer';
4
4
  export type { TPStreamsPlayerRef } from './TPStreamsPlayer';
5
- export { pauseDownload, resumeDownload, removeDownload, isDownloaded, isDownloading, isPaused, getDownloadStatus, getAllDownloads, addDownloadProgressListener, removeDownloadProgressListener, onDownloadProgressChanged, onDownloadStateChanged, type DownloadItem, type DownloadProgressChange, type DownloadProgressListener, type DownloadStateChangeListener, } from './TPStreamsDownload';
5
+ export { startDownload, pauseDownload, resumeDownload, removeDownload, isDownloaded, isDownloading, isPaused, getDownloadStatus, getAllDownloads, addDownloadProgressListener, removeDownloadProgressListener, onDownloadProgressChanged, onDownloadStateChanged, onDownloadStarted, onDownloadPaused, onDownloadResumed, onDownloadCompleted, onDownloadFailed, onDownloadDeleted, type DownloadItem, type DownloadProgressChange, type DownloadProgressListener, type DownloadStateChangeListener, } from './TPStreamsDownload';
6
6
  export declare const TPStreams: {
7
7
  initialize: (organizationId: string) => void;
8
8
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AACxF,cAAc,sCAAsC,CAAC;AAGrD,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACnE,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EACL,aAAa,EACb,cAAc,EACd,cAAc,EACd,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,iBAAiB,EACjB,eAAe,EACf,2BAA2B,EAC3B,8BAA8B,EAC9B,yBAAyB,EACzB,sBAAsB,EACtB,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,2BAA2B,GACjC,MAAM,qBAAqB,CAAC;AAI7B,eAAO,MAAM,SAAS;iCACS,MAAM,KAAG,IAAI;CAG3C,CAAC;AAEF,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,YAAY,EACV,sBAAsB,EACtB,oBAAoB,EACpB,UAAU,EACV,cAAc,EACd,WAAW,GACZ,MAAM,gCAAgC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AACxF,cAAc,sCAAsC,CAAC;AAGrD,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACnE,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,cAAc,EACd,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,iBAAiB,EACjB,eAAe,EACf,2BAA2B,EAC3B,8BAA8B,EAC9B,yBAAyB,EACzB,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,2BAA2B,GACjC,MAAM,qBAAqB,CAAC;AAI7B,eAAO,MAAM,SAAS;iCACS,MAAM,KAAG,IAAI;CAG3C,CAAC;AAEF,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,YAAY,EACV,sBAAsB,EACtB,oBAAoB,EACpB,UAAU,EACV,cAAc,EACd,WAAW,GACZ,MAAM,gCAAgC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-tpstreams",
3
- "version": "1.1.9",
3
+ "version": "1.1.10",
4
4
  "description": "Video component for TPStreams",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -31,6 +31,20 @@ export type DownloadStateChangeListener = (
31
31
 
32
32
  const downloadEventEmitter = new NativeEventEmitter(TPStreamsDownload);
33
33
 
34
+ export function startDownload(
35
+ videoId: string,
36
+ accessToken: string,
37
+ resolution: string | null = null,
38
+ metadata: Record<string, any> | null = null
39
+ ): Promise<void> {
40
+ return TPStreamsDownload.startDownload(
41
+ videoId,
42
+ accessToken,
43
+ resolution,
44
+ metadata
45
+ );
46
+ }
47
+
34
48
  export function addDownloadProgressListener(): Promise<void> {
35
49
  return TPStreamsDownload.addDownloadProgressListener();
36
50
  }
@@ -48,11 +62,32 @@ export function onDownloadProgressChanged(
48
62
  );
49
63
  }
50
64
 
51
- export function onDownloadStateChanged(
52
- listener: DownloadStateChangeListener
65
+ const createDownloadStateListener =
66
+ (eventName: string) =>
67
+ (listener: DownloadStateChangeListener): EmitterSubscription => {
68
+ return downloadEventEmitter.addListener(eventName, (event) => {
69
+ listener(event.downloadItem, event.error);
70
+ });
71
+ };
72
+
73
+ export const onDownloadStateChanged = createDownloadStateListener(
74
+ 'onDownloadStateChanged'
75
+ );
76
+ export const onDownloadStarted =
77
+ createDownloadStateListener('onDownloadStarted');
78
+ export const onDownloadPaused = createDownloadStateListener('onDownloadPaused');
79
+ export const onDownloadResumed =
80
+ createDownloadStateListener('onDownloadResumed');
81
+ export const onDownloadCompleted = createDownloadStateListener(
82
+ 'onDownloadCompleted'
83
+ );
84
+ export const onDownloadFailed = createDownloadStateListener('onDownloadFailed');
85
+
86
+ export function onDownloadDeleted(
87
+ listener: (videoId: string) => void
53
88
  ): EmitterSubscription {
54
- return downloadEventEmitter.addListener('onDownloadStateChanged', (event) => {
55
- listener(event.downloadItem, event.error);
89
+ return downloadEventEmitter.addListener('onDownloadDeleted', (event) => {
90
+ listener(event.videoId);
56
91
  });
57
92
  }
58
93
 
package/src/index.tsx CHANGED
@@ -8,6 +8,7 @@ export { default as TPStreamsPlayerView } from './TPStreamsPlayer';
8
8
  export type { TPStreamsPlayerRef } from './TPStreamsPlayer';
9
9
 
10
10
  export {
11
+ startDownload,
11
12
  pauseDownload,
12
13
  resumeDownload,
13
14
  removeDownload,
@@ -20,6 +21,12 @@ export {
20
21
  removeDownloadProgressListener,
21
22
  onDownloadProgressChanged,
22
23
  onDownloadStateChanged,
24
+ onDownloadStarted,
25
+ onDownloadPaused,
26
+ onDownloadResumed,
27
+ onDownloadCompleted,
28
+ onDownloadFailed,
29
+ onDownloadDeleted,
23
30
  type DownloadItem,
24
31
  type DownloadProgressChange,
25
32
  type DownloadProgressListener,