schedule onChange optimize queue

This commit is contained in:
MichaelDvP
2024-07-21 09:04:53 +02:00
parent 4dd3a668df
commit 74b009f658
2 changed files with 13 additions and 11 deletions

View File

@@ -422,8 +422,14 @@ bool WebSchedulerService::command(const char * name, const std::string & command
#include "shuntingYard.hpp" #include "shuntingYard.hpp"
bool WebSchedulerService::onChange(const char * cmd) { bool WebSchedulerService::onChange(const char * cmd) {
cmd_changed_.push_back(Helpers::toLower(cmd)); for (ScheduleItem & scheduleItem : *scheduleItems_) {
if (scheduleItem.active && scheduleItem.flags == SCHEDULEFLAG_SCHEDULE_ONCHANGE
&& Helpers::toLower(scheduleItem.time).find(Helpers::toLower(cmd)) != std::string::npos) {
cmd_changed_.push_back(&scheduleItem);
return true; return true;
}
}
return false;
} }
void WebSchedulerService::condition() { void WebSchedulerService::condition() {
@@ -458,12 +464,8 @@ void WebSchedulerService::loop() {
// check if we have onChange events // check if we have onChange events
while (!cmd_changed_.empty()) { while (!cmd_changed_.empty()) {
for (const ScheduleItem & scheduleItem : *scheduleItems_) { ScheduleItem si = *cmd_changed_.front();
if (scheduleItem.active && scheduleItem.flags == SCHEDULEFLAG_SCHEDULE_ONCHANGE command(si.name.c_str(), si.cmd, compute(si.value));
&& Helpers::toLower(scheduleItem.time).find(cmd_changed_.front()) != std::string::npos) {
command(scheduleItem.name.c_str(), scheduleItem.cmd, compute(scheduleItem.value));
}
}
cmd_changed_.pop_front(); cmd_changed_.pop_front();
} }

View File

@@ -83,7 +83,7 @@ class WebSchedulerService : public StatefulService<WebScheduler> {
std::list<ScheduleItem> * scheduleItems_; // pointer to the list of schedule events std::list<ScheduleItem> * scheduleItems_; // pointer to the list of schedule events
bool ha_registered_ = false; bool ha_registered_ = false;
std::deque<std::string> cmd_changed_; std::deque<ScheduleItem *> cmd_changed_;
}; };
} // namespace emsesp } // namespace emsesp