Selaa lähdekoodia

Always fire JitsiConferenceEvents.TRACK_REMOVED event when track is removed when participant lefts the conference

dev1
tsareg 9 vuotta sitten
vanhempi
commit
27466fce4a
2 muutettua tiedostoa jossa 60 lisäystä ja 10 poistoa
  1. 14
    3
      JitsiConference.js
  2. 46
    7
      modules/RTC/RTC.js

+ 14
- 3
JitsiConference.js Näytä tiedosto

@@ -628,7 +628,11 @@ JitsiConference.prototype.onMemberLeft = function (jid) {
628 628
     var participant = this.participants[id];
629 629
     delete this.participants[id];
630 630
 
631
-    this.rtc.removeRemoteTracks(id);
631
+    var removedTracks = this.rtc.removeRemoteTracks(id);
632
+
633
+    removedTracks.forEach(function (track) {
634
+        this.eventEmitter.emit(JitsiConferenceEvents.TRACK_REMOVED, track);
635
+    }.bind(this));
632 636
 
633 637
     this.eventEmitter.emit(JitsiConferenceEvents.USER_LEFT, id, participant);
634 638
 };
@@ -1122,8 +1126,15 @@ function setupListeners(conference) {
1122 1126
                         && tracks[i].getStreamId() == streamId
1123 1127
                         && tracks[i].getTrackId() == trackId) {
1124 1128
                         var track = participant._tracks.splice(i, 1)[0];
1125
-                        conference.eventEmitter.emit(
1126
-                            JitsiConferenceEvents.TRACK_REMOVED, track);
1129
+
1130
+                        track = conference.rtc.removeRemoteTrack(
1131
+                            participant.getId(), track);
1132
+
1133
+                        if (track) {
1134
+                            conference.eventEmitter.emit(
1135
+                                JitsiConferenceEvents.TRACK_REMOVED, track);
1136
+                        }
1137
+
1127 1138
                         return;
1128 1139
                     }
1129 1140
                 }

+ 46
- 7
modules/RTC/RTC.js Näytä tiedosto

@@ -287,18 +287,57 @@ RTC.prototype.createRemoteTrack = function (event) {
287 287
 
288 288
 /**
289 289
  * Removes all JitsiRemoteTracks associated with given MUC nickname (resource
290
- * part of the JID).
291
- * @param resource the resource part of the MUC JID
292
- * @returns {JitsiRemoteTrack|null}
290
+ * part of the JID). Returns array of removed tracks.
291
+ *
292
+ * @param {string} resource - The resource part of the MUC JID.
293
+ * @returns {JitsiRemoteTrack[]}
293 294
  */
294 295
 RTC.prototype.removeRemoteTracks = function (resource) {
295
-    var remoteTracks = this.remoteTracks[resource];
296
+    var remoteTracksForResource = this.remoteTracks[resource];
297
+    var removedTracks = [];
298
+
299
+    if (remoteTracksForResource) {
300
+        for (var key in remoteTracksForResource) {
301
+            if (remoteTracksForResource.hasOwnProperty(key) &&
302
+                remoteTracksForResource[key]) {
303
+                var removedTrack = this.removeRemoteTrack(
304
+                    resource, remoteTracksForResource[key]);
305
+
306
+                if (removedTrack) {
307
+                    removedTracks.push(removedTrack);
308
+                }
309
+            }
310
+        }
296 311
 
297
-    if(remoteTracks) {
298
-        remoteTracks['audio'] && remoteTracks['audio'].dispose();
299
-        remoteTracks['video'] && remoteTracks['video'].dispose();
300 312
         delete this.remoteTracks[resource];
301 313
     }
314
+
315
+    return removedTracks;
316
+};
317
+
318
+/**
319
+ * Removes specified JitsiRemoteTrack associated with given MUC nickname
320
+ * (resource part of the JID). Returns removed track if any.
321
+ *
322
+ * @param {string} resource - The resource part of the MUC JID.
323
+ * @param {JitsiRemoteTrack} track - Track to remove.
324
+ * @returns {JitsiRemoteTrack|undefined}
325
+ */
326
+RTC.prototype.removeRemoteTrack = function (resource, track) {
327
+    var remoteTracksForResource = this.remoteTracks[resource];
328
+
329
+    if (remoteTracksForResource) {
330
+        for (var key in remoteTracksForResource) {
331
+            if (remoteTracksForResource.hasOwnProperty(key) &&
332
+                remoteTracksForResource[key] &&
333
+                remoteTracksForResource[key] === track) {
334
+                remoteTracksForResource[key].dispose();
335
+                delete remoteTracksForResource[key];
336
+                return track;
337
+            }
338
+
339
+        }
340
+    }
302 341
 };
303 342
 
304 343
 RTC.getPCConstraints = function () {

Loading…
Peruuta
Tallenna