mirror of
https://github.com/esphome/esphome.git
synced 2025-08-07 02:47:47 +00:00
Refactor voice assistant API methods to reduce code duplication
This commit is contained in:
parent
e88b8d10ec
commit
98d091fbc3
@ -1218,14 +1218,18 @@ void APIConnection::bluetooth_scanner_set_mode(const BluetoothScannerSetModeRequ
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USE_VOICE_ASSISTANT
|
#ifdef USE_VOICE_ASSISTANT
|
||||||
|
bool APIConnection::check_voice_assistant_api_connection() const {
|
||||||
|
return voice_assistant::global_voice_assistant != nullptr &&
|
||||||
|
voice_assistant::global_voice_assistant->get_api_connection() == this;
|
||||||
|
}
|
||||||
|
|
||||||
void APIConnection::subscribe_voice_assistant(const SubscribeVoiceAssistantRequest &msg) {
|
void APIConnection::subscribe_voice_assistant(const SubscribeVoiceAssistantRequest &msg) {
|
||||||
if (voice_assistant::global_voice_assistant != nullptr) {
|
if (voice_assistant::global_voice_assistant != nullptr) {
|
||||||
voice_assistant::global_voice_assistant->client_subscription(this, msg.subscribe);
|
voice_assistant::global_voice_assistant->client_subscription(this, msg.subscribe);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void APIConnection::on_voice_assistant_response(const VoiceAssistantResponse &msg) {
|
void APIConnection::on_voice_assistant_response(const VoiceAssistantResponse &msg) {
|
||||||
if (voice_assistant::global_voice_assistant != nullptr) {
|
if (!this->check_voice_assistant_api_connection()) {
|
||||||
if (voice_assistant::global_voice_assistant->get_api_connection() != this) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1242,42 +1246,25 @@ void APIConnection::on_voice_assistant_response(const VoiceAssistantResponse &ms
|
|||||||
this->helper_->getpeername((struct sockaddr *) &storage, &len);
|
this->helper_->getpeername((struct sockaddr *) &storage, &len);
|
||||||
voice_assistant::global_voice_assistant->start_streaming(&storage, msg.port);
|
voice_assistant::global_voice_assistant->start_streaming(&storage, msg.port);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
};
|
};
|
||||||
void APIConnection::on_voice_assistant_event_response(const VoiceAssistantEventResponse &msg) {
|
void APIConnection::on_voice_assistant_event_response(const VoiceAssistantEventResponse &msg) {
|
||||||
if (voice_assistant::global_voice_assistant != nullptr) {
|
if (this->check_voice_assistant_api_connection()) {
|
||||||
if (voice_assistant::global_voice_assistant->get_api_connection() != this) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
voice_assistant::global_voice_assistant->on_event(msg);
|
voice_assistant::global_voice_assistant->on_event(msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void APIConnection::on_voice_assistant_audio(const VoiceAssistantAudio &msg) {
|
void APIConnection::on_voice_assistant_audio(const VoiceAssistantAudio &msg) {
|
||||||
if (voice_assistant::global_voice_assistant != nullptr) {
|
if (this->check_voice_assistant_api_connection()) {
|
||||||
if (voice_assistant::global_voice_assistant->get_api_connection() != this) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
voice_assistant::global_voice_assistant->on_audio(msg);
|
voice_assistant::global_voice_assistant->on_audio(msg);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
void APIConnection::on_voice_assistant_timer_event_response(const VoiceAssistantTimerEventResponse &msg) {
|
void APIConnection::on_voice_assistant_timer_event_response(const VoiceAssistantTimerEventResponse &msg) {
|
||||||
if (voice_assistant::global_voice_assistant != nullptr) {
|
if (this->check_voice_assistant_api_connection()) {
|
||||||
if (voice_assistant::global_voice_assistant->get_api_connection() != this) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
voice_assistant::global_voice_assistant->on_timer_event(msg);
|
voice_assistant::global_voice_assistant->on_timer_event(msg);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
void APIConnection::on_voice_assistant_announce_request(const VoiceAssistantAnnounceRequest &msg) {
|
void APIConnection::on_voice_assistant_announce_request(const VoiceAssistantAnnounceRequest &msg) {
|
||||||
if (voice_assistant::global_voice_assistant != nullptr) {
|
if (this->check_voice_assistant_api_connection()) {
|
||||||
if (voice_assistant::global_voice_assistant->get_api_connection() != this) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
voice_assistant::global_voice_assistant->on_announce(msg);
|
voice_assistant::global_voice_assistant->on_announce(msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1285,8 +1272,7 @@ void APIConnection::on_voice_assistant_announce_request(const VoiceAssistantAnno
|
|||||||
VoiceAssistantConfigurationResponse APIConnection::voice_assistant_get_configuration(
|
VoiceAssistantConfigurationResponse APIConnection::voice_assistant_get_configuration(
|
||||||
const VoiceAssistantConfigurationRequest &msg) {
|
const VoiceAssistantConfigurationRequest &msg) {
|
||||||
VoiceAssistantConfigurationResponse resp;
|
VoiceAssistantConfigurationResponse resp;
|
||||||
if (voice_assistant::global_voice_assistant != nullptr) {
|
if (!this->check_voice_assistant_api_connection()) {
|
||||||
if (voice_assistant::global_voice_assistant->get_api_connection() != this) {
|
|
||||||
return resp;
|
return resp;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1304,16 +1290,11 @@ VoiceAssistantConfigurationResponse APIConnection::voice_assistant_get_configura
|
|||||||
resp.active_wake_words.push_back(wake_word_id);
|
resp.active_wake_words.push_back(wake_word_id);
|
||||||
}
|
}
|
||||||
resp.max_active_wake_words = config.max_active_wake_words;
|
resp.max_active_wake_words = config.max_active_wake_words;
|
||||||
}
|
|
||||||
return resp;
|
return resp;
|
||||||
}
|
}
|
||||||
|
|
||||||
void APIConnection::voice_assistant_set_configuration(const VoiceAssistantSetConfiguration &msg) {
|
void APIConnection::voice_assistant_set_configuration(const VoiceAssistantSetConfiguration &msg) {
|
||||||
if (voice_assistant::global_voice_assistant != nullptr) {
|
if (this->check_voice_assistant_api_connection()) {
|
||||||
if (voice_assistant::global_voice_assistant->get_api_connection() != this) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
voice_assistant::global_voice_assistant->on_set_configuration(msg.active_wake_words);
|
voice_assistant::global_voice_assistant->on_set_configuration(msg.active_wake_words);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -301,6 +301,11 @@ class APIConnection : public APIServerConnection {
|
|||||||
static uint16_t encode_message_to_buffer(ProtoMessage &msg, uint16_t message_type, APIConnection *conn,
|
static uint16_t encode_message_to_buffer(ProtoMessage &msg, uint16_t message_type, APIConnection *conn,
|
||||||
uint32_t remaining_size, bool is_single);
|
uint32_t remaining_size, bool is_single);
|
||||||
|
|
||||||
|
#ifdef USE_VOICE_ASSISTANT
|
||||||
|
// Helper to check voice assistant validity and connection ownership
|
||||||
|
bool check_voice_assistant_api_connection() const;
|
||||||
|
#endif
|
||||||
|
|
||||||
// Helper method to process multiple entities from an iterator in a batch
|
// Helper method to process multiple entities from an iterator in a batch
|
||||||
template<typename Iterator> void process_iterator_batch_(Iterator &iterator) {
|
template<typename Iterator> void process_iterator_batch_(Iterator &iterator) {
|
||||||
size_t initial_size = this->deferred_batch_.size();
|
size_t initial_size = this->deferred_batch_.size();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user