1use gpui::App;
2
3use crate::{RemoteTrack, TrackSid, test::WeakRoom};
4
5#[derive(Clone, Debug)]
6pub struct LocalTrackPublication {
7 pub(crate) sid: TrackSid,
8 pub(crate) room: WeakRoom,
9}
10
11#[derive(Clone, Debug)]
12pub struct RemoteTrackPublication {
13 pub(crate) sid: TrackSid,
14 pub(crate) room: WeakRoom,
15 pub(crate) track: RemoteTrack,
16}
17
18impl LocalTrackPublication {
19 pub fn sid(&self) -> TrackSid {
20 self.sid.clone()
21 }
22
23 pub fn mute(&self, _cx: &App) {
24 self.set_mute(true)
25 }
26
27 pub fn unmute(&self, _cx: &App) {
28 self.set_mute(false)
29 }
30
31 fn set_mute(&self, mute: bool) {
32 if let Some(room) = self.room.upgrade() {
33 room.test_server()
34 .set_track_muted(&room.token(), &self.sid, mute)
35 .ok();
36 }
37 }
38
39 pub fn is_muted(&self) -> bool {
40 if let Some(room) = self.room.upgrade() {
41 room.test_server()
42 .is_track_muted(&room.token(), &self.sid)
43 .unwrap_or(false)
44 } else {
45 false
46 }
47 }
48}
49
50impl RemoteTrackPublication {
51 pub fn sid(&self) -> TrackSid {
52 self.sid.clone()
53 }
54
55 pub fn track(&self) -> Option<RemoteTrack> {
56 Some(self.track.clone())
57 }
58
59 pub fn is_audio(&self) -> bool {
60 matches!(self.track, RemoteTrack::Audio(_))
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 pub fn is_enabled(&self) -> bool {
74 if let Some(room) = self.room.upgrade() {
75 !room.0.lock().paused_audio_tracks.contains(&self.sid)
76 } else {
77 false
78 }
79 }
80
81 pub fn set_enabled(&self, enabled: bool, _cx: &App) {
82 if let Some(room) = self.room.upgrade() {
83 let paused_audio_tracks = &mut room.0.lock().paused_audio_tracks;
84 if enabled {
85 paused_audio_tracks.remove(&self.sid);
86 } else {
87 paused_audio_tracks.insert(self.sid.clone());
88 }
89 }
90 }
91}