@wazo/sdk 0.37.3 → 0.37.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -11747,9 +11747,11 @@ class Room$1 extends Emitter {
11747
11747
  _onParticipantTrackUpdate(oldParticipant , update ) {
11748
11748
  const newParticipant = oldParticipant;
11749
11749
 
11750
- const { trackId } = this._callIdStreamIdMap[newParticipant.callId] || {};
11750
+ const { trackId, streamId } = this._callIdStreamIdMap[newParticipant.callId] || {};
11751
11751
  const pc = Wazo.Phone.phone.currentSipSession.sessionDescriptionHandler.peerConnection;
11752
- const stream = pc.getRemoteStreams().find(someStream => someStream.getTracks().some(track => track.id === trackId));
11752
+ // Can't use `getReceivers` here because on FF we make the mapping based on the streamId
11753
+ const stream = pc.getRemoteStreams().find(someStream =>
11754
+ someStream.id === streamId || someStream.getTracks().some(track => track.id === trackId));
11753
11755
 
11754
11756
  if (update === 'downgrade') {
11755
11757
  newParticipant.streams = [];
@@ -11779,15 +11781,41 @@ class Room$1 extends Emitter {
11779
11781
  return;
11780
11782
  }
11781
11783
 
11782
- if (this._unassociatedVideoStreams[trackId]) {
11784
+ const streamId = this._getStreamIdFrTrackId(trackId);
11785
+ const key = this._getUnassociatedMapIdFromTrackIdOrStreamId(trackId, streamId);
11786
+ const stream = this._unassociatedVideoStreams[key];
11787
+
11788
+ if (stream) {
11783
11789
  // Try to associate stream
11784
- this._associateStreamTo(this._unassociatedVideoStreams[trackId], participant);
11790
+ this._associateStreamTo(stream, participant);
11785
11791
 
11786
- delete this._unassociatedVideoStreams[trackId];
11792
+ delete this._unassociatedVideoStreams[key];
11787
11793
  delete this._unassociatedParticipants[participant.callId];
11788
11794
  }
11789
11795
  }
11790
11796
 
11797
+ _getUnassociatedMapIdFromTrackIdOrStreamId(trackId , streamId ) {
11798
+ // Find by trackId
11799
+ if (trackId in this._unassociatedVideoStreams) {
11800
+ return trackId;
11801
+ }
11802
+
11803
+ // Find by streamId
11804
+ if (streamId && streamId in this._unassociatedVideoStreams) {
11805
+ return streamId;
11806
+ }
11807
+
11808
+ // Find in all the streams by streamId (used on FF where we can't map by trackId)
11809
+ const idx = Object.values(this._unassociatedVideoStreams).findIndex((stream ) => stream.id === streamId);
11810
+ return idx === -1 ? null : Object.keys(this._unassociatedVideoStreams)[idx];
11811
+ }
11812
+
11813
+ _getStreamIdFrTrackId(trackId ) {
11814
+ const mapping = Object.values(this._callIdStreamIdMap).find((map ) => map.trackId === trackId);
11815
+
11816
+ return mapping ? mapping.streamId : null;
11817
+ }
11818
+
11791
11819
  _associateStreamTo(rawStream , participant ) {
11792
11820
  const stream = new Wazo.Stream(rawStream, participant);
11793
11821
  participant.streams.push(stream);
@@ -11747,9 +11747,11 @@ class Room$1 extends Emitter {
11747
11747
  _onParticipantTrackUpdate(oldParticipant , update ) {
11748
11748
  const newParticipant = oldParticipant;
11749
11749
 
11750
- const { trackId } = this._callIdStreamIdMap[newParticipant.callId] || {};
11750
+ const { trackId, streamId } = this._callIdStreamIdMap[newParticipant.callId] || {};
11751
11751
  const pc = Wazo.Phone.phone.currentSipSession.sessionDescriptionHandler.peerConnection;
11752
- const stream = pc.getRemoteStreams().find(someStream => someStream.getTracks().some(track => track.id === trackId));
11752
+ // Can't use `getReceivers` here because on FF we make the mapping based on the streamId
11753
+ const stream = pc.getRemoteStreams().find(someStream =>
11754
+ someStream.id === streamId || someStream.getTracks().some(track => track.id === trackId));
11753
11755
 
11754
11756
  if (update === 'downgrade') {
11755
11757
  newParticipant.streams = [];
@@ -11779,15 +11781,41 @@ class Room$1 extends Emitter {
11779
11781
  return;
11780
11782
  }
11781
11783
 
11782
- if (this._unassociatedVideoStreams[trackId]) {
11784
+ const streamId = this._getStreamIdFrTrackId(trackId);
11785
+ const key = this._getUnassociatedMapIdFromTrackIdOrStreamId(trackId, streamId);
11786
+ const stream = this._unassociatedVideoStreams[key];
11787
+
11788
+ if (stream) {
11783
11789
  // Try to associate stream
11784
- this._associateStreamTo(this._unassociatedVideoStreams[trackId], participant);
11790
+ this._associateStreamTo(stream, participant);
11785
11791
 
11786
- delete this._unassociatedVideoStreams[trackId];
11792
+ delete this._unassociatedVideoStreams[key];
11787
11793
  delete this._unassociatedParticipants[participant.callId];
11788
11794
  }
11789
11795
  }
11790
11796
 
11797
+ _getUnassociatedMapIdFromTrackIdOrStreamId(trackId , streamId ) {
11798
+ // Find by trackId
11799
+ if (trackId in this._unassociatedVideoStreams) {
11800
+ return trackId;
11801
+ }
11802
+
11803
+ // Find by streamId
11804
+ if (streamId && streamId in this._unassociatedVideoStreams) {
11805
+ return streamId;
11806
+ }
11807
+
11808
+ // Find in all the streams by streamId (used on FF where we can't map by trackId)
11809
+ const idx = Object.values(this._unassociatedVideoStreams).findIndex((stream ) => stream.id === streamId);
11810
+ return idx === -1 ? null : Object.keys(this._unassociatedVideoStreams)[idx];
11811
+ }
11812
+
11813
+ _getStreamIdFrTrackId(trackId ) {
11814
+ const mapping = Object.values(this._callIdStreamIdMap).find((map ) => map.trackId === trackId);
11815
+
11816
+ return mapping ? mapping.streamId : null;
11817
+ }
11818
+
11791
11819
  _associateStreamTo(rawStream , participant ) {
11792
11820
  const stream = new Wazo.Stream(rawStream, participant);
11793
11821
  participant.streams.push(stream);
package/lib/index.js CHANGED
@@ -12733,9 +12733,11 @@ class Room extends Emitter {
12733
12733
  _onParticipantTrackUpdate(oldParticipant , update ) {
12734
12734
  const newParticipant = oldParticipant;
12735
12735
 
12736
- const { trackId } = this._callIdStreamIdMap[newParticipant.callId] || {};
12736
+ const { trackId, streamId } = this._callIdStreamIdMap[newParticipant.callId] || {};
12737
12737
  const pc = Wazo.Phone.phone.currentSipSession.sessionDescriptionHandler.peerConnection;
12738
- const stream = pc.getRemoteStreams().find(someStream => someStream.getTracks().some(track => track.id === trackId));
12738
+ // Can't use `getReceivers` here because on FF we make the mapping based on the streamId
12739
+ const stream = pc.getRemoteStreams().find(someStream =>
12740
+ someStream.id === streamId || someStream.getTracks().some(track => track.id === trackId));
12739
12741
 
12740
12742
  if (update === 'downgrade') {
12741
12743
  newParticipant.streams = [];
@@ -12765,15 +12767,41 @@ class Room extends Emitter {
12765
12767
  return;
12766
12768
  }
12767
12769
 
12768
- if (this._unassociatedVideoStreams[trackId]) {
12770
+ const streamId = this._getStreamIdFrTrackId(trackId);
12771
+ const key = this._getUnassociatedMapIdFromTrackIdOrStreamId(trackId, streamId);
12772
+ const stream = this._unassociatedVideoStreams[key];
12773
+
12774
+ if (stream) {
12769
12775
  // Try to associate stream
12770
- this._associateStreamTo(this._unassociatedVideoStreams[trackId], participant);
12776
+ this._associateStreamTo(stream, participant);
12771
12777
 
12772
- delete this._unassociatedVideoStreams[trackId];
12778
+ delete this._unassociatedVideoStreams[key];
12773
12779
  delete this._unassociatedParticipants[participant.callId];
12774
12780
  }
12775
12781
  }
12776
12782
 
12783
+ _getUnassociatedMapIdFromTrackIdOrStreamId(trackId , streamId ) {
12784
+ // Find by trackId
12785
+ if (trackId in this._unassociatedVideoStreams) {
12786
+ return trackId;
12787
+ }
12788
+
12789
+ // Find by streamId
12790
+ if (streamId && streamId in this._unassociatedVideoStreams) {
12791
+ return streamId;
12792
+ }
12793
+
12794
+ // Find in all the streams by streamId (used on FF where we can't map by trackId)
12795
+ const idx = Object.values(this._unassociatedVideoStreams).findIndex((stream ) => stream.id === streamId);
12796
+ return idx === -1 ? null : Object.keys(this._unassociatedVideoStreams)[idx];
12797
+ }
12798
+
12799
+ _getStreamIdFrTrackId(trackId ) {
12800
+ const mapping = Object.values(this._callIdStreamIdMap).find((map ) => map.trackId === trackId);
12801
+
12802
+ return mapping ? mapping.streamId : null;
12803
+ }
12804
+
12777
12805
  _associateStreamTo(rawStream , participant ) {
12778
12806
  const stream = new Wazo.Stream(rawStream, participant);
12779
12807
  participant.streams.push(stream);
@@ -11497,9 +11497,11 @@ class Room$1 extends Emitter {
11497
11497
  _onParticipantTrackUpdate(oldParticipant , update ) {
11498
11498
  const newParticipant = oldParticipant;
11499
11499
 
11500
- const { trackId } = this._callIdStreamIdMap[newParticipant.callId] || {};
11500
+ const { trackId, streamId } = this._callIdStreamIdMap[newParticipant.callId] || {};
11501
11501
  const pc = Wazo.Phone.phone.currentSipSession.sessionDescriptionHandler.peerConnection;
11502
- const stream = pc.getRemoteStreams().find(someStream => someStream.getTracks().some(track => track.id === trackId));
11502
+ // Can't use `getReceivers` here because on FF we make the mapping based on the streamId
11503
+ const stream = pc.getRemoteStreams().find(someStream =>
11504
+ someStream.id === streamId || someStream.getTracks().some(track => track.id === trackId));
11503
11505
 
11504
11506
  if (update === 'downgrade') {
11505
11507
  newParticipant.streams = [];
@@ -11529,15 +11531,41 @@ class Room$1 extends Emitter {
11529
11531
  return;
11530
11532
  }
11531
11533
 
11532
- if (this._unassociatedVideoStreams[trackId]) {
11534
+ const streamId = this._getStreamIdFrTrackId(trackId);
11535
+ const key = this._getUnassociatedMapIdFromTrackIdOrStreamId(trackId, streamId);
11536
+ const stream = this._unassociatedVideoStreams[key];
11537
+
11538
+ if (stream) {
11533
11539
  // Try to associate stream
11534
- this._associateStreamTo(this._unassociatedVideoStreams[trackId], participant);
11540
+ this._associateStreamTo(stream, participant);
11535
11541
 
11536
- delete this._unassociatedVideoStreams[trackId];
11542
+ delete this._unassociatedVideoStreams[key];
11537
11543
  delete this._unassociatedParticipants[participant.callId];
11538
11544
  }
11539
11545
  }
11540
11546
 
11547
+ _getUnassociatedMapIdFromTrackIdOrStreamId(trackId , streamId ) {
11548
+ // Find by trackId
11549
+ if (trackId in this._unassociatedVideoStreams) {
11550
+ return trackId;
11551
+ }
11552
+
11553
+ // Find by streamId
11554
+ if (streamId && streamId in this._unassociatedVideoStreams) {
11555
+ return streamId;
11556
+ }
11557
+
11558
+ // Find in all the streams by streamId (used on FF where we can't map by trackId)
11559
+ const idx = Object.values(this._unassociatedVideoStreams).findIndex((stream ) => stream.id === streamId);
11560
+ return idx === -1 ? null : Object.keys(this._unassociatedVideoStreams)[idx];
11561
+ }
11562
+
11563
+ _getStreamIdFrTrackId(trackId ) {
11564
+ const mapping = Object.values(this._callIdStreamIdMap).find((map ) => map.trackId === trackId);
11565
+
11566
+ return mapping ? mapping.streamId : null;
11567
+ }
11568
+
11541
11569
  _associateStreamTo(rawStream , participant ) {
11542
11570
  const stream = new Wazo.Stream(rawStream, participant);
11543
11571
  participant.streams.push(stream);
@@ -11495,9 +11495,11 @@ class Room$1 extends Emitter {
11495
11495
  _onParticipantTrackUpdate(oldParticipant , update ) {
11496
11496
  const newParticipant = oldParticipant;
11497
11497
 
11498
- const { trackId } = this._callIdStreamIdMap[newParticipant.callId] || {};
11498
+ const { trackId, streamId } = this._callIdStreamIdMap[newParticipant.callId] || {};
11499
11499
  const pc = Wazo.Phone.phone.currentSipSession.sessionDescriptionHandler.peerConnection;
11500
- const stream = pc.getRemoteStreams().find(someStream => someStream.getTracks().some(track => track.id === trackId));
11500
+ // Can't use `getReceivers` here because on FF we make the mapping based on the streamId
11501
+ const stream = pc.getRemoteStreams().find(someStream =>
11502
+ someStream.id === streamId || someStream.getTracks().some(track => track.id === trackId));
11501
11503
 
11502
11504
  if (update === 'downgrade') {
11503
11505
  newParticipant.streams = [];
@@ -11527,15 +11529,41 @@ class Room$1 extends Emitter {
11527
11529
  return;
11528
11530
  }
11529
11531
 
11530
- if (this._unassociatedVideoStreams[trackId]) {
11532
+ const streamId = this._getStreamIdFrTrackId(trackId);
11533
+ const key = this._getUnassociatedMapIdFromTrackIdOrStreamId(trackId, streamId);
11534
+ const stream = this._unassociatedVideoStreams[key];
11535
+
11536
+ if (stream) {
11531
11537
  // Try to associate stream
11532
- this._associateStreamTo(this._unassociatedVideoStreams[trackId], participant);
11538
+ this._associateStreamTo(stream, participant);
11533
11539
 
11534
- delete this._unassociatedVideoStreams[trackId];
11540
+ delete this._unassociatedVideoStreams[key];
11535
11541
  delete this._unassociatedParticipants[participant.callId];
11536
11542
  }
11537
11543
  }
11538
11544
 
11545
+ _getUnassociatedMapIdFromTrackIdOrStreamId(trackId , streamId ) {
11546
+ // Find by trackId
11547
+ if (trackId in this._unassociatedVideoStreams) {
11548
+ return trackId;
11549
+ }
11550
+
11551
+ // Find by streamId
11552
+ if (streamId && streamId in this._unassociatedVideoStreams) {
11553
+ return streamId;
11554
+ }
11555
+
11556
+ // Find in all the streams by streamId (used on FF where we can't map by trackId)
11557
+ const idx = Object.values(this._unassociatedVideoStreams).findIndex((stream ) => stream.id === streamId);
11558
+ return idx === -1 ? null : Object.keys(this._unassociatedVideoStreams)[idx];
11559
+ }
11560
+
11561
+ _getStreamIdFrTrackId(trackId ) {
11562
+ const mapping = Object.values(this._callIdStreamIdMap).find((map ) => map.trackId === trackId);
11563
+
11564
+ return mapping ? mapping.streamId : null;
11565
+ }
11566
+
11539
11567
  _associateStreamTo(rawStream , participant ) {
11540
11568
  const stream = new Wazo.Stream(rawStream, participant);
11541
11569
  participant.streams.push(stream);
@@ -11368,9 +11368,11 @@ class Room$1 extends Emitter {
11368
11368
  _onParticipantTrackUpdate(oldParticipant , update ) {
11369
11369
  const newParticipant = oldParticipant;
11370
11370
 
11371
- const { trackId } = this._callIdStreamIdMap[newParticipant.callId] || {};
11371
+ const { trackId, streamId } = this._callIdStreamIdMap[newParticipant.callId] || {};
11372
11372
  const pc = Wazo.Phone.phone.currentSipSession.sessionDescriptionHandler.peerConnection;
11373
- const stream = pc.getRemoteStreams().find(someStream => someStream.getTracks().some(track => track.id === trackId));
11373
+ // Can't use `getReceivers` here because on FF we make the mapping based on the streamId
11374
+ const stream = pc.getRemoteStreams().find(someStream =>
11375
+ someStream.id === streamId || someStream.getTracks().some(track => track.id === trackId));
11374
11376
 
11375
11377
  if (update === 'downgrade') {
11376
11378
  newParticipant.streams = [];
@@ -11400,15 +11402,41 @@ class Room$1 extends Emitter {
11400
11402
  return;
11401
11403
  }
11402
11404
 
11403
- if (this._unassociatedVideoStreams[trackId]) {
11405
+ const streamId = this._getStreamIdFrTrackId(trackId);
11406
+ const key = this._getUnassociatedMapIdFromTrackIdOrStreamId(trackId, streamId);
11407
+ const stream = this._unassociatedVideoStreams[key];
11408
+
11409
+ if (stream) {
11404
11410
  // Try to associate stream
11405
- this._associateStreamTo(this._unassociatedVideoStreams[trackId], participant);
11411
+ this._associateStreamTo(stream, participant);
11406
11412
 
11407
- delete this._unassociatedVideoStreams[trackId];
11413
+ delete this._unassociatedVideoStreams[key];
11408
11414
  delete this._unassociatedParticipants[participant.callId];
11409
11415
  }
11410
11416
  }
11411
11417
 
11418
+ _getUnassociatedMapIdFromTrackIdOrStreamId(trackId , streamId ) {
11419
+ // Find by trackId
11420
+ if (trackId in this._unassociatedVideoStreams) {
11421
+ return trackId;
11422
+ }
11423
+
11424
+ // Find by streamId
11425
+ if (streamId && streamId in this._unassociatedVideoStreams) {
11426
+ return streamId;
11427
+ }
11428
+
11429
+ // Find in all the streams by streamId (used on FF where we can't map by trackId)
11430
+ const idx = Object.values(this._unassociatedVideoStreams).findIndex((stream ) => stream.id === streamId);
11431
+ return idx === -1 ? null : Object.keys(this._unassociatedVideoStreams)[idx];
11432
+ }
11433
+
11434
+ _getStreamIdFrTrackId(trackId ) {
11435
+ const mapping = Object.values(this._callIdStreamIdMap).find((map ) => map.trackId === trackId);
11436
+
11437
+ return mapping ? mapping.streamId : null;
11438
+ }
11439
+
11412
11440
  _associateStreamTo(rawStream , participant ) {
11413
11441
  const stream = new Wazo.Stream(rawStream, participant);
11414
11442
  participant.streams.push(stream);
@@ -11757,9 +11757,11 @@ class Room$1 extends Emitter {
11757
11757
  _onParticipantTrackUpdate(oldParticipant , update ) {
11758
11758
  const newParticipant = oldParticipant;
11759
11759
 
11760
- const { trackId } = this._callIdStreamIdMap[newParticipant.callId] || {};
11760
+ const { trackId, streamId } = this._callIdStreamIdMap[newParticipant.callId] || {};
11761
11761
  const pc = Wazo.Phone.phone.currentSipSession.sessionDescriptionHandler.peerConnection;
11762
- const stream = pc.getRemoteStreams().find(someStream => someStream.getTracks().some(track => track.id === trackId));
11762
+ // Can't use `getReceivers` here because on FF we make the mapping based on the streamId
11763
+ const stream = pc.getRemoteStreams().find(someStream =>
11764
+ someStream.id === streamId || someStream.getTracks().some(track => track.id === trackId));
11763
11765
 
11764
11766
  if (update === 'downgrade') {
11765
11767
  newParticipant.streams = [];
@@ -11789,15 +11791,41 @@ class Room$1 extends Emitter {
11789
11791
  return;
11790
11792
  }
11791
11793
 
11792
- if (this._unassociatedVideoStreams[trackId]) {
11794
+ const streamId = this._getStreamIdFrTrackId(trackId);
11795
+ const key = this._getUnassociatedMapIdFromTrackIdOrStreamId(trackId, streamId);
11796
+ const stream = this._unassociatedVideoStreams[key];
11797
+
11798
+ if (stream) {
11793
11799
  // Try to associate stream
11794
- this._associateStreamTo(this._unassociatedVideoStreams[trackId], participant);
11800
+ this._associateStreamTo(stream, participant);
11795
11801
 
11796
- delete this._unassociatedVideoStreams[trackId];
11802
+ delete this._unassociatedVideoStreams[key];
11797
11803
  delete this._unassociatedParticipants[participant.callId];
11798
11804
  }
11799
11805
  }
11800
11806
 
11807
+ _getUnassociatedMapIdFromTrackIdOrStreamId(trackId , streamId ) {
11808
+ // Find by trackId
11809
+ if (trackId in this._unassociatedVideoStreams) {
11810
+ return trackId;
11811
+ }
11812
+
11813
+ // Find by streamId
11814
+ if (streamId && streamId in this._unassociatedVideoStreams) {
11815
+ return streamId;
11816
+ }
11817
+
11818
+ // Find in all the streams by streamId (used on FF where we can't map by trackId)
11819
+ const idx = Object.values(this._unassociatedVideoStreams).findIndex((stream ) => stream.id === streamId);
11820
+ return idx === -1 ? null : Object.keys(this._unassociatedVideoStreams)[idx];
11821
+ }
11822
+
11823
+ _getStreamIdFrTrackId(trackId ) {
11824
+ const mapping = Object.values(this._callIdStreamIdMap).find((map ) => map.trackId === trackId);
11825
+
11826
+ return mapping ? mapping.streamId : null;
11827
+ }
11828
+
11801
11829
  _associateStreamTo(rawStream , participant ) {
11802
11830
  const stream = new Wazo.Stream(rawStream, participant);
11803
11831
  participant.streams.push(stream);
@@ -12623,9 +12623,11 @@ class Room extends Emitter {
12623
12623
  _onParticipantTrackUpdate(oldParticipant , update ) {
12624
12624
  const newParticipant = oldParticipant;
12625
12625
 
12626
- const { trackId } = this._callIdStreamIdMap[newParticipant.callId] || {};
12626
+ const { trackId, streamId } = this._callIdStreamIdMap[newParticipant.callId] || {};
12627
12627
  const pc = Wazo.Phone.phone.currentSipSession.sessionDescriptionHandler.peerConnection;
12628
- const stream = pc.getRemoteStreams().find(someStream => someStream.getTracks().some(track => track.id === trackId));
12628
+ // Can't use `getReceivers` here because on FF we make the mapping based on the streamId
12629
+ const stream = pc.getRemoteStreams().find(someStream =>
12630
+ someStream.id === streamId || someStream.getTracks().some(track => track.id === trackId));
12629
12631
 
12630
12632
  if (update === 'downgrade') {
12631
12633
  newParticipant.streams = [];
@@ -12655,15 +12657,41 @@ class Room extends Emitter {
12655
12657
  return;
12656
12658
  }
12657
12659
 
12658
- if (this._unassociatedVideoStreams[trackId]) {
12660
+ const streamId = this._getStreamIdFrTrackId(trackId);
12661
+ const key = this._getUnassociatedMapIdFromTrackIdOrStreamId(trackId, streamId);
12662
+ const stream = this._unassociatedVideoStreams[key];
12663
+
12664
+ if (stream) {
12659
12665
  // Try to associate stream
12660
- this._associateStreamTo(this._unassociatedVideoStreams[trackId], participant);
12666
+ this._associateStreamTo(stream, participant);
12661
12667
 
12662
- delete this._unassociatedVideoStreams[trackId];
12668
+ delete this._unassociatedVideoStreams[key];
12663
12669
  delete this._unassociatedParticipants[participant.callId];
12664
12670
  }
12665
12671
  }
12666
12672
 
12673
+ _getUnassociatedMapIdFromTrackIdOrStreamId(trackId , streamId ) {
12674
+ // Find by trackId
12675
+ if (trackId in this._unassociatedVideoStreams) {
12676
+ return trackId;
12677
+ }
12678
+
12679
+ // Find by streamId
12680
+ if (streamId && streamId in this._unassociatedVideoStreams) {
12681
+ return streamId;
12682
+ }
12683
+
12684
+ // Find in all the streams by streamId (used on FF where we can't map by trackId)
12685
+ const idx = Object.values(this._unassociatedVideoStreams).findIndex((stream ) => stream.id === streamId);
12686
+ return idx === -1 ? null : Object.keys(this._unassociatedVideoStreams)[idx];
12687
+ }
12688
+
12689
+ _getStreamIdFrTrackId(trackId ) {
12690
+ const mapping = Object.values(this._callIdStreamIdMap).find((map ) => map.trackId === trackId);
12691
+
12692
+ return mapping ? mapping.streamId : null;
12693
+ }
12694
+
12667
12695
  _associateStreamTo(rawStream , participant ) {
12668
12696
  const stream = new Wazo.Stream(rawStream, participant);
12669
12697
  participant.streams.push(stream);
@@ -12628,9 +12628,11 @@ class Room extends Emitter {
12628
12628
  _onParticipantTrackUpdate(oldParticipant , update ) {
12629
12629
  const newParticipant = oldParticipant;
12630
12630
 
12631
- const { trackId } = this._callIdStreamIdMap[newParticipant.callId] || {};
12631
+ const { trackId, streamId } = this._callIdStreamIdMap[newParticipant.callId] || {};
12632
12632
  const pc = Wazo.Phone.phone.currentSipSession.sessionDescriptionHandler.peerConnection;
12633
- const stream = pc.getRemoteStreams().find(someStream => someStream.getTracks().some(track => track.id === trackId));
12633
+ // Can't use `getReceivers` here because on FF we make the mapping based on the streamId
12634
+ const stream = pc.getRemoteStreams().find(someStream =>
12635
+ someStream.id === streamId || someStream.getTracks().some(track => track.id === trackId));
12634
12636
 
12635
12637
  if (update === 'downgrade') {
12636
12638
  newParticipant.streams = [];
@@ -12660,15 +12662,41 @@ class Room extends Emitter {
12660
12662
  return;
12661
12663
  }
12662
12664
 
12663
- if (this._unassociatedVideoStreams[trackId]) {
12665
+ const streamId = this._getStreamIdFrTrackId(trackId);
12666
+ const key = this._getUnassociatedMapIdFromTrackIdOrStreamId(trackId, streamId);
12667
+ const stream = this._unassociatedVideoStreams[key];
12668
+
12669
+ if (stream) {
12664
12670
  // Try to associate stream
12665
- this._associateStreamTo(this._unassociatedVideoStreams[trackId], participant);
12671
+ this._associateStreamTo(stream, participant);
12666
12672
 
12667
- delete this._unassociatedVideoStreams[trackId];
12673
+ delete this._unassociatedVideoStreams[key];
12668
12674
  delete this._unassociatedParticipants[participant.callId];
12669
12675
  }
12670
12676
  }
12671
12677
 
12678
+ _getUnassociatedMapIdFromTrackIdOrStreamId(trackId , streamId ) {
12679
+ // Find by trackId
12680
+ if (trackId in this._unassociatedVideoStreams) {
12681
+ return trackId;
12682
+ }
12683
+
12684
+ // Find by streamId
12685
+ if (streamId && streamId in this._unassociatedVideoStreams) {
12686
+ return streamId;
12687
+ }
12688
+
12689
+ // Find in all the streams by streamId (used on FF where we can't map by trackId)
12690
+ const idx = Object.values(this._unassociatedVideoStreams).findIndex((stream ) => stream.id === streamId);
12691
+ return idx === -1 ? null : Object.keys(this._unassociatedVideoStreams)[idx];
12692
+ }
12693
+
12694
+ _getStreamIdFrTrackId(trackId ) {
12695
+ const mapping = Object.values(this._callIdStreamIdMap).find((map ) => map.trackId === trackId);
12696
+
12697
+ return mapping ? mapping.streamId : null;
12698
+ }
12699
+
12672
12700
  _associateStreamTo(rawStream , participant ) {
12673
12701
  const stream = new Wazo.Stream(rawStream, participant);
12674
12702
  participant.streams.push(stream);
@@ -12902,9 +12902,11 @@ class Room extends Emitter {
12902
12902
  _onParticipantTrackUpdate(oldParticipant , update ) {
12903
12903
  const newParticipant = oldParticipant;
12904
12904
 
12905
- const { trackId } = this._callIdStreamIdMap[newParticipant.callId] || {};
12905
+ const { trackId, streamId } = this._callIdStreamIdMap[newParticipant.callId] || {};
12906
12906
  const pc = Wazo.Phone.phone.currentSipSession.sessionDescriptionHandler.peerConnection;
12907
- const stream = pc.getRemoteStreams().find(someStream => someStream.getTracks().some(track => track.id === trackId));
12907
+ // Can't use `getReceivers` here because on FF we make the mapping based on the streamId
12908
+ const stream = pc.getRemoteStreams().find(someStream =>
12909
+ someStream.id === streamId || someStream.getTracks().some(track => track.id === trackId));
12908
12910
 
12909
12911
  if (update === 'downgrade') {
12910
12912
  newParticipant.streams = [];
@@ -12934,15 +12936,41 @@ class Room extends Emitter {
12934
12936
  return;
12935
12937
  }
12936
12938
 
12937
- if (this._unassociatedVideoStreams[trackId]) {
12939
+ const streamId = this._getStreamIdFrTrackId(trackId);
12940
+ const key = this._getUnassociatedMapIdFromTrackIdOrStreamId(trackId, streamId);
12941
+ const stream = this._unassociatedVideoStreams[key];
12942
+
12943
+ if (stream) {
12938
12944
  // Try to associate stream
12939
- this._associateStreamTo(this._unassociatedVideoStreams[trackId], participant);
12945
+ this._associateStreamTo(stream, participant);
12940
12946
 
12941
- delete this._unassociatedVideoStreams[trackId];
12947
+ delete this._unassociatedVideoStreams[key];
12942
12948
  delete this._unassociatedParticipants[participant.callId];
12943
12949
  }
12944
12950
  }
12945
12951
 
12952
+ _getUnassociatedMapIdFromTrackIdOrStreamId(trackId , streamId ) {
12953
+ // Find by trackId
12954
+ if (trackId in this._unassociatedVideoStreams) {
12955
+ return trackId;
12956
+ }
12957
+
12958
+ // Find by streamId
12959
+ if (streamId && streamId in this._unassociatedVideoStreams) {
12960
+ return streamId;
12961
+ }
12962
+
12963
+ // Find in all the streams by streamId (used on FF where we can't map by trackId)
12964
+ const idx = Object.values(this._unassociatedVideoStreams).findIndex((stream ) => stream.id === streamId);
12965
+ return idx === -1 ? null : Object.keys(this._unassociatedVideoStreams)[idx];
12966
+ }
12967
+
12968
+ _getStreamIdFrTrackId(trackId ) {
12969
+ const mapping = Object.values(this._callIdStreamIdMap).find((map ) => map.trackId === trackId);
12970
+
12971
+ return mapping ? mapping.streamId : null;
12972
+ }
12973
+
12946
12974
  _associateStreamTo(rawStream , participant ) {
12947
12975
  const stream = new Wazo.Stream(rawStream, participant);
12948
12976
  participant.streams.push(stream);
@@ -12915,9 +12915,11 @@ class Room extends Emitter {
12915
12915
  _onParticipantTrackUpdate(oldParticipant , update ) {
12916
12916
  const newParticipant = oldParticipant;
12917
12917
 
12918
- const { trackId } = this._callIdStreamIdMap[newParticipant.callId] || {};
12918
+ const { trackId, streamId } = this._callIdStreamIdMap[newParticipant.callId] || {};
12919
12919
  const pc = Wazo.Phone.phone.currentSipSession.sessionDescriptionHandler.peerConnection;
12920
- const stream = pc.getRemoteStreams().find(someStream => someStream.getTracks().some(track => track.id === trackId));
12920
+ // Can't use `getReceivers` here because on FF we make the mapping based on the streamId
12921
+ const stream = pc.getRemoteStreams().find(someStream =>
12922
+ someStream.id === streamId || someStream.getTracks().some(track => track.id === trackId));
12921
12923
 
12922
12924
  if (update === 'downgrade') {
12923
12925
  newParticipant.streams = [];
@@ -12947,15 +12949,41 @@ class Room extends Emitter {
12947
12949
  return;
12948
12950
  }
12949
12951
 
12950
- if (this._unassociatedVideoStreams[trackId]) {
12952
+ const streamId = this._getStreamIdFrTrackId(trackId);
12953
+ const key = this._getUnassociatedMapIdFromTrackIdOrStreamId(trackId, streamId);
12954
+ const stream = this._unassociatedVideoStreams[key];
12955
+
12956
+ if (stream) {
12951
12957
  // Try to associate stream
12952
- this._associateStreamTo(this._unassociatedVideoStreams[trackId], participant);
12958
+ this._associateStreamTo(stream, participant);
12953
12959
 
12954
- delete this._unassociatedVideoStreams[trackId];
12960
+ delete this._unassociatedVideoStreams[key];
12955
12961
  delete this._unassociatedParticipants[participant.callId];
12956
12962
  }
12957
12963
  }
12958
12964
 
12965
+ _getUnassociatedMapIdFromTrackIdOrStreamId(trackId , streamId ) {
12966
+ // Find by trackId
12967
+ if (trackId in this._unassociatedVideoStreams) {
12968
+ return trackId;
12969
+ }
12970
+
12971
+ // Find by streamId
12972
+ if (streamId && streamId in this._unassociatedVideoStreams) {
12973
+ return streamId;
12974
+ }
12975
+
12976
+ // Find in all the streams by streamId (used on FF where we can't map by trackId)
12977
+ const idx = Object.values(this._unassociatedVideoStreams).findIndex((stream ) => stream.id === streamId);
12978
+ return idx === -1 ? null : Object.keys(this._unassociatedVideoStreams)[idx];
12979
+ }
12980
+
12981
+ _getStreamIdFrTrackId(trackId ) {
12982
+ const mapping = Object.values(this._callIdStreamIdMap).find((map ) => map.trackId === trackId);
12983
+
12984
+ return mapping ? mapping.streamId : null;
12985
+ }
12986
+
12959
12987
  _associateStreamTo(rawStream , participant ) {
12960
12988
  const stream = new Wazo.Stream(rawStream, participant);
12961
12989
  participant.streams.push(stream);