package com.fireworksdk.bridge.reactnative.module import androidx.annotation.Keep import com.facebook.react.bridge.ReactApplicationContext import com.facebook.react.bridge.ReactContextBaseJavaModule import com.facebook.react.bridge.ReactMethod import com.firework.analyticsevents.livestream.LivestreamAnalyticEvent import com.firework.bus.FwAnalyticCallable import com.firework.sdk.FireworkSdk import com.fireworksdk.bridge.models.FWLiveStreamMessageDetailsModel import com.fireworksdk.bridge.models.enums.FWLiveStreamEventName import com.fireworksdk.bridge.reactnative.models.FWLiveStreamInterface import com.fireworksdk.bridge.reactnative.utils.FWEventUtils import com.fireworksdk.bridge.utils.FWLogUtils import com.fireworksdk.bridge.utils.FWModelUtils class FWLiveStreamModule( private val reactContext: ReactApplicationContext ) : ReactContextBaseJavaModule(reactContext), FWLiveStreamInterface { @ReactMethod override fun init() { FireworkSdk.analytics.register(this) } @Keep @FwAnalyticCallable fun onLivestreamEvent(event: LivestreamAnalyticEvent) { val liveStreamEventDetailsModel = FWModelUtils.convertVideoInfo2LivestreamDetails(event.videoInfo) when (event) { is LivestreamAnalyticEvent.UserSentChatMessage -> { FWLogUtils.d { "userSentChat: $event" } FWEventUtils.sendLiveStreamChatEvent( reactApplicationContext, FWLiveStreamEventName.UserSendChat.rawValue, FWLiveStreamMessageDetailsModel(event.messageId, event.username, event.messageText), liveStreamEventDetailsModel ) } is LivestreamAnalyticEvent.UserJoined -> { FWLogUtils.d { "userJoined: $event" } FWEventUtils.sendLiveStreamEvent( reactApplicationContext, FWLiveStreamEventName.UserJoin.rawValue, liveStreamEventDetailsModel ) } is LivestreamAnalyticEvent.UserLeft -> { FWLogUtils.d { "userLeft: $event" } FWEventUtils.sendLiveStreamEvent( reactApplicationContext, FWLiveStreamEventName.UserLeave.rawValue, liveStreamEventDetailsModel ) } is LivestreamAnalyticEvent.UserSentLike -> { FWLogUtils.d { "userSentLike: $event" } FWEventUtils.sendLiveStreamEvent( reactApplicationContext, FWLiveStreamEventName.UserSendLike.rawValue, liveStreamEventDetailsModel ) } } } @ReactMethod fun addListener(eventName: String?) { // Set up any upstream listeners or background tasks as necessary FWLogUtils.d { "addListener: $eventName" } } @ReactMethod fun removeListeners(count: Int?) { // Remove upstream listeners, stop unnecessary background tasks FWLogUtils.d { "removeListeners: $count" } } @ReactMethod override fun setCustomLinkInteractionClickEnabled(enable: Boolean) { if (enable) { FireworkSdk.livestream.setOnLinkClicked { title, url, videoInfo -> val videoPlaybackDetails = FWModelUtils.convertVideoInfo2LivestreamDetails(videoInfo) FWEventUtils.sendLiveStreamLinkInteractionClickEvent(reactContext = reactContext, title = title, url = url, info = videoPlaybackDetails) } } else { FireworkSdk.livestream.setOnLinkClicked(null) } } override fun getName(): String { return "LiveStreamModule" } }