12#include <sendspin/client.h>
13#include <sendspin/config.h>
14#include <sendspin/types.h>
16#ifdef USE_SENDSPIN_ARTWORK
17#include <sendspin/artwork_role.h>
19#ifdef USE_SENDSPIN_CONTROLLER
20#include <sendspin/controller_role.h>
22#ifdef USE_SENDSPIN_METADATA
23#include <sendspin/metadata_role.h>
25#ifdef USE_SENDSPIN_PLAYER
26#include <sendspin/player_role.h>
40namespace sendspin_priority {
52#ifdef USE_SENDSPIN_PLAYER
75#ifdef USE_SENDSPIN_ARTWORK
76 public sendspin::ArtworkRoleListener,
78#ifdef USE_SENDSPIN_CONTROLLER
79 public sendspin::ControllerRoleListener,
81#ifdef USE_SENDSPIN_METADATA
82 public sendspin::MetadataRoleListener,
84 public sendspin::SendspinClientListener,
85 public sendspin::SendspinNetworkProvider,
86 public sendspin::SendspinPersistenceProvider {
89 void setup()
override;
130#ifdef USE_SENDSPIN_ARTWORK
151#ifdef USE_SENDSPIN_CONTROLLER
152 void send_client_command(sendspin::SendspinControllerCommand command, std::optional<uint8_t> volume = std::nullopt,
153 std::optional<bool> mute = std::nullopt);
165#ifdef USE_SENDSPIN_METADATA
178#ifdef USE_SENDSPIN_PLAYER
195 void on_group_update(
const sendspin::GroupUpdateObject &group)
override;
210#ifdef USE_SENDSPIN_ARTWORK
221 CallbackManager<void(uint8_t,
const uint8_t *,
size_t, sendspin::SendspinImageFormat)>
227#ifdef USE_SENDSPIN_CONTROLLER
240#ifdef USE_SENDSPIN_METADATA
243 void on_metadata(
const sendspin::ServerMetadataStateObject &metadata)
override;
251#ifdef USE_SENDSPIN_PLAYER
265 std::unique_ptr<sendspin::SendspinClient>
client_;
Helper class to easily give an object a parent of type T.
This class simplifies creating components that periodically check a state.
Base class for all sendspin subcomponents.
float get_setup_priority() const override
Thin adapter over sendspin::SendspinClient.
CallbackManager< void(uint8_t, const uint8_t *, size_t, sendspin::SendspinImageFormat)> artwork_image_decode_callbacks_
void add_image_clear_callback(F &&callback)
CallbackManager< void(uint8_t, uint32_t)> artwork_image_display_callbacks_
sendspin::PlayerRoleListener * player_listener_
void update_state(sendspin::SendspinClientState state)
Updates the client's reported playback state on the server.
bool save_last_server_hash(uint32_t hash) override
bool save_static_delay(uint16_t delay_ms) override
void on_controller_state_clear() override
void set_artwork_config(const sendspin::ArtworkRoleConfig &config)
CallbackManager< void(const sendspin::ServerMetadataStateObject &)> metadata_update_callbacks_
void add_image_decode_callback(F &&callback)
LazyCallbackManager< void(const sendspin::ServerStateControllerObject &)> controller_state_callbacks_
static const char * get_client_id_into_buffer(std::span< char, MAC_ADDRESS_PRETTY_BUFFER_SIZE > buf)
Writes the active network interface's MAC into buf and returns its data pointer.
void add_group_update_callback(F &&callback)
void on_release_high_performance() override
bool is_network_ready() override
sendspin::MetadataRole * metadata_role_
CallbackManager< void(const sendspin::GroupUpdateObject &)> group_update_callbacks_
sendspin::PlayerRoleConfig player_config_
void on_metadata(const sendspin::ServerMetadataStateObject &metadata) override
void set_player_config(const sendspin::PlayerRoleConfig &config)
void dump_config() override
sendspin::PlayerRole * get_player_role()
Child components call this to get the PlayerRole instance after setup, so they can push updates to it...
void set_listener(sendspin::PlayerRoleListener *listener)
void on_image_clear(uint8_t slot) override
void add_controller_state_clear_callback(F &&callback)
Registers a callback that fires when the connection is lost and the cached controller state is droppe...
void disconnect_from_server(sendspin::SendspinGoodbyeReason reason)
Disconnects the underlying client from the current server.
std::optional< uint16_t > load_static_delay() override
std::unique_ptr< sendspin::SendspinClient > client_
sendspin::ArtworkRoleConfig artwork_config_
sendspin::SendspinClientConfig build_client_config_()
Builds the SendspinClientConfig from ESPHome configuration and platform info.
sendspin::ControllerRole * controller_role_
ESPPreferenceObject last_played_server_pref_
bool task_stack_in_psram_
uint32_t get_track_progress_ms() const
Returns the interpolated track progress in milliseconds, or 0 if the hub is not yet ready.
void add_controller_state_callback(F &&callback)
void send_client_command(sendspin::SendspinControllerCommand command, std::optional< uint8_t > volume=std::nullopt, std::optional< bool > mute=std::nullopt)
LazyCallbackManager< void()> controller_state_clear_callbacks_
void on_metadata_clear() override
ESPPreferenceObject static_delay_pref_
CallbackManager< void(uint8_t)> artwork_image_clear_callbacks_
void set_task_stack_in_psram(bool task_stack_in_psram)
sendspin::ArtworkRole * artwork_role_
void on_request_high_performance() override
float get_setup_priority() const override
void on_image_display(uint8_t slot, uint32_t lateness_ms) override
void on_image_decode(uint8_t slot, const uint8_t *data, size_t length, sendspin::SendspinImageFormat format) override
std::optional< uint32_t > load_last_server_hash() override
void on_controller_state(const sendspin::ServerStateControllerObject &state) override
void connect_to_server(const std::string &url)
Connects the underlying client to the given Sendspin server.
void add_image_display_callback(F &&callback)
void on_group_update(const sendspin::GroupUpdateObject &group) override
void add_metadata_update_callback(F &&callback)
Registers a callback that fires when the server sends metadata.
void artwork_frame_done(uint8_t slot)
Acknowledges the most recent artwork delivery (display or clear) for a slot.
Base class for sendspin subcomponents that need polling behavior.
float get_setup_priority() const override
constexpr float AFTER_WIFI
For components that should be initialized after WiFi is connected.
const char int const __FlashStringHelper * format
Persistent storage structure for last played server hash.
Persistent storage structure for player static delay.