VRFS-5627 - VUs get busted when hovering over remote participants who change tracks/leave/change track settings

This commit is contained in:
Seth Call 2025-08-03 11:51:12 -05:00
parent f755e2b0a0
commit 6d2211cbb4
4 changed files with 43 additions and 5 deletions

View File

@ -648,7 +648,7 @@
]
const displayLogMethod = [
'SessionSetTrackVolumeData'
// 'SessionSetTrackVolumeData'
]
if(skipLogMethods.length > 0 && skipLogMethods.includes(prop)){

View File

@ -76,6 +76,18 @@ ptrCount = 0
if mixer && $.isArray(mixer)
mixer = mixer[0]
# if the mixer still doesn't exist, there is a state problem; the mixer is gone.
# This can happen in normal circumstances, where, if you have the VU open on a remote participant
# and that remote person does a 'Resync' in the session, that recreates all their mixer info.
# MAYBE we could fix this on the fly, but we don't have that information at hand (maybe we could see that tracks don't change between resync, and just 'update' the mixer' whereveer it's persisted for that track)
# However, the easiest thing to do in this moment is to close the VU, since it's been invalidated
# https://jamkazam.atlassian.net/browse/VRFS-5627marg
if !mixer?
console.warn("SessionTrackVolumeHover: mixer is gone, closing hover")
$container = jQuery(this.getDOMNode()).closest('.react-holder')
$container.data('bt').btOff()
return `<div></div>`
volume_left = mixer.volume_left
classes = classNames({

View File

@ -793,18 +793,33 @@ MIX_MODES = context.JK.MIX_MODES;
let originalVolume = this.getOriginalVolume(mixers, gainType);
if (controlGroup != null) {
mixers = [mixers[0]];
for (let mixer of mixers) {
for (let m of mixers) {
let broadcast = !(data.dragging);
mixer = this.fillTrackVolumeObject(mixer.id, mixer.mode, broadcast);
let mixer = this.fillTrackVolumeObject(m.id, m.mode, broadcast);
if (mixer == null) {
console.error("MixerHelper: faderChanged: mixer is null, skipping", m, gainType, controlGroup);
continue;
}
else {
//console.log("MixerHelper: faderChanged: mixer is not null, proceeding", m, gainType, controlGroup);
}
let relative = gainType === 'music' && (mixer.name === CategoryGroupIds.UserMedia || mixer.name === CategoryGroupIds.MediaTrack);
await this.setMixerVolume(mixer, data.percentage, relative, originalVolume, controlGroup);
mixer = this.getMixer(mixer.id, mixer.mode);
mixer.volume_left = context.trackVolumeObject.volL;
}
} else {
for (let mixer of mixers) {
for (let m of mixers) {
let broadcast = !(data.dragging);
mixer = this.fillTrackVolumeObject(mixer.id, mixer.mode, broadcast);
let mixer = this.fillTrackVolumeObject(m.id, m.mode, broadcast);
if (mixer == null) {
console.error("MixerHelper: faderChanged: mixer is null, skipping", m, gainType, controlGroup);
continue;
}
else {
//console.log("MixerHelper: faderChanged: mixer is not null, proceeding", m, gainType, controlGroup);
}
let relative = gainType === 'music' && (mixer.name === CategoryGroupIds.UserMedia || mixer.name === CategoryGroupIds.MediaTrack);
await this.setMixerVolume(mixer, data.percentage, relative, originalVolume);
mixer = this.getMixer(mixer.id, mixer.mode);
@ -1011,6 +1026,10 @@ MIX_MODES = context.JK.MIX_MODES;
_broadcast = broadcast
mixer = @getMixer(mixerId, mode)
if(mixer == null)
console.error("MixerHelper: fillTrackVolumeObject: unable to find mixer with ID: #{mixerId}, mode: #{mode}")
return null
context.trackVolumeObject.id = mixer.id
context.trackVolumeObject._id = mixer._id
context.trackVolumeObject.groupID = mixer.group_id

View File

@ -92,6 +92,13 @@ $session-screen-divider: 1190px;
}
}
.session-track + .session-track {
margin-left: 5px;
@include session-small {
margin-left: 5px;
}
}
.track-controls {
@include session-small {
margin-top: 8px;