All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.io.dyte.mobilecorebridge.listeners.RoomEventListener.kt Maven / Gradle / Ivy

package io.dyte.mobilecorebridge.listeners

import io.dyte.core.listeners.DyteMeetingRoomEventsListener
import io.dyte.core.models.ActiveTabType
import io.dyte.core.spotlight.ActiveTab
import io.dyte.mobilecorebridge.CallDetailsBuilder
import io.dyte.mobilecorebridge.DyteClient
import io.dyte.mobilecorebridge.DyteSink
import io.dyte.mobilecorebridge.DyteUtils
import io.dyte.mobilecorebridge.toMap

class RoomEventListener(private val dyteRoomSink: DyteSink, private val dyteClient: DyteClient) :
  DyteMeetingRoomEventsListener {

  private val callDetailsBuilder = CallDetailsBuilder()
  private val dyteUtils = DyteUtils()

  override fun onMeetingInitStarted() {
    super.onMeetingInitStarted()
    callDetailsBuilder.flush().addMethodName("onMeetingInitStarted")
    dyteRoomSink.success(callDetailsBuilder.build())
  }

  override fun onMeetingInitCompleted() {
    super.onMeetingInitCompleted()

    callDetailsBuilder
      .flush()
      .addMethodName("onActiveTabUpdate")
      .addArguments(hashMapOf("activeTab" to dyteClient.getSelfActiveTab()))
    dyteRoomSink.success(callDetailsBuilder.build())

    callDetailsBuilder.flush().addMethodName("onMeetingInitCompleted")
    dyteRoomSink.success(callDetailsBuilder.build())
  }

  override fun onMeetingRoomDisconnected() {
    super.onMeetingRoomDisconnected()
    callDetailsBuilder.flush().addMethodName("onMeetingRoomDisconnected")
    dyteRoomSink.success(callDetailsBuilder.build())
  }

  override fun onMeetingRoomJoinCompleted() {
    super.onMeetingRoomJoinCompleted()
    dyteUtils.enableWakelock()
    callDetailsBuilder.flush().addMethodName("onMeetingRoomJoinCompleted")
    dyteRoomSink.success(callDetailsBuilder.build())
  }

  override fun onMeetingRoomJoinFailed(exception: Exception) {
    super.onMeetingRoomJoinFailed(exception)
    callDetailsBuilder
      .flush()
      .addMethodName("onMeetingRoomJoinFailed")
      .addArguments(hashMapOf("exception" to exception.message))
    dyteRoomSink.success(callDetailsBuilder.build())
  }

  override fun onMeetingRoomJoinStarted() {
    super.onMeetingRoomJoinStarted()
    callDetailsBuilder.flush().addMethodName("onMeetingRoomJoinStarted")
    dyteRoomSink.success(callDetailsBuilder.build())
  }

  override fun onMeetingRoomLeaveCompleted() {
    super.onMeetingRoomLeaveCompleted()
    dyteUtils.disableWakelock()
    callDetailsBuilder.flush().addMethodName("onMeetingRoomLeaveCompleted")
    dyteRoomSink.success(callDetailsBuilder.build())
  }

  override fun onMeetingRoomLeaveStarted() {
    super.onMeetingRoomLeaveStarted()
    callDetailsBuilder.flush().addMethodName("onMeetingRoomLeaveStarted")
    dyteRoomSink.success(callDetailsBuilder.build())
  }

  override fun onMeetingInitFailed(exception: Exception) {
    super.onMeetingInitFailed(exception)
    callDetailsBuilder
      .flush()
      .addMethodName("onMeetingInitFailed")
      .addArguments(hashMapOf("exception" to exception.message))
    dyteRoomSink.success(callDetailsBuilder.build())
  }

  override fun onReconnectingToMeetingRoom() {
    super.onReconnectingToMeetingRoom()

    callDetailsBuilder.flush().addMethodName("onReconnectingToMeetingRoom")

    dyteRoomSink.success(callDetailsBuilder.build())
  }

  override fun onActiveTabUpdate(activeTab: ActiveTab) {
    super.onActiveTabUpdate(activeTab)

    callDetailsBuilder
      .flush()
      .addMethodName("onActiveTabUpdate")
      .addArguments(hashMapOf("activeTab" to activeTab.toMap()))
    dyteRoomSink.success(callDetailsBuilder.build())
  }

  override fun onMeetingEnded() {
    super.onMeetingEnded()

    callDetailsBuilder.flush().addMethodName("onMeetingEnded")
    dyteRoomSink.success(callDetailsBuilder.build())
  }

  override fun onReconnectedToMeetingRoom() {
    super.onReconnectedToMeetingRoom()

    callDetailsBuilder.flush().addMethodName("onReconnectedToMeetingRoom")

    dyteRoomSink.success(callDetailsBuilder.build())
  }

  override fun onMeetingRoomReconnectionFailed() {
    super.onMeetingRoomReconnectionFailed()

    callDetailsBuilder.flush().addMethodName("onMeetingRoomReconnectionFailed")

    dyteRoomSink.success(callDetailsBuilder.build())
  }

  override fun onConnectedToMeetingRoom() {
    super.onConnectedToMeetingRoom()

    callDetailsBuilder.flush().addMethodName("onConnectedToMeetingRoom")

    dyteRoomSink.success(callDetailsBuilder.build())
  }

  override fun onConnectingToMeetingRoom() {
    super.onConnectingToMeetingRoom()

    callDetailsBuilder.flush().addMethodName("onConnectingToMeetingRoom")

    dyteRoomSink.success(callDetailsBuilder.build())
  }

  @Deprecated("Please use DyteMeetingRoomEventsListener.onActiveTabUpdate(activeTab: ActiveTab)")
  override fun onActiveTabUpdate(id: String, tabType: ActiveTabType) {
    super.onActiveTabUpdate(id, tabType)

    // Not listening to this callback on flutter end, since it's
    // deprecated in the first version itself when this feature
    // will be released in Flutter Core. Will listen to new callback
    /*
     * [onActiveTabUpdate(tabType: ActiveTabType)]
     */
    //    callDetailsBuilder
    //      .flush()
    //      .addMethodName("onActiveTabUpdateOld")
    //      .addArguments(hashMapOf("id" to id, "tabType" to tabType.name.lowercase()))
    //
    //    dyteRoomSink.success(callDetailsBuilder.build())
  }

  override fun onDisconnectedFromMeetingRoom() {
    super.onDisconnectedFromMeetingRoom()

    callDetailsBuilder.flush().addMethodName("onDisconnectedFromMeetingRoom")

    dyteRoomSink.success(callDetailsBuilder.build())
  }

  override fun onMeetingRoomConnectionFailed() {
    super.onMeetingRoomConnectionFailed()

    callDetailsBuilder.flush().addMethodName("onMeetingRoomConnectionFailed")

    dyteRoomSink.success(callDetailsBuilder.build())
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy