mirror of
https://github.com/esphome/esphome.git
synced 2026-02-20 16:35:37 -07:00
[text_sensor] Avoid duplicate string storage when no filters configured
This commit is contained in:
@@ -25,10 +25,21 @@ void log_text_sensor(const char *tag, const char *prefix, const char *type, Text
|
||||
}
|
||||
|
||||
void TextSensor::publish_state(const std::string &state) {
|
||||
<<<<<<< Updated upstream
|
||||
this->raw_state = state;
|
||||
if (this->raw_callback_) {
|
||||
this->raw_callback_->call(state);
|
||||
}
|
||||
=======
|
||||
// Only store raw_state_ separately when filters exist
|
||||
// When no filters, raw_state == state, so we avoid the duplicate storage
|
||||
if (this->filter_list_ != nullptr) {
|
||||
this->raw_state_ = state;
|
||||
}
|
||||
|
||||
// Call raw callbacks (before filters)
|
||||
this->callbacks_.call_first(this->raw_count_, state);
|
||||
>>>>>>> Stashed changes
|
||||
|
||||
ESP_LOGV(TAG, "'%s': Received new state %s", this->name_.c_str(), state.c_str());
|
||||
|
||||
@@ -80,7 +91,11 @@ void TextSensor::add_on_raw_state_callback(std::function<void(std::string)> call
|
||||
}
|
||||
|
||||
std::string TextSensor::get_state() const { return this->state; }
|
||||
std::string TextSensor::get_raw_state() const { return this->raw_state; }
|
||||
std::string TextSensor::get_raw_state() const {
|
||||
// When no filters exist, raw_state == state, so return state to avoid
|
||||
// requiring separate storage
|
||||
return this->filter_list_ != nullptr ? this->raw_state_ : this->state;
|
||||
}
|
||||
void TextSensor::internal_send_state_to_frontend(const std::string &state) {
|
||||
this->state = state;
|
||||
this->set_has_state(true);
|
||||
|
||||
@@ -50,7 +50,6 @@ class TextSensor : public EntityBase, public EntityBase_DeviceClass {
|
||||
void add_on_raw_state_callback(std::function<void(std::string)> callback);
|
||||
|
||||
std::string state;
|
||||
std::string raw_state;
|
||||
|
||||
// ========== INTERNAL METHODS ==========
|
||||
// (In most use cases you won't need these)
|
||||
@@ -63,6 +62,15 @@ class TextSensor : public EntityBase, public EntityBase_DeviceClass {
|
||||
CallbackManager<void(std::string)> callback_; ///< Storage for filtered state callbacks.
|
||||
|
||||
Filter *filter_list_{nullptr}; ///< Store all active filters.
|
||||
<<<<<<< Updated upstream
|
||||
=======
|
||||
|
||||
/// Raw state (before filters). Only populated when filters are configured.
|
||||
/// When no filters exist, get_raw_state() returns state directly.
|
||||
std::string raw_state_;
|
||||
|
||||
uint8_t raw_count_{0}; ///< Number of raw callbacks (partition point in callbacks_ vector)
|
||||
>>>>>>> Stashed changes
|
||||
};
|
||||
|
||||
} // namespace text_sensor
|
||||
|
||||
Reference in New Issue
Block a user