pytauri_core/plugins/single_instance/
mod.rs

1use pyo3::prelude::*;
2use tauri_plugin_single_instance::{self as plugin};
3
4use crate::{
5    ext_mod::{plugin::Plugin, PyAppHandleExt as _},
6    tauri_runtime::Runtime,
7    utils::PyResultExt as _,
8};
9
10/// See also: [tauri_plugin_single_instance::init]
11#[pyfunction]
12#[pyo3(signature = (callback, /))]
13pub fn init(callback: Option<PyObject>) -> PyResult<Plugin> {
14    let plugin = Plugin::new(Box::new(move || {
15        Box::new(match callback {
16            Some(callback) => plugin::init::<Runtime, _>(move |app_handle, args, cwd| {
17                Python::with_gil(|py| {
18                    let callback = callback.bind(py);
19                    let result = callback.call1((app_handle.py_app_handle(), args, cwd));
20                    result.unwrap_unraisable_py_result(py, Some(callback), || {
21                        "Python exception occurred in `tauri_plugin_single_instance::init` callback"
22                    });
23                })
24            }),
25            None => plugin::init::<Runtime, _>(|_, _, _| {}),
26        })
27    }));
28
29    Ok(plugin)
30}
31
32/// See also: [tauri_plugin_single_instance]
33#[pymodule(submodule, gil_used = false)]
34pub mod single_instance {
35    #[pymodule_export]
36    pub use super::init;
37}