Skip to content

Commit d8bb6e2

Browse files
committed
fix: emit track-muted event for local tracks
1 parent 579ad43 commit d8bb6e2

File tree

3 files changed

+26
-4
lines changed

3 files changed

+26
-4
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
patch type="fixed" package="livekit" "Emit TrackMuted/TrackUnmuted events for local publications"

livekit/src/room/participant/local_participant.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,14 @@ impl LocalParticipant {
119119
}
120120

121121
pub(crate) fn update_info(&self, info: proto::ParticipantInfo) {
122-
super::update_info(&self.inner, &Participant::Local(self.clone()), info);
122+
super::update_info(&self.inner, &Participant::Local(self.clone()), info.clone());
123+
124+
for track in info.tracks {
125+
let track_sid = track.sid.clone().try_into().unwrap();
126+
if let Some(publication) = self.get_track_publication(&track_sid) {
127+
publication.update_info(track.clone());
128+
}
129+
}
123130
}
124131

125132
pub(crate) fn set_speaking(&self, speaking: bool) {

livekit/src/room/publication/local.rs

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,23 @@ impl LocalTrackPublication {
6565
self.inner.info.read().proto_info.clone()
6666
}
6767

68-
#[allow(dead_code)]
69-
pub(crate) fn update_info(&self, info: proto::TrackInfo) {
70-
super::update_info(&self.inner, &TrackPublication::Local(self.clone()), info);
68+
pub(crate) fn update_info(&self, new_info: proto::TrackInfo) {
69+
super::update_info(&self.inner, &TrackPublication::Local(self.clone()), new_info.clone());
70+
71+
let mut info = self.inner.info.write();
72+
if info.muted != new_info.muted {
73+
info.muted = new_info.muted;
74+
75+
drop(info);
76+
77+
if new_info.muted {
78+
if let Some(on_mute) = self.inner.events.muted.lock().as_ref() {
79+
on_mute(TrackPublication::Local(self.clone()));
80+
}
81+
} else if let Some(on_unmute) = self.inner.events.unmuted.lock().as_ref() {
82+
on_unmute(TrackPublication::Local(self.clone()));
83+
}
84+
}
7185
}
7286

7387
pub(crate) fn update_publish_options(&self, opts: TrackPublishOptions) {

0 commit comments

Comments
 (0)