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.
- package/TPStreamsRNPlayerView.podspec +1 -1
- package/android/gradle.properties +1 -1
- package/android/src/main/java/com/tpstreams/JsonUtils.kt +14 -1
- package/android/src/main/java/com/tpstreams/TPStreamsDownloadModule.kt +102 -15
- package/android/src/main/java/com/tpstreams/TPStreamsRNPlayerViewManager.kt +1 -14
- package/ios/TPStreamsDownloadModule.mm +7 -0
- package/ios/TPStreamsDownloadModule.swift +67 -38
- package/lib/module/TPStreamsDownload.js +16 -2
- package/lib/module/TPStreamsDownload.js.map +1 -1
- package/lib/module/index.js +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/TPStreamsDownload.d.ts +8 -1
- package/lib/typescript/src/TPStreamsDownload.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +1 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/TPStreamsDownload.tsx +39 -4
- package/src/index.tsx +7 -0
|
@@ -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.
|
|
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
|
|
@@ -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
|
-
|
|
84
|
-
|
|
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
|
-
|
|
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
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
117
|
-
notifyDownloadStateChanged(offlineAsset: offlineAsset)
|
|
118
|
-
}
|
|
119
|
-
notifyDownloadsChange()
|
|
129
|
+
emitDeletedEvent(assetId: assetId)
|
|
120
130
|
}
|
|
121
131
|
}
|
|
122
132
|
|
|
123
|
-
func
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
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
|
|
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(
|
|
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:
|
|
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 [
|
|
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
|
-
|
|
18
|
-
return downloadEventEmitter.addListener(
|
|
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","
|
|
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":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -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 => {
|
package/lib/module/index.js.map
CHANGED
|
@@ -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,
|
|
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
|
|
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;
|
|
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
|
@@ -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
|
-
|
|
52
|
-
|
|
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('
|
|
55
|
-
listener(event.
|
|
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,
|