track.rs

 1use std::sync::Arc;
 2
 3use crate::{
 4    ParticipantIdentity, TrackSid,
 5    test::{TestServerAudioTrack, TestServerVideoTrack, WeakRoom},
 6};
 7
 8#[derive(Clone, Debug)]
 9pub struct LocalVideoTrack {}
10
11#[derive(Clone, Debug)]
12pub struct LocalAudioTrack {}
13
14#[derive(Clone, Debug)]
15pub struct RemoteVideoTrack {
16    pub(crate) server_track: Arc<TestServerVideoTrack>,
17    pub(crate) _room: WeakRoom,
18}
19
20#[derive(Clone, Debug)]
21pub struct RemoteAudioTrack {
22    pub(crate) server_track: Arc<TestServerAudioTrack>,
23    pub(crate) room: WeakRoom,
24}
25
26impl RemoteAudioTrack {
27    pub fn sid(&self) -> TrackSid {
28        self.server_track.sid.clone()
29    }
30
31    pub fn publisher_id(&self) -> ParticipantIdentity {
32        self.server_track.publisher_id.clone()
33    }
34
35    pub fn enabled(&self) -> bool {
36        if let Some(room) = self.room.upgrade() {
37            !room
38                .0
39                .lock()
40                .paused_audio_tracks
41                .contains(&self.server_track.sid)
42        } else {
43            false
44        }
45    }
46
47    pub fn set_enabled(&self, enabled: bool) {
48        let Some(room) = self.room.upgrade() else {
49            return;
50        };
51        if enabled {
52            room.0
53                .lock()
54                .paused_audio_tracks
55                .remove(&self.server_track.sid);
56        } else {
57            room.0
58                .lock()
59                .paused_audio_tracks
60                .insert(self.server_track.sid.clone());
61        }
62    }
63}
64
65impl RemoteVideoTrack {
66    pub fn sid(&self) -> TrackSid {
67        self.server_track.sid.clone()
68    }
69
70    pub fn publisher_id(&self) -> ParticipantIdentity {
71        self.server_track.publisher_id.clone()
72    }
73
74    pub(crate) fn set_enabled(&self, _enabled: bool) {}
75}