Skip to main content

tauri_plugin_stt/
lib.rs

1use tauri::{
2    plugin::{Builder, TauriPlugin},
3    Manager, Runtime,
4};
5
6pub use models::*;
7
8#[cfg(desktop)]
9mod desktop;
10#[cfg(mobile)]
11mod mobile;
12
13mod commands;
14mod error;
15mod models;
16mod paths;
17
18pub use error::{Error, Result};
19pub use paths::{
20    get_model_path, get_models_dir, list_available_models, model_exists, validate_path,
21};
22
23#[cfg(desktop)]
24use desktop::Stt;
25#[cfg(mobile)]
26use mobile::Stt;
27
28/// Extensions to [`tauri::App`], [`tauri::AppHandle`] and [`tauri::Window`] to access the stt APIs.
29pub trait SttExt<R: Runtime> {
30    fn stt(&self) -> &Stt<R>;
31}
32
33impl<R: Runtime, T: Manager<R>> crate::SttExt<R> for T {
34    fn stt(&self) -> &Stt<R> {
35        self.state::<Stt<R>>().inner()
36    }
37}
38
39/// Initializes the plugin.
40pub fn init<R: Runtime>() -> TauriPlugin<R> {
41    let mut builder = Builder::new("stt");
42
43    #[cfg(desktop)]
44    {
45        builder = builder.invoke_handler(tauri::generate_handler![
46            commands::start_listening,
47            commands::stop_listening,
48            commands::is_available,
49            commands::get_supported_languages,
50            commands::check_permission,
51            commands::request_permission,
52            commands::register_listener,
53            commands::remove_listener,
54            commands::list_models,
55            commands::install_model,
56            commands::remove_model,
57            commands::set_active_model,
58            commands::unload_model,
59        ]);
60    }
61
62    #[cfg(mobile)]
63    {
64        builder = builder.invoke_handler(tauri::generate_handler![
65            commands::start_listening,
66            commands::stop_listening,
67            commands::is_available,
68            commands::get_supported_languages,
69            commands::check_permission,
70            commands::request_permission,
71            commands::list_models,
72            commands::install_model,
73            commands::remove_model,
74            commands::set_active_model,
75            commands::unload_model,
76        ]);
77    }
78
79    builder
80        .setup(|app, api| {
81            #[cfg(mobile)]
82            let stt = mobile::init(app, api)?;
83            #[cfg(desktop)]
84            let stt = desktop::init(app, api)?;
85            app.manage(stt);
86            Ok(())
87        })
88        .build()
89}