1- use crate :: core:: MaybeRwSignal ;
1+ use crate :: core:: { MaybeRwSignal , OptionLocalSignal } ;
22use default_struct_builder:: DefaultBuilder ;
33use js_sys:: { Object , Reflect } ;
44use leptos:: prelude:: * ;
5+ use send_wrapper:: SendWrapper ;
56use wasm_bindgen:: { JsCast , JsValue } ;
67
78/// Reactive [`mediaDevices.getUserMedia`](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia) streaming.
@@ -63,7 +64,7 @@ pub fn use_user_media_with_options(
6364
6465 let ( enabled, set_enabled) = enabled. into_signal ( ) ;
6566
66- let ( stream, set_stream) = signal_local ( None :: < Result < web_sys:: MediaStream , JsValue > > ) ;
67+ let ( stream, set_stream) = signal ( None :: < SendWrapper < Result < web_sys:: MediaStream , JsValue > > > ) ;
6768
6869 let _start = {
6970 let audio = audio. clone ( ) ;
@@ -78,7 +79,7 @@ pub fn use_user_media_with_options(
7879
7980 let stream = create_media ( Some ( video) , Some ( audio) ) . await ;
8081
81- set_stream. update ( |s| * s = Some ( stream) ) ;
82+ set_stream. update ( |s| * s = Some ( SendWrapper :: new ( stream) ) ) ;
8283 }
8384
8485 #[ cfg( feature = "ssr" ) ]
@@ -90,7 +91,9 @@ pub fn use_user_media_with_options(
9091 } ;
9192
9293 let _stop = move || {
93- if let Some ( Ok ( stream) ) = stream. get_untracked ( ) {
94+ if let Some ( sendwrapped_stream) = stream. get_untracked ( )
95+ && let Ok ( stream) = sendwrapped_stream. as_ref ( )
96+ {
9497 for track in stream. get_tracks ( ) {
9598 track. unchecked_ref :: < web_sys:: MediaStreamTrack > ( ) . stop ( ) ;
9699 }
@@ -111,7 +114,9 @@ pub fn use_user_media_with_options(
111114 async move {
112115 _start ( ) . await ;
113116 stream. with_untracked ( move |stream| {
114- if let Some ( Ok ( _) ) = stream {
117+ if let Some ( sendwrapped_stream) = stream
118+ && sendwrapped_stream. as_ref ( ) . is_ok ( )
119+ {
115120 set_enabled. set ( true ) ;
116121 }
117122 } ) ;
@@ -311,7 +316,7 @@ where
311316 /// Initially this is `None` until `start` resolved successfully.
312317 /// In case the stream couldn't be started, for example because the user didn't grant permission,
313318 /// this has the value `Some(Err(...))`.
314- pub stream : Signal < Option < Result < web_sys:: MediaStream , JsValue > > , LocalStorage > ,
319+ pub stream : OptionLocalSignal < Result < web_sys:: MediaStream , JsValue > > ,
315320
316321 /// Starts the screen streaming. Triggers the ask for permission if not already granted.
317322 pub start : StartFn ,
0 commit comments