tauri_plugin_apple_music_kit/
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/// An extension trait for Tauri's `Manager` that provides access to the MusicKit plugin API.
26pub trait MusicKitExt<R: Runtime> {
27    fn music_kit(&self) -> &MusicKitPlugin<R>;
28}
29
30impl<R: Runtime, T: Manager<R>> MusicKitExt<R> for T {
31    fn music_kit(&self) -> &MusicKitPlugin<R> {
32        self.state::<MusicKitPlugin<R>>().inner()
33    }
34}
35
36/// Initializes the plugin.
37pub fn init<R: Runtime>() -> TauriPlugin<R> {
38    Builder::new("apple-music-kit")
39        .invoke_handler(tauri::generate_handler![
40            commands::initialize,
41            commands::authorize,
42            commands::unauthorize,
43            commands::get_authorization_status,
44            commands::get_user_token,
45            commands::get_developer_token,
46            commands::get_storefront_id,
47            commands::get_queue,
48            commands::play,
49            commands::pause,
50            commands::stop,
51            commands::seek,
52            commands::next,
53            commands::previous,
54            commands::skip_to_item,
55            commands::set_volume,
56            commands::set_queue,
57            commands::update_queue,
58            commands::insert_track_at_position,
59            commands::insert_tracks_at_position,
60            commands::remove_track_from_queue,
61            commands::insert_track_next,
62            commands::insert_track_last,
63            commands::append_tracks_to_queue,
64            commands::get_current_track,
65            commands::get_playback_state,
66        ])
67        .setup(|app, api| {
68            #[cfg(mobile)]
69            let musickit = mobile::init(app, api)?;
70            #[cfg(desktop)]
71            let musickit = desktop::init(app, api)?;
72            app.manage(musickit);
73            Ok(())
74        })
75        .build()
76}