mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-06 07:49:52 +03:00
schedule onChange optimize queue
This commit is contained in:
@@ -422,9 +422,15 @@ 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() {
|
||||||
for (ScheduleItem & scheduleItem : *scheduleItems_) {
|
for (ScheduleItem & scheduleItem : *scheduleItems_) {
|
||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user