use serde::{Deserialize, Serialize};
use serde_json::Value;
use tauri::{
plugin::{Builder, TauriPlugin},
AppHandle, Runtime,
};
#[cfg(target_os = "macos")]
mod mouse_nav;
pub mod sidecar;
pub use sidecar::{Sidecar, SidecarOptions};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CliResult {
pub success: bool,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub data: Option<Value>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub error: Option<String>,
}
impl CliResult {
pub fn ok(data: Value) -> Self {
Self { success: true, data: Some(data), error: None }
}
pub fn err(message: impl Into<String>) -> Self {
Self { success: false, data: None, error: Some(message.into()) }
}
}
pub fn init<R: Runtime>() -> TauriPlugin<R> {
Builder::new("picoframe")
.setup(|_app, _api| {
#[cfg(target_os = "macos")]
mouse_nav::install(_app.clone());
Ok(())
})
.build()
}
pub fn reveal_main_window<R: Runtime>(app: &AppHandle<R>) {
use tauri::{window::Color, Manager, Theme};
let Some(window) = app.get_webview_window("main") else {
return;
};
let color = match window.theme() {
Ok(Theme::Dark) => Color(17, 17, 19, 255),
_ => Color(255, 255, 255, 255),
};
let _ = window.set_background_color(Some(color));
let _ = window.show();
}
pub const STORE_PATH: &str = "picoframe.json";
pub fn store<R: Runtime>(
app: &AppHandle<R>,
) -> Result<std::sync::Arc<tauri_plugin_store::Store<R>>, tauri_plugin_store::Error> {
use tauri_plugin_store::StoreExt;
app.store(STORE_PATH)
}