From 55a5ffc6dfe500acc88ccf94845d7793ace570b3 Mon Sep 17 00:00:00 2001 From: proddy Date: Thu, 28 May 2026 20:39:43 +0100 Subject: [PATCH] handle mandatory scheduler name change in update function --- src/core/system.cpp | 12 ++++++++++++ src/web/WebSchedulerService.cpp | 13 ++++--------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/core/system.cpp b/src/core/system.cpp index 29166133c..b49b8b8fd 100644 --- a/src/core/system.cpp +++ b/src/core/system.cpp @@ -1531,6 +1531,18 @@ bool System::check_upgrade() { } 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 } diff --git a/src/web/WebSchedulerService.cpp b/src/web/WebSchedulerService.cpp index eac54c7f1..0f05283c4 100644 --- a/src/web/WebSchedulerService.cpp +++ b/src/web/WebSchedulerService.cpp @@ -82,7 +82,6 @@ StateUpdateResult WebScheduler::update(JsonObject root, WebScheduler & webSchedu EMSESP::webSchedulerService.ha_reset(); // build up the list of schedule items - uint8_t i = 0; auto scheduleItems = root["schedule"].as(); for (const JsonObject schedule : scheduleItems) { // create each schedule item, overwriting any previous settings @@ -95,10 +94,6 @@ StateUpdateResult WebScheduler::update(JsonObject root, WebScheduler & webSchedu si.value = schedule["value"].as(); strlcpy(si.name, schedule["name"].as(), 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 si.elapsed_min = Helpers::string2minutes(si.time.c_str()); si.retry_cnt = 0xFF; // no startup retries @@ -580,11 +575,11 @@ void WebSchedulerService::load_test_data() { // test 1 auto si = ScheduleItem(); si.active = true; - si.flags = 1; + si.flags = 1; // day schedule si.time = "12:00"; si.cmd = "system/fetch"; si.value = "10"; - strcpy(si.name, "test_scheduler"); + strcpy(si.name, "test_scheduler1"); si.elapsed_min = 0; si.retry_cnt = 0xFF; // no startup retries @@ -593,11 +588,11 @@ void WebSchedulerService::load_test_data() { // test 2 si = ScheduleItem(); si.active = false; - si.flags = 1; + si.flags = SCHEDULEFLAG_SCHEDULE_IMMEDIATE; // immediate si.time = "13:00"; si.cmd = "system/message"; 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.retry_cnt = 0xFF; // no startup retries