tauri_plugin_musickit/
lib.rs

1use tauri::{
2    plugin::{Builder, TauriPlugin},
3    Manager, Runtime,
4};
5
6mod commands;
7mod error;
8mod events;
9mod models;
10
11#[cfg(desktop)]
12mod desktop;
13#[cfg(mobile)]
14mod mobile;
15
16pub use error::{Error, Result};
17pub use events::*;
18pub use models::*;
19
20#[cfg(desktop)]
21use desktop::MusicKitPlugin;
22#[cfg(mobile)]
23use mobile::MusicKitPlugin;
24
25#[cfg(target_os = "ios")]
26tauri::ios_plugin_binding!(init_plugin_apple_music_kit);
27
28/// An extension trait for Tauri's `Manager` that provides access to the MusicKit plugin API.
29pub trait MusicKitExt<R: Runtime> {
30    fn music_kit(&self) -> tauri::State<'_, MusicKitPlugin<R>>;
31}
32
33impl<R: Runtime, T: Manager<R>> MusicKitExt<R> for T {
34    fn music_kit(&self) -> tauri::State<'_, MusicKitPlugin<R>> {
35        self.state::<MusicKitPlugin<R>>()
36    }
37}
38
39/// Initializes the plugin.
40pub fn init<R: Runtime>() -> TauriPlugin<R> {
41    Builder::new("musickit")
42        .invoke_handler(tauri::generate_handler![
43            commands::initialize,
44            commands::authorize,
45            commands::unauthorize,
46            commands::get_authorization_status,
47            commands::get_user_token,
48            commands::set_user_token,
49            commands::get_developer_token,
50            commands::set_developer_token,
51            commands::get_storefront_id,
52            commands::get_storefront,
53            commands::get_queue,
54            commands::play,
55            commands::pause,
56            commands::stop,
57            commands::seek,
58            commands::next,
59            commands::previous,
60            commands::skip_to_item,
61            commands::set_volume,
62            commands::set_queue,
63            commands::update_queue,
64            commands::insert_track_at_position,
65            commands::insert_tracks_at_position,
66            commands::remove_track_from_queue,
67            commands::insert_track_next,
68            commands::insert_track_last,
69            commands::append_tracks_to_queue,
70            commands::get_current_track,
71            commands::get_playback_state,
72        ])
73        .setup(|app, api| {
74            #[cfg(mobile)]
75            let musickit = mobile::init(app, api)?;
76            #[cfg(desktop)]
77            let musickit = desktop::init(app, api)?;
78            app.manage(musickit);
79            Ok(())
80        })
81        .build()
82}
83
84