diff options
Diffstat (limited to 'packages/desktop/src-tauri/src')
| -rw-r--r-- | packages/desktop/src-tauri/src/cli.rs | 1 | ||||
| -rw-r--r-- | packages/desktop/src-tauri/src/lib.rs | 41 | ||||
| -rw-r--r-- | packages/desktop/src-tauri/src/markdown.rs | 5 |
3 files changed, 35 insertions, 12 deletions
diff --git a/packages/desktop/src-tauri/src/cli.rs b/packages/desktop/src-tauri/src/cli.rs index f64beed6a..16e4bfec9 100644 --- a/packages/desktop/src-tauri/src/cli.rs +++ b/packages/desktop/src-tauri/src/cli.rs @@ -51,6 +51,7 @@ fn is_cli_installed() -> bool { const INSTALL_SCRIPT: &str = include_str!("../../../../install"); #[tauri::command] +#[specta::specta] pub fn install_cli(app: tauri::AppHandle) -> Result<String, String> { if cfg!(not(unix)) { return Err("CLI installation is only supported on macOS & Linux".to_string()); diff --git a/packages/desktop/src-tauri/src/lib.rs b/packages/desktop/src-tauri/src/lib.rs index 0958481ad..2fe7c4aa1 100644 --- a/packages/desktop/src-tauri/src/lib.rs +++ b/packages/desktop/src-tauri/src/lib.rs @@ -16,10 +16,10 @@ use std::{ time::{Duration, Instant}, }; use tauri::{AppHandle, LogicalSize, Manager, RunEvent, State, WebviewWindowBuilder}; -#[cfg(any(target_os = "linux", all(debug_assertions, windows)))] -use tauri_plugin_deep_link::DeepLinkExt; #[cfg(windows)] use tauri_plugin_decorum::WebviewWindowExt; +#[cfg(any(target_os = "linux", all(debug_assertions, windows)))] +use tauri_plugin_deep_link::DeepLinkExt; use tauri_plugin_dialog::{DialogExt, MessageDialogButtons, MessageDialogResult}; use tauri_plugin_shell::process::{CommandChild, CommandEvent}; use tauri_plugin_store::StoreExt; @@ -30,7 +30,7 @@ use crate::window_customizer::PinchZoomDisablePlugin; const SETTINGS_STORE: &str = "opencode.settings.dat"; const DEFAULT_SERVER_URL_KEY: &str = "defaultServerUrl"; -#[derive(Clone, serde::Serialize)] +#[derive(Clone, serde::Serialize, specta::Type)] struct ServerReadyData { url: String, password: Option<String>, @@ -64,6 +64,7 @@ struct LogState(Arc<Mutex<VecDeque<String>>>); const MAX_LOG_ENTRIES: usize = 200; #[tauri::command] +#[specta::specta] fn kill_sidecar(app: AppHandle) { let Some(server_state) = app.try_state::<ServerState>() else { println!("Server not running"); @@ -97,6 +98,7 @@ async fn get_logs(app: AppHandle) -> Result<String, String> { } #[tauri::command] +#[specta::specta] async fn ensure_server_ready(state: State<'_, ServerState>) -> Result<ServerReadyData, String> { state .status @@ -106,6 +108,7 @@ async fn ensure_server_ready(state: State<'_, ServerState>) -> Result<ServerRead } #[tauri::command] +#[specta::specta] fn get_default_server_url(app: AppHandle) -> Result<Option<String>, String> { let store = app .store(SETTINGS_STORE) @@ -119,6 +122,7 @@ fn get_default_server_url(app: AppHandle) -> Result<Option<String>, String> { } #[tauri::command] +#[specta::specta] async fn set_default_server_url(app: AppHandle, url: Option<String>) -> Result<(), String> { let store = app .store(SETTINGS_STORE) @@ -252,6 +256,26 @@ async fn check_server_health(url: &str, password: Option<&str>) -> bool { pub fn run() { let updater_enabled = option_env!("TAURI_SIGNING_PRIVATE_KEY").is_some(); + let builder = tauri_specta::Builder::<tauri::Wry>::new() + // Then register them (separated by a comma) + .commands(tauri_specta::collect_commands![ + kill_sidecar, + install_cli, + ensure_server_ready, + get_default_server_url, + set_default_server_url, + markdown::parse_markdown_command + ]) + .error_handling(tauri_specta::ErrorHandlingMode::Throw); + + #[cfg(debug_assertions)] // <- Only export on non-release builds + builder + .export( + specta_typescript::Typescript::default(), + "../src/bindings.ts", + ) + .expect("Failed to export typescript bindings"); + #[cfg(all(target_os = "macos", not(debug_assertions)))] let _ = std::process::Command::new("killall") .arg("opencode-cli") @@ -285,15 +309,10 @@ pub fn run() { .plugin(tauri_plugin_notification::init()) .plugin(PinchZoomDisablePlugin) .plugin(tauri_plugin_decorum::init()) - .invoke_handler(tauri::generate_handler![ - kill_sidecar, - install_cli, - ensure_server_ready, - get_default_server_url, - set_default_server_url, - markdown::parse_markdown_command - ]) + .invoke_handler(builder.invoke_handler()) .setup(move |app| { + builder.mount_events(app); + #[cfg(any(target_os = "linux", all(debug_assertions, windows)))] app.deep_link().register_all().ok(); diff --git a/packages/desktop/src-tauri/src/markdown.rs b/packages/desktop/src-tauri/src/markdown.rs index c3ca73857..39a64a431 100644 --- a/packages/desktop/src-tauri/src/markdown.rs +++ b/packages/desktop/src-tauri/src/markdown.rs @@ -1,4 +1,6 @@ -use comrak::{create_formatter, parse_document, Arena, Options, html::ChildRendering, nodes::NodeValue}; +use comrak::{ + Arena, Options, create_formatter, html::ChildRendering, nodes::NodeValue, parse_document, +}; use std::fmt::Write; create_formatter!(ExternalLinkFormatter, { @@ -55,6 +57,7 @@ pub fn parse_markdown(input: &str) -> String { } #[tauri::command] +#[specta::specta] pub async fn parse_markdown_command(markdown: String) -> Result<String, String> { Ok(parse_markdown(&markdown)) } |
