Expand description
§A wrapper around the Spotify web playback SDK for targeting wasm with rust
§All the methods now are functions
Because you only can have only 1 player per page, so there is no need for an explicit class, rust calls all the methods of the class through JS
Use the init
function first this function adds the script to the document, and creates an instance of the Spotify.Player
class, if you don’t call this function all the other functions will be useless
§Docs
§Repo
§Example in leptos:
use leptos::*;
#[component]
fn Player() -> impl IntoView {
use leptos::logging::log;
use rust_spotify_web_playback_sdk::prelude as sp;
let (current_song_name, set_current_song_name) = create_signal(String::new());
let token = "BQAdHQqBLczVFdCIM58tVbF0eaztF-83cXczNdz2Aua-U7JyOdIlpiG5M7oEww-dK7jo3qjcpMJ4isuyU2RYy3EoD_SWEOX1uW39bpR-KDbjSYeBPb0Jn4QtwXQw2yjQ33oRzVdyRufKF8o7kwXYW-ij6rtio6oDq0PNYIGIyMsDxKhgM5ijt4LXWz-iWQykftBMXdeSWZuU-Z51VyFOPuznUBQj";
let connect = create_action(|_| async {
match sp::connect().await {
Ok(_) => log!("connected"),
Err(e) => log!("error {:?}", e),
};
});
create_effect(move |_| {
sp::init(
|| {
log!("oauth was called");
token.to_string()
},
move || {
log!("ready");
connect.dispatch(());
sp::add_listener!("player_state_changed", move |state: sp::StateChange| {
log!("state changed, {}", state.track_window.current_track.name);
set_current_song_name(state.track_window.current_track.name);
});
},
"example player",
1.0,
false,
);
});
let get_state = create_action(|_| async {
let state = sp::get_current_state().await.unwrap();
log!("{:#?}", state);
});
let activate_player = create_action(|_| async {
sp::activate_element().await
});
view! {
<h1>"Welcome to Leptos"</h1>
<button on:click=move |_| activate_player.dispatch(())>
"activate player"
</button>
{
move || match activate_player.value().get() {
Some(Ok(_)) => {
view! {
<button on:click=move |_| get_state.dispatch(())>
"log state in console"
</button>
<p>"Current song: " {current_song_name}</p>
}.into_view()
}
Some(Err(e)) => {
view! {
<p>"Error activating player: " {e}</p>
}.into_view()
}
None => {
view! {
<p>"Activating player..."</p>
}.into_view()
}
}
}
}
}
Modules§
Functions§
- activate_
element - Some browsers prevent autoplay of media by ensuring that all playback is triggered by synchronous event-paths originating from user interaction such as a click. In the autoplay disabled browser, to be able to keep the playing state during transfer from other applications to yours, this function needs to be called in advance. Otherwise it will be in pause state once it’s transferred.
- connect
- Connect our Web Playback SDK instance to Spotify with the credentials provided during initialization.
- disconnect
- Closes the current session our Web Playback SDK has with Spotify.
- get_
current_ state - Collect metadata on local playback.
- get_
volume - Get the local volume currently set in the Web Playback SDK.
- init
- this function adds the script to the document, and creates an instance of the Spotify.Player class, if you don’t call this function all the other functions will be useless
- next_
track - Skip to the next track in local playback.
- pause
- Pause the local playback.
- previous_
track - Switch to the previous track in local playback.
- remove_
listener - Remove an event listener in the Web Playback SDK.
- remove_
specific_ listener - Remove a specific event listener in the Web Playback SDK.
- resume
- Resume the local playback.
- seek
- Seek to a position in the current track in local playback.
- set_
name - Rename the Spotify Player device. This is visible across all Spotify Connect devices.
- set_
volume - Set the local volume for the Web Playback SDK.
- toggle_
play - Resume/pause the local playback.