1#![doc = include_str!("../README.md")]
2#![doc(
3 html_logo_url = "https://github.com/CSCI-SHU-410-SE-Project/Deskulpt/raw/main/src/public/deskulpt.svg",
4 html_favicon_url = "https://github.com/CSCI-SHU-410-SE-Project/Deskulpt/raw/main/src/public/deskulpt.svg"
5)]
6
7use deskulpt_core::path::PathExt;
8use deskulpt_core::states::{
9 CanvasImodeStateExt, InitialRenderStateExt, SettingsStateExt, WidgetConfigMapStateExt,
10};
11use deskulpt_core::tray::TrayExt;
12use deskulpt_core::window::WindowExt;
13use tauri::image::Image;
14use tauri::{generate_context, include_image, Builder, Wry};
15use tauri_specta::{collect_commands, collect_events};
16
17const DESKULPT_ICON: Image = include_image!("./icons/icon.png");
19
20pub fn get_bindings_builder() -> tauri_specta::Builder {
22 tauri_specta::Builder::<Wry>::new()
23 .commands(collect_commands![
24 deskulpt_core::commands::bundle_widget::<Wry>,
25 deskulpt_core::commands::call_plugin::<Wry>,
26 deskulpt_core::commands::emit_on_render_ready::<Wry>,
27 deskulpt_core::commands::exit_app::<Wry>,
28 deskulpt_core::commands::open_widget::<Wry>,
29 deskulpt_core::commands::rescan_widgets::<Wry>,
30 deskulpt_core::commands::set_render_ready::<Wry>,
31 deskulpt_core::commands::update_settings::<Wry>,
32 ])
33 .events(collect_events![
34 deskulpt_core::events::ExitAppEvent,
35 deskulpt_core::events::RemoveWidgetsEvent,
36 deskulpt_core::events::RenderWidgetsEvent,
37 deskulpt_core::events::ShowToastEvent,
38 deskulpt_core::events::SwitchThemeEvent,
39 deskulpt_core::events::UpdateSettingsEvent,
40 ])
41 .typ::<deskulpt_core::window::DeskulptWindow>()
42}
43
44pub fn run() {
46 let bindings_builder = get_bindings_builder();
47
48 Builder::default()
49 .invoke_handler(bindings_builder.invoke_handler())
50 .setup(move |app| {
51 bindings_builder.mount_events(app);
52
53 app.init_widgets_dir()?;
54 app.init_persist_dir()?;
55
56 app.manage_settings();
57 app.manage_initial_render();
58 app.manage_widget_config_map();
59 app.manage_canvas_imode();
60
61 #[cfg(target_os = "macos")]
64 app.set_activation_policy(tauri::ActivationPolicy::Accessory);
65
66 app.create_manager()?;
67 app.create_canvas()?;
68 app.create_tray(DESKULPT_ICON)?;
69
70 Ok(())
71 })
72 .on_window_event(deskulpt_core::window::on_window_event)
73 .plugin(tauri_plugin_clipboard_manager::init())
74 .plugin(tauri_plugin_global_shortcut::Builder::new().build())
75 .plugin(
78 tauri_plugin_opener::Builder::new()
79 .open_js_links_on_click(false)
80 .build(),
81 )
82 .run(generate_context!())
83 .expect("Error running the Deskulpt application");
84}