@@ -32,9 +32,9 @@ open class LocalMedia: ObservableObject {
3232 @Published public private( set) var cameraTrack : ( any VideoTrack ) ?
3333 @Published public private( set) var screenShareTrack : ( any VideoTrack ) ?
3434
35- public var isMicrophoneEnabled : Bool { microphoneTrack != nil }
36- public var isCameraEnabled : Bool { cameraTrack != nil }
37- public var isScreenShareEnabled : Bool { screenShareTrack != nil }
35+ @ Published public private ( set ) var isMicrophoneEnabled : Bool = false
36+ @ Published public private ( set ) var isCameraEnabled : Bool = false
37+ @ Published public private ( set ) var isScreenShareEnabled : Bool = false
3838
3939 @Published public private( set) var audioDevices : [ AudioDevice ] = AudioManager . shared. inputDevices
4040 @Published public private( set) var selectedAudioDeviceID : String = AudioManager . shared. inputDevice. deviceId
@@ -46,29 +46,37 @@ open class LocalMedia: ObservableObject {
4646
4747 // MARK: - Dependencies
4848
49- private var room : Room
49+ private var localParticipant : LocalParticipant
5050
5151 // MARK: - Initialization
5252
53- public init ( room : Room ) {
54- self . room = room
53+ public init ( localParticipant : LocalParticipant ) {
54+ self . localParticipant = localParticipant
5555
56- observe ( room : room )
56+ observe ( localParticipant : localParticipant )
5757 observeDevices ( )
5858 }
5959
60+ public convenience init ( room: Room ) {
61+ self . init ( localParticipant: room. localParticipant)
62+ }
63+
6064 public convenience init ( conversation: Conversation ) {
6165 self . init ( room: conversation. room)
6266 }
6367
64- private func observe( room : Room ) {
68+ private func observe( localParticipant : LocalParticipant ) {
6569 Task { [ weak self] in
66- for try await _ in room . changes {
70+ for try await _ in localParticipant . changes {
6771 guard let self else { return }
6872
69- microphoneTrack = room. localParticipant. firstAudioTrack
70- cameraTrack = room. localParticipant. firstCameraVideoTrack
71- screenShareTrack = room. localParticipant. firstScreenShareVideoTrack
73+ microphoneTrack = localParticipant. firstAudioTrack
74+ cameraTrack = localParticipant. firstCameraVideoTrack
75+ screenShareTrack = localParticipant. firstScreenShareVideoTrack
76+
77+ isMicrophoneEnabled = localParticipant. isMicrophoneEnabled ( )
78+ isCameraEnabled = localParticipant. isCameraEnabled ( )
79+ isScreenShareEnabled = localParticipant. isScreenShareEnabled ( )
7280 }
7381 }
7482 }
@@ -101,7 +109,7 @@ open class LocalMedia: ObservableObject {
101109
102110 public func toggleMicrophone( ) async {
103111 do {
104- try await room . localParticipant. setMicrophone ( enabled: !isMicrophoneEnabled)
112+ try await localParticipant. setMicrophone ( enabled: !isMicrophoneEnabled)
105113 } catch {
106114 self . error = . mediaDevice( error)
107115 }
@@ -111,11 +119,11 @@ open class LocalMedia: ObservableObject {
111119 let enable = !isCameraEnabled
112120 do {
113121 if enable, disableScreenShare, isScreenShareEnabled {
114- try await room . localParticipant. setScreenShare ( enabled: false )
122+ try await localParticipant. setScreenShare ( enabled: false )
115123 }
116124
117125 let device = try await CameraCapturer . captureDevices ( ) . first ( where: { $0. uniqueID == selectedVideoDeviceID } )
118- try await room . localParticipant. setCamera ( enabled: enable, captureOptions: CameraCaptureOptions ( device: device) )
126+ try await localParticipant. setCamera ( enabled: enable, captureOptions: CameraCaptureOptions ( device: device) )
119127 } catch {
120128 self . error = . mediaDevice( error)
121129 }
@@ -125,9 +133,9 @@ open class LocalMedia: ObservableObject {
125133 let enable = !isScreenShareEnabled
126134 do {
127135 if enable, disableCamera, isCameraEnabled {
128- try await room . localParticipant. setCamera ( enabled: false )
136+ try await localParticipant. setCamera ( enabled: false )
129137 }
130- try await room . localParticipant. setScreenShare ( enabled: enable)
138+ try await localParticipant. setScreenShare ( enabled: enable)
131139 } catch {
132140 self . error = . mediaDevice( error)
133141 }
@@ -158,7 +166,7 @@ open class LocalMedia: ObservableObject {
158166 // MARK: - Private
159167
160168 private func getCameraCapturer( ) -> CameraCapturer ? {
161- guard let cameraTrack = room . localParticipant. firstCameraVideoTrack as? LocalVideoTrack else { return nil }
169+ guard let cameraTrack = localParticipant. firstCameraVideoTrack as? LocalVideoTrack else { return nil }
162170 return cameraTrack. capturer as? CameraCapturer
163171 }
164172}
0 commit comments