react-native-tpstreams 1.0.2 → 1.0.3

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.
@@ -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.0.16
6
+ Tpstreams_tpstreamsAndroidPlayerVersion=1.0.17
@@ -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.WritableMap
9
10
  import com.facebook.react.modules.core.DeviceEventManagerModule
10
11
  import com.tpstreams.player.download.DownloadClient
11
12
  import com.tpstreams.player.download.DownloadItem
@@ -68,31 +69,56 @@ class TPStreamsDownloadModule(private val reactContext: ReactApplicationContext)
68
69
 
69
70
  val result = Arguments.createArray()
70
71
  for (item in currentDownloads) {
71
- val map = Arguments.createMap()
72
- map.putString("videoId", item.assetId)
73
- map.putString("title", item.title)
74
- item.thumbnailUrl?.let { map.putString("thumbnailUrl", it) }
75
- map.putDouble("totalBytes", item.totalBytes.toDouble())
76
- map.putDouble("downloadedBytes", item.downloadedBytes.toDouble())
77
- map.putDouble("progressPercentage", item.progressPercentage.toDouble())
78
- map.putString("state", downloadClient.getDownloadStatus(item.assetId))
79
-
80
- val metadataJson = org.json.JSONObject()
81
- item.metadata.forEach { (key, value) ->
82
- metadataJson.put(key, value)
83
- }
84
- map.putString("metadata", metadataJson.toString())
85
-
72
+ val map = createDownloadItemMap(item)
86
73
  result.pushMap(map)
87
74
  }
88
-
89
75
  emitEvent("onDownloadProgressChanged", result)
90
-
91
76
  } catch (e: Exception) {
92
77
  Log.e(TAG, "Error in onDownloadsChanged: ${e.message}", e)
93
78
  }
94
79
  }
95
80
 
