mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-06 15:59:52 +03:00
schedule onChange optimize queue
This commit is contained in:
@@ -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));
|
||||
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();
|
||||
}
|
||||
|
||||
|
||||
@@ -83,7 +83,7 @@ class WebSchedulerService : public StatefulService<WebScheduler> {
|
||||
|
||||
std::list<ScheduleItem> * scheduleItems_; // pointer to the list of schedule events
|
||||
bool ha_registered_ = false;
|
||||
std::deque<std::string> cmd_changed_;
|
||||
std::deque<ScheduleItem *> cmd_changed_;
|
||||
};
|
||||
|
||||
} // namespace emsesp
|
||||
|
||||
Reference in New Issue
Block a user