handle mandatory scheduler name change in update function

This commit is contained in:
proddy
2026-05-28 20:39:43 +01:00
parent e6a04b2c4f
commit 55a5ffc6df
2 changed files with 16 additions and 9 deletions

View File

@@ -1531,6 +1531,18 @@ bool System::check_upgrade() {
} }
return StateUpdateResult::UNCHANGED; return StateUpdateResult::UNCHANGED;
}); });
// Scheduler name is now mandatory, update FS
uint8_t i = 0;
bool schedule_changed = false;
EMSESP::webSchedulerService.update([&](WebScheduler & scheduler) {
for (ScheduleItem & scheduleItem : scheduler.scheduleItems) {
if (scheduleItem.name[0] == '\0') {
snprintf(scheduleItem.name, sizeof(scheduleItem.name), "schedule_%d", i++);
schedule_changed = true;
}
}
return schedule_changed ? StateUpdateResult::CHANGED : StateUpdateResult::UNCHANGED;
});
#endif #endif
} }

View File

@@ -82,7 +82,6 @@ StateUpdateResult WebScheduler::update(JsonObject root, WebScheduler & webSchedu
EMSESP::webSchedulerService.ha_reset(); EMSESP::webSchedulerService.ha_reset();
// build up the list of schedule items // build up the list of schedule items
uint8_t i = 0;
auto scheduleItems = root["schedule"].as<JsonArray>(); auto scheduleItems = root["schedule"].as<JsonArray>();
for (const JsonObject schedule : scheduleItems) { for (const JsonObject schedule : scheduleItems) {
// create each schedule item, overwriting any previous settings // create each schedule item, overwriting any previous settings
@@ -95,10 +94,6 @@ StateUpdateResult WebScheduler::update(JsonObject root, WebScheduler & webSchedu
si.value = schedule["value"].as<std::string>(); si.value = schedule["value"].as<std::string>();
strlcpy(si.name, schedule["name"].as<const char *>(), sizeof(si.name)); strlcpy(si.name, schedule["name"].as<const char *>(), sizeof(si.name));
if (si.name[0] == '\0') {
snprintf(si.name, sizeof(si.name), "schedule_%d", i++); // set a default name. Before v3.9.0 we allowed empty schedule names.
}
// calculated elapsed minutes // calculated elapsed minutes
si.elapsed_min = Helpers::string2minutes(si.time.c_str()); si.elapsed_min = Helpers::string2minutes(si.time.c_str());
si.retry_cnt = 0xFF; // no startup retries si.retry_cnt = 0xFF; // no startup retries
@@ -580,11 +575,11 @@ void WebSchedulerService::load_test_data() {
// test 1 // test 1
auto si = ScheduleItem(); auto si = ScheduleItem();
si.active = true; si.active = true;
si.flags = 1; si.flags = 1; // day schedule
si.time = "12:00"; si.time = "12:00";
si.cmd = "system/fetch"; si.cmd = "system/fetch";
si.value = "10"; si.value = "10";
strcpy(si.name, "test_scheduler"); strcpy(si.name, "test_scheduler1");
si.elapsed_min = 0; si.elapsed_min = 0;
si.retry_cnt = 0xFF; // no startup retries si.retry_cnt = 0xFF; // no startup retries
@@ -593,11 +588,11 @@ void WebSchedulerService::load_test_data() {
// test 2 // test 2
si = ScheduleItem(); si = ScheduleItem();
si.active = false; si.active = false;
si.flags = 1; si.flags = SCHEDULEFLAG_SCHEDULE_IMMEDIATE; // immediate
si.time = "13:00"; si.time = "13:00";
si.cmd = "system/message"; si.cmd = "system/message";
si.value = "20"; si.value = "20";
strcpy(si.name, ""); // to make sure its excluded from Dashboard strcpy(si.name, "test_scheduler2"); // to make sure its excluded from Dashboard
si.elapsed_min = 0; si.elapsed_min = 0;
si.retry_cnt = 0xFF; // no startup retries si.retry_cnt = 0xFF; // no startup retries