1use serde_json::Value;
5use tao::event_loop::EventLoopProxy;
6
7use crate::UserEvent;
8
9#[derive(Clone)]
10pub struct EventEmitter {
11 proxy: EventLoopProxy<UserEvent>,
12}
13
14impl EventEmitter {
15 pub(crate) fn new(proxy: EventLoopProxy<UserEvent>) -> Self {
16 Self { proxy }
17 }
18
19 pub fn emit(&self, name: &str, payload: Value) {
22 let payload_json = serde_json::to_string(&payload).unwrap_or_else(|_| "null".into());
23 let name_json = serde_json::to_string(name).unwrap_or_else(|_| "\"\"".into());
24 let js = format!(
25 "window.__shell_on_event && window.__shell_on_event({name_json}, {payload_json})"
26 );
27 let _ = self.proxy.send_event(UserEvent::Eval(js));
28 }
29}