Skip to content

Commit dd81069

Browse files
authored
feat(visitors): Fires events for received visitors message promotion … (#2403)
* feat(visitors): Fires events for received visitors message promotion request/response. * squash: Updates logs.
1 parent 34ceebd commit dd81069

6 files changed

+50
-9
lines changed

JitsiConferenceEventManager.js

+5
Original file line numberDiff line numberDiff line change
@@ -696,6 +696,11 @@ JitsiConferenceEventManager.prototype.setupXMPPListeners = function() {
696696
value => {
697697
conference.eventEmitter.emit(JitsiConferenceEvents.AV_MODERATION_REJECTED, { mediaType: value });
698698
});
699+
700+
this._addConferenceXMPPListener(XMPPEvents.VISITORS_MESSAGE,
701+
value => conference.eventEmitter.emit(JitsiConferenceEvents.VISITORS_MESSAGE, value));
702+
this._addConferenceXMPPListener(XMPPEvents.VISITORS_REJECTION,
703+
() => conference.eventEmitter.emit(JitsiConferenceEvents.VISITORS_REJECTION));
699704
};
700705

701706
/**

JitsiConferenceEvents.spec.ts

+5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import * as exported from "./JitsiConferenceEvents";
2+
import {VISITORS_MESSAGE, VISITORS_REJECTION} from "./JitsiConferenceEvents";
23

34
// this test is brittle on purpose because it's designed to ensure that the TypeScript conversion maintains backward compatibility
45

@@ -68,6 +69,8 @@ describe( "/JitsiConferenceEvents members", () => {
6869
USER_ROLE_CHANGED,
6970
USER_STATUS_CHANGED,
7071
VIDEO_UNMUTE_PERMISSIONS_CHANGED,
72+
VISITORS_MESSAGE,
73+
VISITORS_REJECTION,
7174
BOT_TYPE_CHANGED,
7275
LOBBY_USER_JOINED,
7376
LOBBY_USER_UPDATED,
@@ -146,6 +149,8 @@ describe( "/JitsiConferenceEvents members", () => {
146149
expect( USER_ROLE_CHANGED ).toBe( 'conference.roleChanged' );
147150
expect( USER_STATUS_CHANGED ).toBe( 'conference.statusChanged' );
148151
expect( VIDEO_UNMUTE_PERMISSIONS_CHANGED ).toBe( 'conference.video_unmute_permissions_changed' );
152+
expect( VISITORS_MESSAGE ).toBe( 'conference.visitors_message' );
153+
expect( VISITORS_REJECTION ).toBe( 'conference.visitors_rejection' );
149154
expect( BOT_TYPE_CHANGED ).toBe( 'conference.bot_type_changed' );
150155
expect( LOBBY_USER_JOINED ).toBe( 'conference.lobby.userJoined' );
151156
expect( LOBBY_USER_UPDATED ).toBe( 'conference.lobby.userUpdated' );

JitsiConferenceEvents.ts

+15-3
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ export enum JitsiConferenceEvents {
235235
PARTCIPANT_FEATURES_CHANGED = 'conference.partcipant_features_changed',
236236

237237
/**
238-
* Indicates that a the value of a specific property of a specific participant
238+
* Indicates that a value of a specific property of a specific participant
239239
* has changed.
240240
*/
241241
PARTICIPANT_PROPERTY_CHANGED = 'conference.participant_property_changed',
@@ -280,7 +280,7 @@ export enum JitsiConferenceEvents {
280280
* {string} address,
281281
* {VideoSIPGWConstants} oldState,
282282
* {VideoSIPGWConstants} newState,
283-
* {string} displayName}
283+
* {string} displayName
284284
* }.
285285
*/
286286
VIDEO_SIP_GW_SESSION_STATE_CHANGED = 'conference.videoSIPGWSessionStateChanged',
@@ -378,6 +378,16 @@ export enum JitsiConferenceEvents {
378378
*/
379379
VIDEO_UNMUTE_PERMISSIONS_CHANGED = 'conference.video_unmute_permissions_changed',
380380

381+
/**
382+
* Event indicating we have received a message from the visitors component.
383+
*/
384+
VISITORS_MESSAGE = 'conference.visitors_message',
385+
386+
/**
387+
* Event indicating that our request for promotion was rejected.
388+
*/
389+
VISITORS_REJECTION = 'conference.visitors_rejection',
390+
381391
/**
382392
* Event indicates that the bot participant type changed.
383393
*/
@@ -464,7 +474,7 @@ export enum JitsiConferenceEvents {
464474
E2EE_VERIFICATION_READY = 'conference.e2ee.verification.ready',
465475

466476
E2EE_VERIFICATION_COMPLETED = 'conference.e2ee.verification.completed'
467-
};
477+
}
468478

