1use konjure_web::{FrameInput, SessionInput};
4use wasm_bindgen::prelude::*;
5
6#[cfg(target_arch = "wasm32")]
8#[wasm_bindgen]
9pub async fn browser_capabilities() -> Result<konjure_web::BrowserCapabilities, JsValue> {
10 konjure_web::browser::discover_capabilities().await
11}
12
13#[wasm_bindgen]
15pub struct BrowserSession {
16 inner: konjure_web::BrowserSession,
17}
18
19#[wasm_bindgen]
20impl BrowserSession {
21 #[wasm_bindgen(constructor)]
23 pub fn new(playing: bool) -> Self {
24 Self {
25 inner: konjure_web::BrowserSession::new(playing),
26 }
27 }
28
29 pub fn frame(&mut self, timestamp_ms: f64) -> Result<f64, JsValue> {
31 self.inner
32 .frame(FrameInput { timestamp_ms })
33 .map(|frame| frame.time_seconds)
34 .map_err(super::json_error)
35 }
36
37 #[wasm_bindgen(getter)]
39 pub fn playing(&self) -> bool {
40 self.inner.playing()
41 }
42
43 #[wasm_bindgen(getter)]
45 pub fn time(&self) -> f64 {
46 self.inner.time_seconds()
47 }
48
49 #[wasm_bindgen(getter)]
51 pub fn active(&self) -> bool {
52 self.inner.active()
53 }
54
55 pub fn set_playing(&mut self, value: bool) -> Result<(), JsValue> {
57 self.inner
58 .apply(SessionInput::Playing(value))
59 .map_err(super::json_error)
60 }
61
62 pub fn seek(&mut self, time: f64) -> Result<(), JsValue> {
64 self.inner
65 .apply(SessionInput::Seek(time))
66 .map_err(super::json_error)
67 }
68
69 pub fn set_visible(&mut self, value: bool) -> Result<(), JsValue> {
71 self.inner
72 .apply(SessionInput::Visible(value))
73 .map_err(super::json_error)
74 }
75
76 pub fn set_context_available(&mut self, value: bool) -> Result<(), JsValue> {
78 self.inner
79 .apply(SessionInput::ContextAvailable(value))
80 .map_err(super::json_error)
81 }
82
83 pub fn set_immersive(&mut self, value: bool) -> Result<(), JsValue> {
85 self.inner
86 .apply(SessionInput::Immersive(value))
87 .map_err(super::json_error)
88 }
89}