hostRequestResponse function

Future<void> hostRequestResponse(
  1. HostRequestResponseOptions options
)

Implementation

Future<void> hostRequestResponse(HostRequestResponseOptions options) async {
  // Extract parameters
  final showAlert = options.showAlert;
  var requestList = options.requestList;
  final requestResponse = options.requestResponse;
  final requestType = requestResponse.type;
  final isAccepted = requestResponse.action == 'accepted';
  const int alertDuration = 10000;

  // Filter out the request from the list
  requestList =
      requestList.where((request) => request.id != requestResponse.id).toList();
  options.updateRequestList(requestList);

  void showRequestAlert(String action, String message) {
    showAlert?.call(
      message: '$action $message',
      type: isAccepted ? 'success' : 'danger',
      duration: alertDuration,
    );
  }

  final requestTypeMap = {
    'fa-microphone': {
      'action': options.updateMicAction,
      'state': options.updateAudioRequestState,
      'time': options.updateAudioRequestTime,
    },
    'fa-video': {
      'action': options.updateVideoAction,
      'state': options.updateVideoRequestState,
      'time': options.updateVideoRequestTime,
    },
    'fa-desktop': {
      'action': options.updateScreenAction,
      'state': options.updateScreenRequestState,
      'time': options.updateScreenRequestTime,
    },
    'fa-comments': {
      'action': options.updateChatAction,
      'state': options.updateChatRequestState,
      'time': options.updateChatRequestTime,
    }
  };

  if (requestTypeMap.containsKey(requestType)) {
    final requestActions = requestTypeMap[requestType]!;
    final requestName = requestDisplayNames[requestType]!;

    if (isAccepted) {
      showRequestAlert(requestName,
          'request was accepted; click the button again to begin.');
      (requestActions['action'] as void Function(bool))(true);
      (requestActions['state'] as void Function(String))('accepted');
    } else {
      showRequestAlert(requestName, 'request was not accepted');
      (requestActions['state'] as void Function(String))('rejected');

      final nextRequestTime = DateTime.now().add(
        Duration(seconds: options.updateRequestIntervalSeconds),
      );
      (requestActions['time'] as void Function(
          int?))(nextRequestTime.millisecondsSinceEpoch);
    }
  }
}