469479
// exported for backward compatibility
470480
export const AUDIO_INPUT_STATE_CHANGE = JitsiConferenceEvents.AUDIO_INPUT_STATE_CHANGE;
@@ -531,6 +541,8 @@ export const USER_LEFT = JitsiConferenceEvents.USER_LEFT;
531541
export const USER_ROLE_CHANGED = JitsiConferenceEvents.USER_ROLE_CHANGED;
532542
export const USER_STATUS_CHANGED = JitsiConferenceEvents.USER_STATUS_CHANGED;
533543
export const VIDEO_UNMUTE_PERMISSIONS_CHANGED = JitsiConferenceEvents.VIDEO_UNMUTE_PERMISSIONS_CHANGED;
544+
export const VISITORS_MESSAGE = JitsiConferenceEvents.VISITORS_MESSAGE;
545+
export const VISITORS_REJECTION = JitsiConferenceEvents.VISITORS_REJECTION;
534546
export const BOT_TYPE_CHANGED = JitsiConferenceEvents.BOT_TYPE_CHANGED;
535547
export const LOBBY_USER_JOINED = JitsiConferenceEvents.LOBBY_USER_JOINED;
536548
export const LOBBY_USER_UPDATED = JitsiConferenceEvents.LOBBY_USER_UPDATED;

modules/xmpp/strophe.emuc.js

+9-6
Original file line numberDiff line numberDiff line change
@@ -224,12 +224,15 @@ export default class MucConnectionPlugin extends ConnectionPluginListenable {
224224
const visitors = $(iq).find('>visitors[xmlns="jitsi:visitors"]');
225225
const response = $(iq).find('promotion-response');
226226

227-
if (visitors.length && response.length
228-
&& String(response.attr('allow')).toLowerCase() === 'true') {
229-
logger.warn('Redirected back to main room.');
230-
231-
this.xmpp.eventEmitter.emit(
232-
CONNECTION_REDIRECTED, undefined, visitors.attr('focusjid'), response.attr('username'));
227+
if (visitors.length && response.length) {
228+
if (String(response.attr('allow')).toLowerCase() === 'true') {
229+
logger.info('Promotion request accepted. Redirected to main room.');
230+
this.xmpp.eventEmitter.emit(
231+
CONNECTION_REDIRECTED, undefined, visitors.attr('focusjid'), response.attr('username'));
232+
} else {
233+
logger.info('Promotion request rejected.');
234+
this.xmpp.eventEmitter.emit(XMPPEvents.VISITORS_REJECTION);
235+
}
233236
}
234237

235238
return true;

modules/xmpp/xmpp.js

+6
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,10 @@ export default class XMPP extends Listenable {
525525
this.roomMetadataComponentAddress = identity.name;
526526
this._components.push(this.roomMetadataComponentAddress);
527527
}
528+
529+
if (identity.type === 'visitors') {
530+
this._components.push(identity.name);
531+
}
528532
});
529533

530534
this._maybeSendDeploymentInfoStat(true);
@@ -1080,6 +1084,8 @@ export default class XMPP extends Listenable {
10801084
this.eventEmitter.emit(XMPPEvents.BREAKOUT_ROOMS_EVENT, parsedJson);
10811085
} else if (parsedJson[JITSI_MEET_MUC_TYPE] === 'room_metadata') {
10821086
this.eventEmitter.emit(XMPPEvents.ROOM_METADATA_EVENT, parsedJson);
1087+
} else if (parsedJson[JITSI_MEET_MUC_TYPE] === 'visitors') {
1088+
this.eventEmitter.emit(XMPPEvents.VISITORS_MESSAGE, parsedJson);
10831089
}
10841090

10851091
return true;

service/xmpp/XMPPEvents.ts

+10
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,16 @@ export enum XMPPEvents {
385385
*/
386386
VIDEO_SIP_GW_SESSION_STATE_CHANGED = 'xmpp.videoSIPGWSessionStateChanged',
387387

388+
/**
389+
* Event indicating we have received a message from the visitors component.
390+
*/
391+
VISITORS_MESSAGE = 'xmpp.visitors_message',
392+
393+
/**
394+
* Event indicating that our request for promotion was rejected.
395+
*/
396+
VISITORS_REJECTION = 'xmpp.visitors_rejection',
397+
388398
// Designates an event indicating that the local ICE connection state has
389399
// changed.
390400
ICE_CONNECTION_STATE_CHANGED = 'xmpp.ice_connection_state_changed',

0 commit comments

Comments
 (0)