tauri_plugin_app_control/
lib.rs

1use tauri::plugin::{Builder, TauriPlugin};
2use tauri::{Manager, Runtime};
3
4pub use models::*;
5
6#[cfg(desktop)]
7mod desktop;
8#[cfg(mobile)]
9mod mobile;
10
11mod error;
12mod models;
13mod commands;
14
15pub use error::{Error, Result}; // Ensure this is correct based on your error module
16
17#[cfg(desktop)]
18use desktop::AppControl;
19#[cfg(mobile)]
20use mobile::AppControl; // AppControl now correctly wraps PluginHandle
21
22/// Extensions to [`tauri::App`], [`tauri::AppHandle`], [`tauri::WebviewWindow`], [`tauri::Webview`] and [`tauri::Window`] to access the app control APIs.
23pub trait AppControlExt<R: Runtime> {
24    fn app_control(&self) -> &AppControl<R>;
25}
26
27impl<R: Runtime, T: Manager<R>> crate::AppControlExt<R> for T {
28    fn app_control(&self) -> &AppControl<R> {
29        self.state::<AppControl<R>>().inner()
30    }
31}
32
33/// Initializes the plugin.
34pub fn init<R: Runtime>() -> TauriPlugin<R> {
35    Builder::new("app-control")
36        .invoke_handler(tauri::generate_handler![
37            commands::minimize_app,
38            commands::close_app,
39            commands::exit_app,
40            commands::is_app_in_foreground
41        ])
42        .setup(|app, api| {
43            #[cfg(mobile)]
44            {
45                // mobile::init returns Result<AppControl<R>> which wraps PluginHandle
46                let app_control_instance = mobile::init(app, api)?;
47                app.manage(app_control_instance);
48            }
49            #[cfg(desktop)]
50            {
51                // Assuming desktop::init also returns Result<AppControl<R>> or similar
52                // and AppControl for desktop is structured appropriately.
53                let app_control_instance = desktop::init(app, api)?;
54                app.manage(app_control_instance);
55            }
56            Ok(())
57        })
58        .build()
59}