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

View File

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