react-native-tpstreams 1.0.3-debug.11 → 1.0.3-debug.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -8
- package/TPStreamsRNPlayerView.podspec +1 -1
- package/android/src/main/java/com/tpstreams/TPStreamsDownloadModule.kt +7 -2
- package/android/src/main/java/com/tpstreams/TPStreamsRNPlayerView.kt +3 -3
- package/ios/TPStreamsDownloadModule.swift +30 -18
- package/ios/TPStreamsModule.swift +4 -1
- package/ios/TPStreamsRNPlayerView.swift +2 -2
- package/lib/module/TPStreamsDownload.js +4 -0
- package/lib/module/TPStreamsDownload.js.map +1 -1
- package/lib/typescript/src/TPStreamsDownload.d.ts +1 -1
- package/lib/typescript/src/TPStreamsDownload.d.ts.map +1 -1
- package/lib/typescript/src/TPStreamsPlayer.d.ts +1 -1
- package/lib/typescript/src/TPStreamsPlayer.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/TPStreamsDownload.tsx +5 -1
- package/src/TPStreamsPlayer.tsx +1 -1
- package/android/src/main/java/com/tpstreams/JsonUtils.kt +0 -46
package/README.md
CHANGED
|
@@ -41,14 +41,14 @@ import { TPStreamsPlayerView } from "react-native-tpstreams";
|
|
|
41
41
|
|
|
42
42
|
| Prop | Type | Required | Description |
|
|
43
43
|
|------|------|----------|-------------|
|
|
44
|
-
| `videoId` | `string` |
|
|
45
|
-
| `accessToken` | `string` |
|
|
46
|
-
| `startAt` | `number` |
|
|
47
|
-
| `shouldAutoPlay` | `boolean` |
|
|
48
|
-
| `showDefaultCaptions` | `boolean` |
|
|
49
|
-
| `enableDownload` | `boolean` |
|
|
50
|
-
| `offlineLicenseExpireTime` | `number` |
|
|
51
|
-
| `downloadMetadata` | `object` |
|
|
44
|
+
| `videoId` | `string` | ✅ | Video ID to play |
|
|
45
|
+
| `accessToken` | `string` | ✅ | Access token for the video |
|
|
46
|
+
| `startAt` | `number` | ❌ | Start position in seconds (default: 0) |
|
|
47
|
+
| `shouldAutoPlay` | `boolean` | ❌ | Auto-play on load (default: true) |
|
|
48
|
+
| `showDefaultCaptions` | `boolean` | ❌ | Show captions if available (default: false) |
|
|
49
|
+
| `enableDownload` | `boolean` | ❌ | Enable download functionality (default: false) |
|
|
50
|
+
| `offlineLicenseExpireTime` | `number` | ❌ | License expiration in seconds (default: 15 days) |
|
|
51
|
+
| `downloadMetadata` | `object` | ❌ | Custom metadata for downloads |
|
|
52
52
|
|
|
53
53
|
### Player Methods
|
|
54
54
|
|
|
@@ -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.8"
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
# Ensure the module is not built as a framework to avoid bridging header conflicts
|
|
@@ -109,8 +109,13 @@ class TPStreamsDownloadModule(private val reactContext: ReactApplicationContext)
|
|
|
109
109
|
map.putDouble("downloadedBytes", item.downloadedBytes.toDouble())
|
|
110
110
|
map.putDouble("progressPercentage", item.progressPercentage.toDouble())
|
|
111
111
|
map.putString("state", downloadClient.getDownloadStatus(item.assetId))
|
|
112
|
-
|
|
113
|
-
|
|
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
|
+
|
|
114
119
|
return map
|
|
115
120
|
}
|
|
116
121
|
|
|
@@ -30,7 +30,7 @@ class TPStreamsRNPlayerView(context: ThemedReactContext) : FrameLayout(context)
|
|
|
30
30
|
private var startAt: Long = 0
|
|
31
31
|
private var showDefaultCaptions: Boolean = false
|
|
32
32
|
private var enableDownload: Boolean = false
|
|
33
|
-
private var downloadMetadata: Map<String,
|
|
33
|
+
private var downloadMetadata: Map<String, String>? = null
|
|
34
34
|
private var offlineLicenseExpireTime: Long = DEFAULT_OFFLINE_LICENSE_EXPIRE_TIME
|
|
35
35
|
private var accessTokenCallback: ((String) -> Unit)? = null
|
|
36
36
|
|
|
@@ -87,7 +87,7 @@ class TPStreamsRNPlayerView(context: ThemedReactContext) : FrameLayout(context)
|
|
|
87
87
|
this.enableDownload = enableDownload
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
-
fun setDownloadMetadata(metadata: Map<String,
|
|
90
|
+
fun setDownloadMetadata(metadata: Map<String, String>?) {
|
|
91
91
|
this.downloadMetadata = metadata
|
|
92
92
|
}
|
|
93
93
|
|
|
@@ -116,7 +116,7 @@ class TPStreamsRNPlayerView(context: ThemedReactContext) : FrameLayout(context)
|
|
|
116
116
|
startAt,
|
|
117
117
|
enableDownload,
|
|
118
118
|
showDefaultCaptions,
|
|
119
|
-
downloadMetadata
|
|
119
|
+
downloadMetadata,
|
|
120
120
|
offlineLicenseExpireTime
|
|
121
121
|
)
|
|
122
122
|
|
|
@@ -23,16 +23,14 @@ class TPStreamsDownloadModule: RCTEventEmitter, TPStreamsDownloadDelegate {
|
|
|
23
23
|
private let downloadManager = TPStreamsDownloadManager.shared
|
|
24
24
|
private var isListening = false
|
|
25
25
|
private var tokenDelegate: TokenRequestDelegate?
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
static var shared: TPStreamsDownloadModule? {
|
|
29
|
-
return _shared
|
|
30
|
-
}
|
|
31
|
-
|
|
26
|
+
static var shared: TPStreamsDownloadModule?
|
|
27
|
+
|
|
32
28
|
override init() {
|
|
33
29
|
super.init()
|
|
34
|
-
TPStreamsDownloadModule._shared = self
|
|
35
30
|
downloadManager.setTPStreamsDownloadDelegate(tpStreamsDownloadDelegate: self)
|
|
31
|
+
TPStreamsDownloadModule.shared = self
|
|
32
|
+
print("TPStreamsDownloadModule initialized")
|
|
33
|
+
print("Downloadmanager delegates are set")
|
|
36
34
|
}
|
|
37
35
|
|
|
38
36
|
func setAccessTokenDelegate(_ delegate: TokenRequestDelegate) {
|
|
@@ -46,71 +44,81 @@ class TPStreamsDownloadModule: RCTEventEmitter, TPStreamsDownloadDelegate {
|
|
|
46
44
|
|
|
47
45
|
@objc
|
|
48
46
|
func addDownloadProgressListener(_ resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
47
|
+
print("DownloadModule: adding download progress listener")
|
|
49
48
|
isListening = true
|
|
50
|
-
notifyDownloadsChange()
|
|
51
49
|
resolve(nil)
|
|
52
50
|
}
|
|
53
51
|
|
|
54
52
|
@objc
|
|
55
53
|
func removeDownloadProgressListener(_ resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
54
|
+
print("DownloadModule: removing download progress listener")
|
|
56
55
|
isListening = false
|
|
57
56
|
resolve(nil)
|
|
58
57
|
}
|
|
59
58
|
|
|
60
59
|
func onProgressChange(assetId: String, percentage: Double) {
|
|
60
|
+
print("DownloadModule:Download Progress Changed")
|
|
61
61
|
if isListening {
|
|
62
62
|
notifyDownloadsChange()
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
func onStateChange(status: Status, offlineAsset: OfflineAsset) {
|
|
67
|
+
print("DownloadModule: Download State Changed")
|
|
67
68
|
if isListening {
|
|
68
69
|
notifyDownloadsChange()
|
|
69
70
|
}
|
|
70
71
|
}
|
|
71
72
|
|
|
72
73
|
func onDelete(assetId: String) {
|
|
74
|
+
print("DownloadModule: Download Deleted")
|
|
73
75
|
if isListening {
|
|
74
|
-
if let offlineAsset = getOfflineAsset(assetId: assetId) {
|
|
75
|
-
|
|
76
|
-
}
|
|
76
|
+
// if let offlineAsset = getOfflineAsset(assetId: assetId) {
|
|
77
|
+
// notifyDownloadStateChanged(offlineAsset: offlineAsset)
|
|
78
|
+
// }
|
|
77
79
|
notifyDownloadsChange()
|
|
78
80
|
}
|
|
79
81
|
}
|
|
80
82
|
|
|
81
83
|
func onStart(offlineAsset: OfflineAsset) {
|
|
84
|
+
print("DownloadModule: Download Started")
|
|
85
|
+
print("DownloadModule: is Download Progress Listening: \(isListening)")
|
|
82
86
|
if isListening {
|
|
83
|
-
notifyDownloadStateChanged(offlineAsset: offlineAsset)
|
|
87
|
+
// notifyDownloadStateChanged(offlineAsset: offlineAsset)
|
|
84
88
|
notifyDownloadsChange()
|
|
85
89
|
}
|
|
86
90
|
}
|
|
87
91
|
|
|
88
92
|
func onComplete(offlineAsset: OfflineAsset) {
|
|
93
|
+
print("DownloadModule: Download Completed")
|
|
89
94
|
if isListening {
|
|
90
|
-
notifyDownloadStateChanged(offlineAsset: offlineAsset)
|
|
95
|
+
// notifyDownloadStateChanged(offlineAsset: offlineAsset)
|
|
91
96
|
notifyDownloadsChange()
|
|
92
97
|
}
|
|
93
98
|
}
|
|
94
99
|
|
|
95
100
|
func onPause(offlineAsset: OfflineAsset) {
|
|
101
|
+
print("DownloadModule: Download Paused")
|
|
96
102
|
if isListening {
|
|
97
|
-
notifyDownloadStateChanged(offlineAsset: offlineAsset)
|
|
103
|
+
// notifyDownloadStateChanged(offlineAsset: offlineAsset)
|
|
98
104
|
notifyDownloadsChange()
|
|
99
105
|
}
|
|
100
106
|
}
|
|
101
107
|
|
|
102
108
|
func onResume(offlineAsset: OfflineAsset) {
|
|
109
|
+
print("DownloadModule: Download Resumed")
|
|
103
110
|
if isListening {
|
|
104
|
-
notifyDownloadStateChanged(offlineAsset: offlineAsset)
|
|
111
|
+
// notifyDownloadStateChanged(offlineAsset: offlineAsset)
|
|
105
112
|
notifyDownloadsChange()
|
|
106
113
|
}
|
|
107
114
|
}
|
|
108
115
|
|
|
109
116
|
func onCanceled(assetId: String) {
|
|
117
|
+
print("DownloadModule: Download Canceled")
|
|
110
118
|
if isListening {
|
|
111
|
-
if let offlineAsset = getOfflineAsset(assetId: assetId) {
|
|
112
|
-
|
|
113
|
-
}
|
|
119
|
+
// if let offlineAsset = getOfflineAsset(assetId: assetId) {
|
|
120
|
+
// notifyDownloadStateChanged(offlineAsset: offlineAsset)
|
|
121
|
+
// }
|
|
114
122
|
notifyDownloadsChange()
|
|
115
123
|
}
|
|
116
124
|
}
|
|
@@ -124,10 +132,12 @@ class TPStreamsDownloadModule: RCTEventEmitter, TPStreamsDownloadDelegate {
|
|
|
124
132
|
}
|
|
125
133
|
|
|
126
134
|
private func notifyDownloadsChange() {
|
|
135
|
+
print("DownloadModule: Notifying downloads change to js")
|
|
127
136
|
DispatchQueue.main.async { [weak self] in
|
|
128
137
|
guard let self = self else { return }
|
|
129
138
|
let downloadAssets = self.getAllDownloadItems()
|
|
130
139
|
self.sendEvent(withName: "onDownloadProgressChanged", body: downloadAssets)
|
|
140
|
+
print("DownloadModule: Notified (emitted) downloads change event to js")
|
|
131
141
|
}
|
|
132
142
|
}
|
|
133
143
|
|
|
@@ -314,11 +324,13 @@ class TPStreamsDownloadModule: RCTEventEmitter, TPStreamsDownloadDelegate {
|
|
|
314
324
|
|
|
315
325
|
@objc
|
|
316
326
|
override func addListener(_ eventName: String) {
|
|
327
|
+
print("adding listener: \(eventName)")
|
|
317
328
|
super.addListener(eventName)
|
|
318
329
|
}
|
|
319
330
|
|
|
320
331
|
@objc
|
|
321
332
|
override func removeListeners(_ count: Double) {
|
|
333
|
+
print("removing listener: \(count)")
|
|
322
334
|
super.removeListeners(count)
|
|
323
335
|
|
|
324
336
|
if count >= 1 && isListening {
|
|
@@ -9,6 +9,7 @@ class TPStreamsModule: NSObject {
|
|
|
9
9
|
|
|
10
10
|
@objc func initialize(_ organizationId: NSString) {
|
|
11
11
|
if !isInitialized {
|
|
12
|
+
print("Initializing TPStreamsSDK with org code: \(organizationId)")
|
|
12
13
|
DispatchQueue.main.async {
|
|
13
14
|
TPStreamsSDK.initialize(withOrgCode: organizationId as String)
|
|
14
15
|
self.isInitialized = true
|
|
@@ -18,7 +19,9 @@ class TPStreamsModule: NSObject {
|
|
|
18
19
|
}
|
|
19
20
|
|
|
20
21
|
private func initializeDownloadModule() {
|
|
21
|
-
|
|
22
|
+
print("Initializing TPStreamsDownloadModule")
|
|
23
|
+
let _ = TPStreamsDownloadModule()
|
|
24
|
+
print("Intitalized TPStreamsDownloadModule")
|
|
22
25
|
}
|
|
23
26
|
|
|
24
27
|
@objc
|
|
@@ -184,12 +184,12 @@ class TPStreamsRNPlayerView: UIView {
|
|
|
184
184
|
TPStreamsDownloadModule.shared?.setAccessTokenDelegate(self)
|
|
185
185
|
}
|
|
186
186
|
|
|
187
|
-
private func parseMetadataJSON(from jsonString: NSString?) -> [String:
|
|
187
|
+
private func parseMetadataJSON(from jsonString: NSString?) -> [String: String]? {
|
|
188
188
|
guard let metadataString = jsonString as String? else { return nil }
|
|
189
189
|
|
|
190
190
|
guard let data = metadataString.data(using: .utf8) else { return nil }
|
|
191
191
|
do {
|
|
192
|
-
if let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String:
|
|
192
|
+
if let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: String] {
|
|
193
193
|
return json
|
|
194
194
|
}
|
|
195
195
|
} catch {
|
|
@@ -6,15 +6,19 @@ const {
|
|
|
6
6
|
} = NativeModules;
|
|
7
7
|
const downloadEventEmitter = new NativeEventEmitter(TPStreamsDownload);
|
|
8
8
|
export function addDownloadProgressListener() {
|
|
9
|
+
console.log('RN TPStreamsDownload: addDownloadProgressListener');
|
|
9
10
|
return TPStreamsDownload.addDownloadProgressListener();
|
|
10
11
|
}
|
|
11
12
|
export function removeDownloadProgressListener() {
|
|
13
|
+
console.log('RN TPStreamsDownload: removeDownloadProgressListener');
|
|
12
14
|
return TPStreamsDownload.removeDownloadProgressListener();
|
|
13
15
|
}
|
|
14
16
|
export function onDownloadProgressChanged(listener) {
|
|
17
|
+
console.log('RN TPStreamsDownload: onDownloadProgressChanged');
|
|
15
18
|
return downloadEventEmitter.addListener('onDownloadProgressChanged', listener);
|
|
16
19
|
}
|
|
17
20
|
export function onDownloadStateChanged(listener) {
|
|
21
|
+
console.log('RN TPStreamsDownload: onDownloadStateChanged');
|
|
18
22
|
return downloadEventEmitter.addListener('onDownloadStateChanged', event => {
|
|
19
23
|
listener(event.downloadItem, event.error);
|
|
20
24
|
});
|
|
@@ -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;
|
|
1
|
+
{"version":3,"names":["NativeModules","NativeEventEmitter","TPStreamsDownload","downloadEventEmitter","addDownloadProgressListener","console","log","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;EAC3DC,OAAO,CAACC,GAAG,CAAC,mDAAmD,CAAC;EAChE,OAAOJ,iBAAiB,CAACE,2BAA2B,CAAC,CAAC;AACxD;AAEA,OAAO,SAASG,8BAA8BA,CAAA,EAAkB;EAC9DF,OAAO,CAACC,GAAG,CAAC,sDAAsD,CAAC;EACnE,OAAOJ,iBAAiB,CAACK,8BAA8B,CAAC,CAAC;AAC3D;AAEA,OAAO,SAASC,yBAAyBA,CACvCC,QAAkC,EACb;EACrBJ,OAAO,CAACC,GAAG,CAAC,iDAAiD,CAAC;EAC9D,OAAOH,oBAAoB,CAACO,WAAW,CACrC,2BAA2B,EAC3BD,QACF,CAAC;AACH;AAEA,OAAO,SAASE,sBAAsBA,CACpCF,QAAqC,EAChB;EACrBJ,OAAO,CAACC,GAAG,CAAC,8CAA8C,CAAC;EAC3D,OAAOH,oBAAoB,CAACO,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,OAAOd,iBAAiB,CAACa,aAAa,CAACC,OAAO,CAAC;AACjD;AAEA,OAAO,SAASC,cAAcA,CAACD,OAAe,EAAiB;EAC7D,OAAOd,iBAAiB,CAACe,cAAc,CAACD,OAAO,CAAC;AAClD;AAEA,OAAO,SAASE,cAAcA,CAACF,OAAe,EAAiB;EAC7D,OAAOd,iBAAiB,CAACgB,cAAc,CAACF,OAAO,CAAC;AAClD;AAEA,OAAO,SAASG,YAAYA,CAACH,OAAe,EAAoB;EAC9D,OAAOd,iBAAiB,CAACiB,YAAY,CAACH,OAAO,CAAC;AAChD;AAEA,OAAO,SAASI,aAAaA,CAACJ,OAAe,EAAoB;EAC/D,OAAOd,iBAAiB,CAACkB,aAAa,CAACJ,OAAO,CAAC;AACjD;AAEA,OAAO,SAASK,QAAQA,CAACL,OAAe,EAAoB;EAC1D,OAAOd,iBAAiB,CAACmB,QAAQ,CAACL,OAAO,CAAC;AAC5C;AAEA,OAAO,SAASM,iBAAiBA,CAACN,OAAe,EAAmB;EAClE,OAAOd,iBAAiB,CAACoB,iBAAiB,CAACN,OAAO,CAAC;AACrD;AAEA,OAAO,SAASO,eAAeA,CAAA,EAA4B;EACzD,OAAOrB,iBAAiB,CAACqB,eAAe,CAAC,CAAC;AAC5C","ignoreList":[]}
|
|
@@ -7,7 +7,7 @@ export interface DownloadItem {
|
|
|
7
7
|
downloadedBytes: number;
|
|
8
8
|
progressPercentage: number;
|
|
9
9
|
state: string;
|
|
10
|
-
metadata:
|
|
10
|
+
metadata: string;
|
|
11
11
|
}
|
|
12
12
|
export type DownloadProgressChange = DownloadItem;
|
|
13
13
|
export type DownloadProgressListener = (downloads: DownloadProgressChange[]) => 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
|
|
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,CAG3D;AAED,wBAAgB,8BAA8B,IAAI,OAAO,CAAC,IAAI,CAAC,CAG9D;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,wBAAwB,GACjC,mBAAmB,CAMrB;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,2BAA2B,GACpC,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"}
|
|
@@ -19,7 +19,7 @@ export interface TPStreamsPlayerProps extends ViewProps {
|
|
|
19
19
|
offlineLicenseExpireTime?: number;
|
|
20
20
|
showDefaultCaptions?: boolean;
|
|
21
21
|
downloadMetadata?: {
|
|
22
|
-
[key: string]:
|
|
22
|
+
[key: string]: string;
|
|
23
23
|
};
|
|
24
24
|
onPlayerStateChanged?: (state: number) => void;
|
|
25
25
|
onIsPlayingChanged?: (isPlaying: boolean) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TPStreamsPlayer.d.ts","sourceRoot":"","sources":["../../../src/TPStreamsPlayer.tsx"],"names":[],"mappings":";AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAc9C,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,MAAM,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,kBAAkB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,WAAW,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,SAAS,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,gBAAgB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CACzC;AAGD,MAAM,WAAW,oBAAqB,SAAQ,SAAS;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,gBAAgB,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"TPStreamsPlayer.d.ts","sourceRoot":"","sources":["../../../src/TPStreamsPlayer.tsx"],"names":[],"mappings":";AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAc9C,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,MAAM,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,kBAAkB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,WAAW,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,SAAS,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,gBAAgB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CACzC;AAGD,MAAM,WAAW,oBAAqB,SAAQ,SAAS;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,gBAAgB,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAC7C,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,kBAAkB,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IAClD,sBAAsB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,kBAAkB,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IAClD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,KAAK,IAAI,CAAC;IACX,oBAAoB,CAAC,EAAE,CACrB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,KACjC,IAAI,CAAC;CACX;AAED;;;GAGG;AACH,QAAA,MAAM,mBAAmB,qHAyMvB,CAAC;AAEH,eAAe,mBAAmB,CAAC"}
|
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@ export interface DownloadItem {
|
|
|
11
11
|
downloadedBytes: number;
|
|
12
12
|
progressPercentage: number;
|
|
13
13
|
state: string;
|
|
14
|
-
metadata:
|
|
14
|
+
metadata: string;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
export type DownloadProgressChange = DownloadItem;
|
|
@@ -32,16 +32,19 @@ export type DownloadStateChangeListener = (
|
|
|
32
32
|
const downloadEventEmitter = new NativeEventEmitter(TPStreamsDownload);
|
|
33
33
|
|
|
34
34
|
export function addDownloadProgressListener(): Promise<void> {
|
|
35
|
+
console.log('RN TPStreamsDownload: addDownloadProgressListener');
|
|
35
36
|
return TPStreamsDownload.addDownloadProgressListener();
|
|
36
37
|
}
|
|
37
38
|
|
|
38
39
|
export function removeDownloadProgressListener(): Promise<void> {
|
|
40
|
+
console.log('RN TPStreamsDownload: removeDownloadProgressListener');
|
|
39
41
|
return TPStreamsDownload.removeDownloadProgressListener();
|
|
40
42
|
}
|
|
41
43
|
|
|
42
44
|
export function onDownloadProgressChanged(
|
|
43
45
|
listener: DownloadProgressListener
|
|
44
46
|
): EmitterSubscription {
|
|
47
|
+
console.log('RN TPStreamsDownload: onDownloadProgressChanged');
|
|
45
48
|
return downloadEventEmitter.addListener(
|
|
46
49
|
'onDownloadProgressChanged',
|
|
47
50
|
listener
|
|
@@ -51,6 +54,7 @@ export function onDownloadProgressChanged(
|
|
|
51
54
|
export function onDownloadStateChanged(
|
|
52
55
|
listener: DownloadStateChangeListener
|
|
53
56
|
): EmitterSubscription {
|
|
57
|
+
console.log('RN TPStreamsDownload: onDownloadStateChanged');
|
|
54
58
|
return downloadEventEmitter.addListener('onDownloadStateChanged', (event) => {
|
|
55
59
|
listener(event.downloadItem, event.error);
|
|
56
60
|
});
|
package/src/TPStreamsPlayer.tsx
CHANGED
|
@@ -40,7 +40,7 @@ export interface TPStreamsPlayerProps extends ViewProps {
|
|
|
40
40
|
enableDownload?: boolean;
|
|
41
41
|
offlineLicenseExpireTime?: number;
|
|
42
42
|
showDefaultCaptions?: boolean;
|
|
43
|
-
downloadMetadata?: { [key: string]:
|
|
43
|
+
downloadMetadata?: { [key: string]: string };
|
|
44
44
|
onPlayerStateChanged?: (state: number) => void;
|
|
45
45
|
onIsPlayingChanged?: (isPlaying: boolean) => void;
|
|
46
46
|
onPlaybackSpeedChanged?: (speed: number) => void;
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
package com.tpstreams
|
|
2
|
-
|
|
3
|
-
import org.json.JSONObject
|
|
4
|
-
|
|
5
|
-
object JsonUtils {
|
|
6
|
-
|
|
7
|
-
fun parseJsonString(map: Map<String, Any>?): Map<String, Any> {
|
|
8
|
-
val result = mutableMapOf<String, Any>()
|
|
9
|
-
map?.forEach { (key, value) ->
|
|
10
|
-
when (value) {
|
|
11
|
-
is String -> {
|
|
12
|
-
if (value.startsWith("{") && value.endsWith("}")) {
|
|
13
|
-
try {
|
|
14
|
-
val json = JSONObject(value)
|
|
15
|
-
result[key] = jsonToMap(json)
|
|
16
|
-
} catch (e: Exception) {
|
|
17
|
-
result[key] = value
|
|
18
|
-
}
|
|
19
|
-
} else {
|
|
20
|
-
result[key] = value
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
else -> result[key] = value
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
return result
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
private fun jsonToMap(json: JSONObject): Map<String, Any> {
|
|
30
|
-
val map = mutableMapOf<String, Any>()
|
|
31
|
-
val keys = json.keys()
|
|
32
|
-
while (keys.hasNext()) {
|
|
33
|
-
val key = keys.next()
|
|
34
|
-
val value = json.get(key)
|
|
35
|
-
when (value) {
|
|
36
|
-
is String -> map[key] = value
|
|
37
|
-
is Int -> map[key] = value
|
|
38
|
-
is Double -> map[key] = value
|
|
39
|
-
is Boolean -> map[key] = value
|
|
40
|
-
is JSONObject -> map[key] = jsonToMap(value)
|
|
41
|
-
else -> map[key] = value.toString()
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
return map
|
|
45
|
-
}
|
|
46
|
-
}
|