publication.rs

  1use super::*;
  2
  3#[derive(Clone, Debug)]
  4pub enum TrackPublication {
  5    Local(LocalTrackPublication),
  6    Remote(RemoteTrackPublication),
  7}
  8
  9#[derive(Clone, Debug)]
 10pub struct LocalTrackPublication {
 11    pub(crate) sid: TrackSid,
 12    pub(crate) room: WeakRoom,
 13}
 14
 15#[derive(Clone, Debug)]
 16pub struct RemoteTrackPublication {
 17    pub(crate) sid: TrackSid,
 18    pub(crate) room: WeakRoom,
 19    pub(crate) track: RemoteTrack,
 20}
 21
 22impl TrackPublication {
 23    pub fn sid(&self) -> TrackSid {
 24        match self {
 25            TrackPublication::Local(track) => track.sid(),
 26            TrackPublication::Remote(track) => track.sid(),
 27        }
 28    }
 29
 30    pub fn is_muted(&self) -> bool {
 31        match self {
 32            TrackPublication::Local(track) => track.is_muted(),
 33            TrackPublication::Remote(track) => track.is_muted(),
 34        }
 35    }
 36}
 37
 38impl LocalTrackPublication {
 39    pub fn sid(&self) -> TrackSid {
 40        self.sid.clone()
 41    }
 42
 43    pub fn mute(&self) {
 44        self.set_mute(true)
 45    }
 46
 47    pub fn unmute(&self) {
 48        self.set_mute(false)
 49    }
 50
 51    fn set_mute(&self, mute: bool) {
 52        if let Some(room) = self.room.upgrade() {
 53            room.test_server()
 54                .set_track_muted(&room.token(), &self.sid, mute)
 55                .ok();
 56        }
 57    }
 58
 59    pub fn is_muted(&self) -> bool {
 60        if let Some(room) = self.room.upgrade() {
 61            room.test_server()
 62                .is_track_muted(&room.token(), &self.sid)
 63                .unwrap_or(false)
 64        } else {
 65            false
 66        }
 67    }
 68}
 69
 70impl RemoteTrackPublication {
 71    pub fn sid(&self) -> TrackSid {
 72        self.sid.clone()
 73    }
 74
 75    pub fn track(&self) -> Option<RemoteTrack> {
 76        Some(self.track.clone())
 77    }
 78
 79    pub fn kind(&self) -> TrackKind {
 80        self.track.kind()
 81    }
 82
 83    pub fn is_muted(&self) -> bool {
 84        if let Some(room) = self.room.upgrade() {
 85            room.test_server()
 86                .is_track_muted(&room.token(), &self.sid)
 87                .unwrap_or(false)
 88        } else {
 89            false
 90        }
 91    }
 92
 93    pub fn is_enabled(&self) -> bool {
 94        if let Some(room) = self.room.upgrade() {
 95            !room.0.lock().paused_audio_tracks.contains(&self.sid)
 96        } else {
 97            false
 98        }
 99    }
100
101    pub fn set_enabled(&self, enabled: bool) {
102        if let Some(room) = self.room.upgrade() {
103            let paused_audio_tracks = &mut room.0.lock().paused_audio_tracks;
104            if enabled {
105                paused_audio_tracks.remove(&self.sid);
106            } else {
107                paused_audio_tracks.insert(self.sid.clone());
108            }
109        }
110    }
111}