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