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