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::{
8 PathExt, Settings, ShortcutsExt, StatesExtCanvasClickThrough, StatesExtInitialRender,
9 StatesExtWidgetConfigMap, TrayExt, WindowExt,
10};
11use tauri::image::Image;
12use tauri::{generate_context, generate_handler, include_image, Builder};
13
14const DESKULPT_ICON: Image = include_image!("./icons/icon.png");
16
17pub fn run() {
19 Builder::default()
20 .setup(|app| {
21 app.init_widgets_dir()?;
22 app.init_persist_dir()?;
23
24 let mut settings = match Settings::load(app.persist_dir()?) {
25 Ok(settings) => settings,
26 Err(e) => {
27 eprintln!("Failed to load settings: {e}");
28 Settings::default()
29 },
30 };
31
32 app.manage_initial_render();
33 app.manage_widget_config_map();
34 app.manage_canvas_click_through();
35
36 #[cfg(target_os = "macos")]
39 app.set_activation_policy(tauri::ActivationPolicy::Accessory);
40
41 app.init_shortcuts(&mut settings);
42
43 app.create_manager(&settings)?;
44 app.create_canvas(&settings)?;
45 app.create_tray(DESKULPT_ICON)?;
46
47 Ok(())
48 })
49 .on_window_event(deskulpt_core::on_window_event)
50 .invoke_handler(generate_handler![
51 deskulpt_core::commands::call_plugin,
52 deskulpt_core::commands::bundle_widget,
53 deskulpt_core::commands::emit_on_render_ready,
54 deskulpt_core::commands::exit_app,
55 deskulpt_core::commands::open_widget,
56 deskulpt_core::commands::rescan_widgets,
57 deskulpt_core::commands::set_render_ready,
58 deskulpt_core::commands::update_shortcut,
59 ])
60 .plugin(tauri_plugin_clipboard_manager::init())
61 .plugin(tauri_plugin_global_shortcut::Builder::new().build())
62 .plugin(
65 tauri_plugin_opener::Builder::new()
66 .open_js_links_on_click(false)
67 .build(),
68 )
69 .run(generate_context!())
70 .expect("Error running the Deskulpt application");
71}