Skip to content

Commit 97cb306

Browse files
committed
refactor: merge new config instead of overriding
1 parent 4cc2efa commit 97cb306

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

src/config.cpp

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,33 @@ void Config::taskRunner(void *p) {
2727
}
2828

2929
t->current.clear();
30-
t->current = t->newCfg;
30+
Config::merge(t->current, t->newCfg);
3131
t->newCfg.clear();
3232
t->save();
3333

3434
vTaskDelete(NULL);
3535
};
3636

37+
void Config::merge(JsonVariant dst, JsonVariantConst src) {
38+
if (src.is<JsonObjectConst>()) {
39+
for (JsonPairConst kvp : src.as<JsonObjectConst>()) {
40+
if (dst[kvp.key()]) {
41+
Config::merge(dst[kvp.key()], kvp.value());
42+
43+
return;
44+
}
45+
46+
dst[kvp.key()] = kvp.value();
47+
}
48+
49+
return;
50+
}
51+
52+
if (!src.isNull() && strcmp(src.as<const char*>(), "") != 0) {
53+
dst.set(src);
54+
}
55+
};
56+
3757
void Config::initServer(AsyncWebServer *server) {
3858
server->on("/config", HTTP_GET, [&](AsyncWebServerRequest *request) {
3959
Log::instance()->info("Sending current configuration\n");

src/config.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ class Config {
1313
private:
1414
JsonDocument newCfg;
1515
ConfigChangeHandler configChangeHandler;
16+
static void merge(JsonVariant, JsonVariantConst);
1617
static void taskRunner(void*);
1718

1819
public:

0 commit comments

Comments
 (0)