-
Notifications
You must be signed in to change notification settings - Fork 374
Expand file tree
/
Copy pathStreamVideoThumbnailModule.kt
More file actions
50 lines (45 loc) · 1.63 KB
/
StreamVideoThumbnailModule.kt
File metadata and controls
50 lines (45 loc) · 1.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package com.streamchatexpo
import com.facebook.react.bridge.Arguments
import com.facebook.react.bridge.Promise
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.bridge.ReadableArray
import com.streamchatreactnative.shared.StreamVideoThumbnailGenerator
import java.util.concurrent.Executors
class StreamVideoThumbnailModule(
reactContext: ReactApplicationContext,
) : NativeStreamVideoThumbnailSpec(reactContext) {
override fun getName(): String = NAME
override fun createVideoThumbnails(urls: ReadableArray, promise: Promise) {
val urlList = mutableListOf<String>()
for (index in 0 until urls.size()) {
urlList.add(urls.getString(index) ?: "")
}
executor.execute {
try {
val thumbnails = StreamVideoThumbnailGenerator.generateThumbnails(reactApplicationContext, urlList)
val result = Arguments.createArray()
thumbnails.forEach { thumbnail ->
val thumbnailMap = Arguments.createMap()
if (thumbnail.uri != null) {
thumbnailMap.putString("uri", thumbnail.uri)
} else {
thumbnailMap.putNull("uri")
}
if (thumbnail.error != null) {
thumbnailMap.putString("error", thumbnail.error)
} else {
thumbnailMap.putNull("error")
}
result.pushMap(thumbnailMap)
}
promise.resolve(result)
} catch (error: Throwable) {
promise.reject("stream_video_thumbnail_error", error.message, error)
}
}
}
companion object {
const val NAME = "StreamVideoThumbnail"
private val executor = Executors.newCachedThreadPool()
}
}