tauri_plugin_media/
lib.rs

1use tauri::{
2    plugin::{Builder, TauriPlugin},
3    Manager, Runtime,
4};
5
6pub use models::*;
7
8#[cfg(desktop)]
9mod desktop;
10
11mod commands;
12mod error;
13mod models;
14pub mod platform;
15
16pub use error::{Error, Result};
17
18#[cfg(desktop)]
19use desktop::Media;
20
21/// Extensions to [`tauri::App`], [`tauri::AppHandle`] and [`tauri::Window`] to access the media APIs.
22pub trait MediaExt<R: Runtime> {
23    fn media(&self) -> &Media<R>;
24}
25
26impl<R: Runtime, T: Manager<R>> crate::MediaExt<R> for T {
27    fn media(&self) -> &Media<R> {
28        self.state::<Media<R>>().inner()
29    }
30}
31
32/// Initializes the plugin.
33pub fn init<R: Runtime>() -> TauriPlugin<R> {
34    Builder::new("media")
35        .invoke_handler(tauri::generate_handler![
36            commands::initialize_session,
37            commands::set_metadata,
38            commands::set_playback_info,
39            commands::set_playback_status,
40            commands::set_position,
41            commands::clear_metadata,
42            commands::get_metadata,
43            commands::get_playback_info,
44            commands::get_playback_status,
45            commands::get_position,
46            commands::is_enabled,
47            commands::next,
48            commands::previous,
49        ])
50        .setup(|app, api| {
51            #[cfg(desktop)]
52            let media = desktop::init(app, api)?;
53            app.manage(media);
54            Ok(())
55        })
56        .build()
57}