Crate rust_spotify_web_playback_sdk

Source
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§

js_wrapper
prelude
structs

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.