81
+ 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")
94
+ }
95
+
96
+ emitEvent("onDownloadStateChanged", map)
97
+
98
+ } catch (e: Exception) {
99
+ Log.e(TAG, "Error in onDownloadStateChanged: ${e.message}", e)
100
+ }
101
+ }
102
+
103
+ private fun createDownloadItemMap(item: DownloadItem): WritableMap {
104
+ val map = Arguments.createMap()
105
+ map.putString("videoId", item.assetId)
106
+ map.putString("title", item.title)
107
+ item.thumbnailUrl?.let { map.putString("thumbnailUrl", it) }
108
+ map.putDouble("totalBytes", item.totalBytes.toDouble())
109
+ map.putDouble("downloadedBytes", item.downloadedBytes.toDouble())
110
+ map.putDouble("progressPercentage", item.progressPercentage.toDouble())
111
+ map.putString("state", downloadClient.getDownloadStatus(item.assetId))
112
+
113
+ val metadataJson = org.json.JSONObject()
114
+ item.metadata.forEach { (key, value) ->
115
+ metadataJson.put(key, value)
116
+ }
117
+ map.putString("metadata", metadataJson.toString())
118
+
119
+ return map
120
+ }
121
+
96
122
  private fun emitEvent(eventName: String, data: Any) {
97
123
  reactContext
98
124
  .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
@@ -183,23 +209,7 @@ class TPStreamsDownloadModule(private val reactContext: ReactApplicationContext)
183
209
  val result = Arguments.createArray()
184
210
 
185
211
  for (item in downloadItems) {
186
- val map = Arguments.createMap()
187
- map.putString("videoId", item.assetId)
188
- map.putString("title", item.title)
189
- item.thumbnailUrl?.let { map.putString("thumbnailUrl", it) }
190
- map.putDouble("totalBytes", item.totalBytes.toDouble())
191
- map.putDouble("downloadedBytes", item.downloadedBytes.toDouble())
192
- map.putDouble("progressPercentage", item.progressPercentage.toDouble())
193
- map.putString("state", downloadClient.getDownloadStatus(item.assetId))
194
-
195
- try {
196
- val metadataJson = org.json.JSONObject(item.metadata as Map<*, *>)
197
- map.putString("metadata", metadataJson.toString())
198
- } catch (e: Exception) {
199
- Log.w(TAG, "Error serializing metadata for item ${item.assetId}: ${e.message}")
200
- map.putString("metadata", "{}")
201
- }
202
-
212
+ val map = createDownloadItemMap(item)
203
213
  result.pushMap(map)
204
214
  }
205
215
 
@@ -3,11 +3,13 @@ import React
3
3
  import TPStreamsSDK
4
4
 
5
5
  private enum PlayerConstants {
6
- static let statusNotDownloaded = "NotDownloaded"
6
+ static let statusQueued = "Queued"
7
7
  static let statusDownloading = "Downloading"
8
8
  static let statusPaused = "Paused"
9
9
  static let statusCompleted = "Completed"
10
10
  static let statusFailed = "Failed"
11
+ static let statusRemoving = "Removing"
12
+ static let statusRestarting = "Restarting"
11
13
  static let statusUnknown = "Unknown"
12
14
  }
13
15
 
@@ -64,36 +66,46 @@ class TPStreamsDownloadModule: RCTEventEmitter, TPStreamsDownloadDelegate {
64
66
 
65
67
  func onDelete(assetId: String) {
66
68
  if isListening {
69
+ if let offlineAsset = getOfflineAsset(assetId: assetId) {
70
+ notifyDownloadStateChanged(offlineAsset: offlineAsset)
71
+ }
67
72
  notifyDownloadsChange()
68
73
  }
69
74
  }
70
75
 
71
76
  func onStart(offlineAsset: OfflineAsset) {
72
77
  if isListening {
78
+ notifyDownloadStateChanged(offlineAsset: offlineAsset)
73
79
  notifyDownloadsChange()
74
80
  }
75
81
  }
76
82
 
77
83
  func onComplete(offlineAsset: OfflineAsset) {
78
84
  if isListening {
85
+ notifyDownloadStateChanged(offlineAsset: offlineAsset)
79
86
  notifyDownloadsChange()
80
87
  }
81
88
  }
82
89
 
83
90
  func onPause(offlineAsset: OfflineAsset) {
84
91
  if isListening {
92
+ notifyDownloadStateChanged(offlineAsset: offlineAsset)
85
93
  notifyDownloadsChange()
86
94
  }
87
95
  }
88
96
 
89
97
  func onResume(offlineAsset: OfflineAsset) {
90
98
  if isListening {
99
+ notifyDownloadStateChanged(offlineAsset: offlineAsset)
91
100
  notifyDownloadsChange()
92
101
  }
93
102
  }
94
103
 
95
104
  func onCanceled(assetId: String) {
96
105
  if isListening {
106
+ if let offlineAsset = getOfflineAsset(assetId: assetId) {
107
+ notifyDownloadStateChanged(offlineAsset: offlineAsset)
108
+ }
97
109
  notifyDownloadsChange()
98
110
  }
99
111
  }
@@ -114,6 +126,28 @@ class TPStreamsDownloadModule: RCTEventEmitter, TPStreamsDownloadDelegate {
114
126
  }
115
127
  }
116
128
 
129
+ private func notifyDownloadStateChanged(offlineAsset: OfflineAsset, error: Error? = nil) {
130
+ DispatchQueue.main.async { [weak self] in
131
+ guard let self = self else { return }
132
+
133
+ let downloadItem = self.mapOfflineAssetToDict(offlineAsset)
134
+
135
+ var eventData: [String: Any] = [:]
136
+ eventData["downloadItem"] = downloadItem
137
+
138
+ if let error = error {
139
+ eventData["error"] = [
140
+ "message": error.localizedDescription,
141
+ "type": String(describing: type(of: error))
142
+ ]
143
+ } else {
144
+ eventData["error"] = NSNull()
145
+ }
146
+
147
+ self.sendEvent(withName: "onDownloadStateChanged", body: eventData)
148
+ }
149
+ }
150
+
117
151
  private func getAllDownloadItems() -> [[String: Any]] {
118
152
  let offlineAssets = downloadManager.getAllOfflineAssets()
119
153
  return offlineAssets.map { mapOfflineAssetToDict($0) }
@@ -230,7 +264,7 @@ class TPStreamsDownloadModule: RCTEventEmitter, TPStreamsDownloadDelegate {
230
264
  if let asset = offlineAssets.first(where: { $0.assetId == videoId }) {
231
265
  resolve(mapDownloadStatus(Status(rawValue: asset.status)))
232
266
  } else {
233
- resolve(PlayerConstants.statusNotDownloaded)
267
+ resolve(PlayerConstants.statusUnknown)
234
268
  }
235
269
  }
236
270
  }
@@ -260,13 +294,17 @@ class TPStreamsDownloadModule: RCTEventEmitter, TPStreamsDownloadDelegate {
260
294
  case .failed:
261
295
  return PlayerConstants.statusFailed
262
296
  default:
263
- return PlayerConstants.statusNotDownloaded
297
+ return PlayerConstants.statusUnknown
264
298
  }
265
299
  }
