use std::sync::atomic::AtomicBool;
use once_cell::sync::OnceCell;
use tauri::{
async_runtime,
plugin::{Builder, TauriPlugin},
Wry,
};
#[cfg(target_os = "android")]
mod android;
mod commands;
mod error;
mod handler;
pub mod models;
pub use error::Error;
pub use handler::Handler;
pub use handler::{OnDisconnectHandler, SubscriptionHandler};
pub static ALLOW_IBEACONS: AtomicBool = AtomicBool::new(false);
static HANDLER: OnceCell<Handler> = OnceCell::new();
pub fn try_init() -> Result<TauriPlugin<Wry>, Error> {
let handler = async_runtime::block_on(Handler::new())?;
let _ = HANDLER.set(handler);
#[allow(unused)]
let plugin = Builder::new("blec")
.invoke_handler(commands::commands())
.setup(|app, api| {
#[cfg(target_os = "android")]
android::init(app, api)?;
Ok(())
})
.build();
Ok(plugin)
}
pub fn init() -> TauriPlugin<Wry> {
try_init().expect("failed to initialize plugin")
}
pub fn get_handler() -> error::Result<&'static Handler> {
let handler = HANDLER.get().ok_or(error::Error::HandlerNotInitialized)?;
Ok(handler)
}
#[allow(unused)]
pub fn check_permissions(ask_if_denied: bool) -> Result<bool, Error> {
#[cfg(target_os = "android")]
return Ok(android::check_permissions(ask_if_denied)?);
#[cfg(not(target_os = "android"))]
return Ok(true);
}