ESPHome 2026.3.0-dev
Loading...
Searching...
No Matches
media_player.cpp
Go to the documentation of this file.
1#include "media_player.h"
4#include "esphome/core/log.h"
6
7namespace esphome {
8namespace media_player {
9
10static const char *const TAG = "media_player";
11
13 switch (state) {
15 return "ON";
17 return "OFF";
19 return "IDLE";
21 return "PLAYING";
23 return "PAUSED";
25 return "ANNOUNCING";
27 return "NONE";
28 default:
29 return "UNKNOWN";
30 }
31}
32
34 switch (command) {
36 return "PLAY";
38 return "PAUSE";
40 return "STOP";
42 return "MUTE";
44 return "UNMUTE";
46 return "TOGGLE";
48 return "VOLUME_UP";
50 return "VOLUME_DOWN";
52 return "ENQUEUE";
54 return "REPEAT_ONE";
56 return "REPEAT_OFF";
58 return "CLEAR_PLAYLIST";
60 return "TURN_ON";
62 return "TURN_OFF";
64 return "NEXT";
66 return "PREVIOUS";
68 return "REPEAT_ALL";
70 return "SHUFFLE";
72 return "UNSHUFFLE";
74 return "GROUP_JOIN";
75 default:
76 return "UNKNOWN";
77 }
78}
79
87
95
97 if (this->media_url_.has_value()) {
98 if (this->command_.has_value() && this->command_.value() != MEDIA_PLAYER_COMMAND_ENQUEUE) {
99 // Don't remove an enqueue command
100 ESP_LOGW(TAG, "MediaPlayerCall: Setting both command and media_url is not needed.");
101 this->command_.reset();
102 }
103 }
104 if (this->volume_.has_value()) {
105 if (this->volume_.value() < 0.0f || this->volume_.value() > 1.0f) {
106 ESP_LOGW(TAG, "MediaPlayerCall: Volume must be between 0.0 and 1.0.");
107 this->volume_.reset();
108 }
109 }
110}
111
113 ESP_LOGD(TAG, "'%s' - Setting", this->parent_->get_name().c_str());
114 this->validate_();
115 if (this->command_.has_value()) {
116 const char *command_s = media_player_command_to_string(this->command_.value());
117 ESP_LOGD(TAG, " Command: %s", command_s);
118 }
119 if (this->media_url_.has_value()) {
120 ESP_LOGD(TAG, " Media URL: %s", this->media_url_.value().c_str());
121 }
122 if (this->volume_.has_value()) {
123 ESP_LOGD(TAG, " Volume: %.2f", this->volume_.value());
124 }
125 if (this->announcement_.has_value()) {
126 ESP_LOGD(TAG, " Announcement: %s", this->announcement_.value() ? "yes" : "no");
127 }
128 this->parent_->control(*this);
129}
130
132 this->command_ = command;
133 return *this;
134}
136 this->command_ = command;
137 return *this;
138}
140 if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("PLAY")) == 0) {
142 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("PAUSE")) == 0) {
144 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("STOP")) == 0) {
146 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("MUTE")) == 0) {
148 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("UNMUTE")) == 0) {
150 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("TOGGLE")) == 0) {
152 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("TURN_ON")) == 0) {
154 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("TURN_OFF")) == 0) {
156 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("VOLUME_UP")) == 0) {
158 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("VOLUME_DOWN")) == 0) {
160 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("ENQUEUE")) == 0) {
162 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("REPEAT_ONE")) == 0) {
164 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("REPEAT_OFF")) == 0) {
166 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("REPEAT_ALL")) == 0) {
168 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("CLEAR_PLAYLIST")) == 0) {
170 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("NEXT")) == 0) {
172 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("PREVIOUS")) == 0) {
174 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("SHUFFLE")) == 0) {
176 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("UNSHUFFLE")) == 0) {
178 } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("GROUP_JOIN")) == 0) {
180 } else {
181 ESP_LOGW(TAG, "'%s' - Unrecognized command %s", this->parent_->get_name().c_str(), command);
182 }
183 return *this;
184}
185
186MediaPlayerCall &MediaPlayerCall::set_media_url(const std::string &media_url) {
187 this->media_url_ = media_url;
188 return *this;
189}
190
192 this->volume_ = volume;
193 return *this;
194}
195
197 this->announcement_ = announce;
198 return *this;
199}
200
201void MediaPlayer::add_on_state_callback(std::function<void()> &&callback) {
202 this->state_callback_.add(std::move(callback));
203}
204
206 this->state_callback_.call();
207#if defined(USE_MEDIA_PLAYER) && defined(USE_CONTROLLER_REGISTRY)
209#endif
210}
211
212} // namespace media_player
213} // namespace esphome
static void notify_media_player_update(media_player::MediaPlayer *obj)
const StringRef & get_name() const
constexpr const char * c_str() const
Definition string_ref.h:73
MediaPlayerCall & set_media_url(const std::string &url)
MediaPlayerCall & set_volume(float volume)
MediaPlayerCall & set_announcement(bool announce)
MediaPlayerCall & set_command(MediaPlayerCommand command)
optional< MediaPlayerCommand > command_
virtual void control(const MediaPlayerCall &call)=0
LazyCallbackManager< void()> state_callback_
void add_on_state_callback(std::function< void()> &&callback)
void set_supports_turn_off_on(bool supports_turn_off_on)
void set_supports_pause(bool supports_pause)
bool has_value() const
Definition optional.h:92
value_type const & value() const
Definition optional.h:94
bool state
Definition fan.h:2
const char * media_player_command_to_string(MediaPlayerCommand command)
const char * media_player_state_to_string(MediaPlayerState state)
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7