1mod event_loop;
9mod menu_state;
10mod server_generator;
11mod server_loop;
12mod server_status;
13mod tray_wrapper;
14use event_loop::setup_event_loop;
15use tray_wrapper::{TrayWrapper, TrayWrapperError};
16
17pub use server_generator::{ContinueRunning, ServerGenerator, ServerGeneratorResult};
19use thiserror::Error;
20
21pub fn create_tray_wrapper(
22 icon_data: &[u8],
23 version: Option<String>,
24 server_gen: ServerGenerator,
25) -> Result<(), CreateTrayWrapperError> {
26 let event_loop = setup_event_loop();
27 let mut tw = TrayWrapper::new(icon_data, version, event_loop.create_proxy(), server_gen)?;
28
29 #[cfg(target_os = "linux")]
31 {
32 gtk::init().unwrap();
33 }
34
35 event_loop.run_app(&mut tw)?;
36
37 Ok(())
38}
39
40#[derive(Error, Debug)]
41pub enum CreateTrayWrapperError {
42 #[error(transparent)]
43 TrayWrapper(#[from] TrayWrapperError),
44 #[error(transparent)]
45 Winit(#[from] winit::error::EventLoopError),
46 #[cfg(target_os = "linux")]
47 #[error("Gtk Failed to Init {0}")]
48 Gtk(#[from] glib::error::BoolError),
49}