1
0
mirror of https://github.com/esphome/esphome.git synced 2025-11-20 08:46:01 +00:00
This commit is contained in:
J. Nick Koston
2025-10-31 11:08:24 -05:00
parent 79e2340588
commit 4fabe464c8

View File

@@ -139,11 +139,8 @@ const char *Fan::find_preset_mode_(const char *preset_mode) { return this->get_t
bool Fan::set_preset_mode_(const char *preset_mode) { bool Fan::set_preset_mode_(const char *preset_mode) {
const char *validated = this->find_preset_mode_(preset_mode); const char *validated = this->find_preset_mode_(preset_mode);
if (validated == nullptr) { if (validated == nullptr || this->preset_mode_ == validated) {
return false; // Preset mode not supported return false; // Preset mode not supported or no change
}
if (this->preset_mode_ == validated) {
return false; // No change
} }
this->preset_mode_ = validated; this->preset_mode_ = validated;
// Keep deprecated member in sync during deprecation period // Keep deprecated member in sync during deprecation period
@@ -235,16 +232,14 @@ void Fan::save_state_() {
state.direction = this->direction; state.direction = this->direction;
const char *preset = this->get_preset_mode(); const char *preset = this->get_preset_mode();
if (traits.supports_preset_modes() && preset != nullptr) { if (preset != nullptr) {
const auto &preset_modes = traits.supported_preset_modes(); const auto &preset_modes = traits.supported_preset_modes();
// Store index of current preset mode // Find index of current preset mode (pointer comparison is safe since preset is from traits)
size_t i = 0; for (size_t i = 0; i < preset_modes.size(); i++) {
for (const auto &mode : preset_modes) { if (preset_modes[i] == preset) {
if (strcmp(mode, preset) == 0) {
state.preset_mode = i; state.preset_mode = i;
break; break;
} }
i++;
} }
} }