|
@@ -29,6 +29,7 @@ const logger = getLogger(__filename);
|
29
|
29
|
*/
|
30
|
30
|
export default function JitsiConferenceEventManager(conference) {
|
31
|
31
|
this.conference = conference;
|
|
32
|
+ this.xmppListeners = {};
|
32
|
33
|
|
33
|
34
|
// Listeners related to the conference only
|
34
|
35
|
conference.on(JitsiConferenceEvents.TRACK_MUTE_CHANGED,
|
|
@@ -529,38 +530,64 @@ JitsiConferenceEventManager.prototype.setupRTCListeners = function() {
|
529
|
530
|
});
|
530
|
531
|
};
|
531
|
532
|
|
|
533
|
+/**
|
|
534
|
+ * Removes event listeners related to conference.xmpp
|
|
535
|
+ */
|
|
536
|
+JitsiConferenceEventManager.prototype.removeXMPPListeners = function() {
|
|
537
|
+ const conference = this.conference;
|
|
538
|
+
|
|
539
|
+ conference.xmpp.caps.removeListener(
|
|
540
|
+ XMPPEvents.PARTCIPANT_FEATURES_CHANGED,
|
|
541
|
+ this.xmppListeners[XMPPEvents.PARTCIPANT_FEATURES_CHANGED]);
|
|
542
|
+ delete this.xmppListeners[XMPPEvents.PARTCIPANT_FEATURES_CHANGED];
|
|
543
|
+
|
|
544
|
+ Object.keys(this.xmppListeners).forEach(eventName => {
|
|
545
|
+ conference.xmpp.removeListener(
|
|
546
|
+ eventName,
|
|
547
|
+ this.xmppListeners[eventName]);
|
|
548
|
+ });
|
|
549
|
+ this.xmppListeners = {};
|
|
550
|
+};
|
|
551
|
+
|
|
552
|
+
|
532
|
553
|
/**
|
533
|
554
|
* Setups event listeners related to conference.xmpp
|
534
|
555
|
*/
|
535
|
556
|
JitsiConferenceEventManager.prototype.setupXMPPListeners = function() {
|
536
|
557
|
const conference = this.conference;
|
537
|
558
|
|
538
|
|
- conference.xmpp.caps.addListener(XMPPEvents.PARTCIPANT_FEATURES_CHANGED,
|
539
|
|
- from => {
|
540
|
|
- const participant
|
541
|
|
- = conference.getParticipantById(
|
542
|
|
- Strophe.getResourceFromJid(from));
|
|
559
|
+ const featuresChangedListener = from => {
|
|
560
|
+ const participant
|
|
561
|
+ = conference.getParticipantById(
|
|
562
|
+ Strophe.getResourceFromJid(from));
|
543
|
563
|
|
544
|
|
- if (participant) {
|
545
|
|
- conference.eventEmitter.emit(
|
546
|
|
- JitsiConferenceEvents.PARTCIPANT_FEATURES_CHANGED,
|
547
|
|
- participant);
|
548
|
|
- }
|
549
|
|
- });
|
550
|
|
- conference.xmpp.addListener(
|
|
564
|
+ if (participant) {
|
|
565
|
+ conference.eventEmitter.emit(
|
|
566
|
+ JitsiConferenceEvents.PARTCIPANT_FEATURES_CHANGED,
|
|
567
|
+ participant);
|
|
568
|
+ }
|
|
569
|
+ };
|
|
570
|
+
|
|
571
|
+ conference.xmpp.caps.addListener(
|
|
572
|
+ XMPPEvents.PARTCIPANT_FEATURES_CHANGED,
|
|
573
|
+ featuresChangedListener);
|
|
574
|
+ this.xmppListeners[XMPPEvents.PARTCIPANT_FEATURES_CHANGED]
|
|
575
|
+ = featuresChangedListener;
|
|
576
|
+
|
|
577
|
+ this._addConferenceXMPPListener(
|
551
|
578
|
XMPPEvents.CALL_INCOMING,
|
552
|
579
|
conference.onIncomingCall.bind(conference));
|
553
|
|
- conference.xmpp.addListener(
|
|
580
|
+ this._addConferenceXMPPListener(
|
554
|
581
|
XMPPEvents.CALL_ACCEPTED,
|
555
|
582
|
conference.onCallAccepted.bind(conference));
|
556
|
|
- conference.xmpp.addListener(
|
|
583
|
+ this._addConferenceXMPPListener(
|
557
|
584
|
XMPPEvents.TRANSPORT_INFO,
|
558
|
585
|
conference.onTransportInfo.bind(conference));
|
559
|
|
- conference.xmpp.addListener(
|
|
586
|
+ this._addConferenceXMPPListener(
|
560
|
587
|
XMPPEvents.CALL_ENDED,
|
561
|
588
|
conference.onCallEnded.bind(conference));
|
562
|
589
|
|
563
|
|
- conference.xmpp.addListener(XMPPEvents.START_MUTED_FROM_FOCUS,
|
|
590
|
+ this._addConferenceXMPPListener(XMPPEvents.START_MUTED_FROM_FOCUS,
|
564
|
591
|
(audioMuted, videoMuted) => {
|
565
|
592
|
if (conference.options.config.ignoreStartMuted) {
|
566
|
593
|
return;
|
|
@@ -586,6 +613,15 @@ JitsiConferenceEventManager.prototype.setupXMPPListeners = function() {
|
586
|
613
|
});
|
587
|
614
|
};
|
588
|
615
|
|
|
616
|
+/**
|
|
617
|
+ * Add XMPP listener and save its reference for remove on leave conference.
|
|
618
|
+ */
|
|
619
|
+JitsiConferenceEventManager.prototype._addConferenceXMPPListener = function(
|
|
620
|
+ eventName, listener) {
|
|
621
|
+ this.xmppListeners[eventName] = listener;
|
|
622
|
+ this.conference.xmpp.addListener(eventName, listener);
|
|
623
|
+};
|
|
624
|
+
|
589
|
625
|
/**
|
590
|
626
|
* Setups event listeners related to conference.statistics
|
591
|
627
|
*/
|