266
300
 
301
+ private func getOfflineAsset(assetId: String) -> OfflineAsset? {
302
+ return downloadManager.getAllOfflineAssets().first(where: { $0.assetId == assetId })
303
+ }
304
+
267
305
  @objc
268
306
  override func supportedEvents() -> [String] {
269
- return ["onDownloadProgressChanged"]
307
+ return ["onDownloadProgressChanged", "onDownloadStateChanged"]
270
308
  }
271
309
 
272
310
  @objc
@@ -14,6 +14,11 @@ export function removeDownloadProgressListener() {
14
14
  export function onDownloadProgressChanged(listener) {
15
15
  return downloadEventEmitter.addListener('onDownloadProgressChanged', listener);
16
16
  }
17
+ export function onDownloadStateChanged(listener) {
18
+ return downloadEventEmitter.addListener('onDownloadStateChanged', event => {
19
+ listener(event.downloadItem, event.error);
20
+ });
21
+ }
17
22
  export function pauseDownload(videoId) {
18
23
  return TPStreamsDownload.pauseDownload(videoId);
19
24
  }
@@ -1 +1 @@
1
- {"version":3,"names":["NativeModules","NativeEventEmitter","TPStreamsDownload","downloadEventEmitter","addDownloadProgressListener","removeDownloadProgressListener","onDownloadProgressChanged","listener","addListener","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;AAkB3C,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,aAAaA,CAACC,OAAe,EAAiB;EAC5D,OAAOR,iBAAiB,CAACO,aAAa,CAACC,OAAO,CAAC;AACjD;AAEA,OAAO,SAASC,cAAcA,CAACD,OAAe,EAAiB;EAC7D,OAAOR,iBAAiB,CAACS,cAAc,CAACD,OAAO,CAAC;AAClD;AAEA,OAAO,SAASE,cAAcA,CAACF,OAAe,EAAiB;EAC7D,OAAOR,iBAAiB,CAACU,cAAc,CAACF,OAAO,CAAC;AAClD;AAEA,OAAO,SAASG,YAAYA,CAACH,OAAe,EAAoB;EAC9D,OAAOR,iBAAiB,CAACW,YAAY,CAACH,OAAO,CAAC;AAChD;AAEA,OAAO,SAASI,aAAaA,CAACJ,OAAe,EAAoB;EAC/D,OAAOR,iBAAiB,CAACY,aAAa,CAACJ,OAAO,CAAC;AACjD;AAEA,OAAO,SAASK,QAAQA,CAACL,OAAe,EAAoB;EAC1D,OAAOR,iBAAiB,CAACa,QAAQ,CAACL,OAAO,CAAC;AAC5C;AAEA,OAAO,SAASM,iBAAiBA,CAACN,OAAe,EAAmB;EAClE,OAAOR,iBAAiB,CAACc,iBAAiB,CAACN,OAAO,CAAC;AACrD;AAEA,OAAO,SAASO,eAAeA,CAAA,EAA4B;EACzD,OAAOf,iBAAiB,CAACe,eAAe,CAAC,CAAC;AAC5C","ignoreList":[]}
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":[]}
@@ -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 } from "./TPStreamsDownload.js";
10
+ export { pauseDownload, resumeDownload, removeDownload, isDownloaded, isDownloading, isPaused, getDownloadStatus, getAllDownloads, addDownloadProgressListener, removeDownloadProgressListener, onDownloadProgressChanged, onDownloadStateChanged } 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","TPStreamsModule","TPStreams","initialize","organizationId"],"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,QAIpB,wBAAqB;AAE5B,MAAMC,eAAe,GAAGf,aAAa,CAACgB,SAAS;AAE/C,OAAO,MAAMA,SAAS,GAAG;EACvBC,UAAU,EAAGC,cAAsB,IAAW;IAC5CH,eAAe,CAACE,UAAU,CAACC,cAAc,CAAC;EAC5C;AACF,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["NativeModules","default","TPStreamsPlayerNative","TPStreamsPlayerView","pauseDownload","resumeDownload","removeDownload","isDownloaded","isDownloading","isPaused","getDownloadStatus","getAllDownloads","addDownloadProgressListener","removeDownloadProgressListener","onDownloadProgressChanged","onDownloadStateChanged","TPStreamsModule","TPStreams","initialize","organizationId"],"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","ignoreList":[]}
@@ -11,9 +11,15 @@ export interface DownloadItem {
11
11
  }
