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}