joinMeeting method
Future<JitsiMeetingResponse>
joinMeeting(
- JitsiMeetingOptions options, {
- JitsiMeetingListener? listener,
- Map<
RoomNameConstraintType, RoomNameConstraint> ? roomNameConstraints,
override
Joins a meeting based on the JitsiMeetingOptions passed in. A JitsiMeetingListener can be attached to this meeting that will automatically be removed when the meeting has ended
Implementation
@override
Future<JitsiMeetingResponse> joinMeeting(JitsiMeetingOptions options,
{JitsiMeetingListener? listener,
Map<RoomNameConstraintType, RoomNameConstraint>?
roomNameConstraints}) async {
// encode `options` Map to Json to avoid error
// in interoperability conversions
String webOptions = jsonEncode(options.webOptions);
String serverURL = options.serverURL ?? "meet.jit.si";
serverURL = serverURL.replaceAll(cleanDomain, "");
api = jitsi.JitsiMeetAPI(serverURL, webOptions);
// setup listeners
if (listener != null) {
listener.onOpened?.call();
api?.on("chatUpdated", ((JSAny message) {
final msg = message as JSObject;
Map<String, dynamic> data = {
'isOpen': !kReleaseMode ? _getProperty(msg, 'isOpen') : false,
'unreadCount': !kReleaseMode ? _getProperty(msg, 'unreadCount') : 0,
};
listener.onChatToggled?.call(
parseBool(data["isOpen"]),
);
}.toJS));
api?.on("incomingMessage", ((JSAny message) {
final msg = message as JSObject;
Map<String, dynamic> data = {
'senderId': !kReleaseMode ? _getProperty(msg, 'from') : '?',
'nick': !kReleaseMode ? _getProperty(msg, 'nick') : '?',
'isPrivate': !kReleaseMode ? _getProperty(msg, 'privateMessage') : false,
'message': !kReleaseMode ? _getProperty(msg, 'message') : '?',
'timestamp': DateTime.now().toUtc(),
};
listener.onChatMessageReceived?.call(
data["senderId"]?.toString() ?? '?',
data["message"]?.toString() ?? '?',
parseBool(data["isPrivate"]),
data["timestamp"].toString(),
);
}.toJS));
api?.on("audioMuteStatusChanged", ((JSAny message) {
final msg = message as JSObject;
Map<String, dynamic> data = {
'muted': !kReleaseMode ? _getProperty(msg, 'muted') : false,
};
listener.onAudioMutedChanged?.call(
parseBool(data["muted"]),
);
}.toJS));
api?.on("videoMuteStatusChanged", ((JSAny message) {
final msg = message as JSObject;
Map<String, dynamic> data = {
'muted': !kReleaseMode ? _getProperty(msg, 'muted') : false,
};
listener.onVideoMutedChanged?.call(
parseBool(data["muted"], isVideoMutedChanged: true),
);
}.toJS));
api?.on("screenSharingStatusChanged", ((JSAny message) {
final msg = message as JSObject;
Map<String, dynamic> data = {
'sharing': !kReleaseMode ? _getProperty(msg, 'on') : false,
'details': !kReleaseMode ? _getProperty(msg, 'details') : {},
'participantId': !kReleaseMode ? _getProperty(msg, 'id') : '?',
};
listener.onScreenShareToggled?.call(
data["participantId"]?.toString() ?? '?',
parseBool(data["sharing"]),
);
}.toJS));
api?.on("participantsInfoRetrieved", ((JSAny message) {
final msg = message as JSObject;
Map<String, dynamic> data = {
'participantsInfo': !kReleaseMode ? _getProperty(msg, 'participantsInfo') : {},
'requestId': !kReleaseMode ? _getProperty(msg, 'requestId') : '?'
};
listener.onParticipantsInfoRetrieved?.call(
data["participantsInfo"] ?? {},
data["requestId"]?.toString() ?? '?',
);
}.toJS));
api?.on("videoConferenceJoined", ((JSAny message) {
final msg = message as JSObject;
Map<String, dynamic> data = {
'url': !kReleaseMode ? _getProperty(msg, 'roomName') : '?',
'id': !kReleaseMode ? _getProperty(msg, 'id') : '?',
'displayName': !kReleaseMode ? _getProperty(msg, 'displayName') : '?',
'avatarURL': !kReleaseMode ? _getProperty(msg, 'avatarURL') : '',
'breakoutRoom': !kReleaseMode ? _getProperty(msg, 'breakoutRoom') : false,
};
listener.onConferenceJoined?.call(
data["url"].toString(),
);
}.toJS));
api?.on("videoConferenceLeft", ((JSAny message) {
final msg = message as JSObject;
Map<String, dynamic> data = {
'url': !kReleaseMode ? _getProperty(msg, 'roomName') : '?',
'error': _getProperty(msg, 'error'),
};
listener.onConferenceTerminated?.call(
data["url"].toString(),
data["error"],
);
listener.onClosed?.call();
}.toJS));
api?.on("participantJoined", ((JSAny message) {
final msg = message as JSObject;
Map<String, dynamic> data = {
'email': !kReleaseMode ? _getProperty(msg, 'email') : '?',
'name': !kReleaseMode ? _getProperty(msg, 'displayName') : '?',
'role': !kReleaseMode ? _getProperty(msg, 'role') : '?',
'participantId': !kReleaseMode ? _getProperty(msg, 'id') : '?',
};
listener.onParticipantJoined?.call(
data["email"]?.toString() ?? "?",
data["name"]?.toString() ?? "?",
data["role"]?.toString() ?? "?",
data["participantId"]?.toString() ?? "?");
}.toJS));
api?.on("participantLeft", ((JSAny message) {
final msg = message as JSObject;
Map<String, dynamic> data = {
"participantId": !kReleaseMode ? _getProperty(msg, 'id') : '?',
};
listener.onParticipantLeft?.call(
data["participantId"]?.toString() ?? "?",
);
}.toJS));
api?.on("feedbackSubmitted", ((JSAny message) {
final msg = message as JSObject;
Map<String, dynamic> data = {
"error": !kReleaseMode ? _getProperty(msg, 'error') : '?',
};
listener.onError?.call(
data["error"]?.toString() ?? "?",
);
}.toJS));
// NOTE: `onConferenceWillJoin` is not supported or nof found event in web
// add generic listener
_addGenericListeners(listener);
api?.on("readyToClose", ((JSAny message) {
listener.onClosed?.call();
api?.dispose();
}.toJS));
}
return JitsiMeetingResponse(isSuccess: true);
}