checkMediasfuURL function

Future<void> checkMediasfuURL(
  1. CheckMediasfuURLOptions options
)

Checks the MediaSFU URL and processes necessary actions based on its validity.

Implementation

Future<void> checkMediasfuURL(CheckMediasfuURLOptions options) async {
  final data = options.data;

  if (data.mediasfuURL != null &&
      data.mediasfuURL!.isNotEmpty &&
      data.mediasfuURL!.length > 10) {
    try {
      final splitTexts = ["/meet/", "/chat/", "/broadcast/"];
      final splitText = splitTexts.firstWhere(
        (text) => data.mediasfuURL!.contains(text),
        orElse: () => "/meet/",
      );

      final urlParts = data.mediasfuURL!.split(splitText);
      final link = urlParts[0];
      final secretCode = urlParts[1].split("/")[1];

      await checkLimitsAndMakeRequest(
        apiUserName: options.roomName,
        apiToken: secretCode,
        link: link,
        userName: options.member,
        parameters: options.parameters,
        validate: false,
      );

      return;
    } catch (_) {
      return;
    }
  }

  if (data.mediasfuURL == null &&
      options.islevel != '2' &&
      data.allowRecord == true &&
      data.apiKey != null &&
      data.apiKey!.length == 64 &&
      data.apiUserName != null &&
      data.apiUserName!.length > 5 &&
      (options.roomName.startsWith('s') || options.roomName.startsWith('p'))) {
    final payload = JoinMediaSFURoomOptions(
      action: 'join',
      meetingID: options.roomName,
      userName: options.member,
    );
    final finalOptions = JoinMediaSFUOptions(
      payload: payload,
      apiUserName: data.apiUserName!,
      apiKey: data.apiKey!,
      localLink: options.localLink!,
    );

    final response = await joinRoomOnMediaSFU(
      finalOptions,
    );

    if (response.success &&
        response.data != null &&
        response.data!.roomName != null) {
      options.socket!.emitWithAck('updateMediasfuURL', {
        'eventID': options.roomName,
        'mediasfuURL': response.data!.publicURL,
      }, ack: (_) {
        // Do nothing
      });

      await checkLimitsAndMakeRequest(
        apiUserName: response.data!.roomName!,
        apiToken: response.data!.secret,
        link: response.data!.link,
        userName: options.member,
        parameters: options.parameters,
        validate: false,
      );

      options.parameters.updateApiToken(response.data!.secret);
    }
  }
}