hostRequestResponse function
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);
}
}
}