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}