12
12
  export type DownloadProgressChange = DownloadItem;
13
13
  export type DownloadProgressListener = (downloads: DownloadProgressChange[]) => void;
14
+ export interface DownloadError {
15
+ message: string;
16
+ type: string;
17
+ }
18
+ export type DownloadStateChangeListener = (downloadItem: DownloadItem, error: DownloadError | null) => void;
14
19
  export declare function addDownloadProgressListener(): Promise<void>;
15
20
  export declare function removeDownloadProgressListener(): Promise<void>;
16
21
  export declare function onDownloadProgressChanged(listener: DownloadProgressListener): EmitterSubscription;
22
+ export declare function onDownloadStateChanged(listener: DownloadStateChangeListener): EmitterSubscription;
17
23
  export declare function pauseDownload(videoId: string): Promise<void>;
18
24
  export declare function resumeDownload(videoId: string): Promise<void>;
19
25
  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;CAClB;AAED,MAAM,MAAM,sBAAsB,GAAG,YAAY,CAAC;AAClD,MAAM,MAAM,wBAAwB,GAAG,CACrC,SAAS,EAAE,sBAAsB,EAAE,KAChC,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,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;CAClB;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"}
@@ -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, type DownloadItem, type DownloadProgressChange, type DownloadProgressListener, } from './TPStreamsDownload';
5
+ export { pauseDownload, resumeDownload, removeDownload, isDownloaded, isDownloading, isPaused, getDownloadStatus, getAllDownloads, addDownloadProgressListener, removeDownloadProgressListener, onDownloadProgressChanged, onDownloadStateChanged, 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,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,GAC9B,MAAM,qBAAqB,CAAC;AAI7B,eAAO,MAAM,SAAS;iCACS,MAAM,KAAG,IAAI;CAG3C,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,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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-tpstreams",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "Video component for TPStreams",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -19,6 +19,16 @@ export type DownloadProgressListener = (
19
19
  downloads: DownloadProgressChange[]
20
20
  ) => void;
21
21
 
22
+ export interface DownloadError {
23
+ message: string;
24
+ type: string;
25
+ }
26
+
27
+ export type DownloadStateChangeListener = (
28
+ downloadItem: DownloadItem,
29
+ error: DownloadError | null
30
+ ) => void;
31
+
22
32
  const downloadEventEmitter = new NativeEventEmitter(TPStreamsDownload);
23
33
 
24
34
  export function addDownloadProgressListener(): Promise<void> {
@@ -38,6 +48,14 @@ export function onDownloadProgressChanged(
38
48
  );
39
49
  }
40
50
 
51
+ export function onDownloadStateChanged(
52
+ listener: DownloadStateChangeListener
53
+ ): EmitterSubscription {
54
+ return downloadEventEmitter.addListener('onDownloadStateChanged', (event) => {
55
+ listener(event.downloadItem, event.error);
56
+ });
57
+ }
58
+
41
59
  export function pauseDownload(videoId: string): Promise<void> {
42
60
  return TPStreamsDownload.pauseDownload(videoId);
43
61
  }
package/src/index.tsx CHANGED
@@ -19,9 +19,11 @@ export {
19
19
  addDownloadProgressListener,
20
20
  removeDownloadProgressListener,
21
21
  onDownloadProgressChanged,
22
+ onDownloadStateChanged,
22
23
  type DownloadItem,
23
24
  type DownloadProgressChange,
24
25
  type DownloadProgressListener,
26
+ type DownloadStateChangeListener,
25
27
  } from './TPStreamsDownload';
26
28
 
27
29
  const TPStreamsModule = NativeModules.TPStreams;