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
28pub 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
39pub 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 ]);
59 }
60
61 #[cfg(mobile)]
62 {
63 builder = builder.invoke_handler(tauri::generate_handler![
64 commands::start_listening,
65 commands::stop_listening,
66 commands::is_available,
67 commands::get_supported_languages,
68 commands::check_permission,
69 commands::request_permission,
70 commands::list_models,
71 commands::install_model,
72 commands::remove_model,
73 commands::set_active_model,
74 ]);
75 }
76
77 builder
78 .setup(|app, api| {
79 #[cfg(mobile)]
80 let stt = mobile::init(app, api)?;
81 #[cfg(desktop)]
82 let stt = desktop::init(app, api)?;
83 app.manage(stt);
84 Ok(())
85 })
86 .build()
87}