diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 78658ff..a18687a 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -201,7 +201,6 @@ set(headers settingsutils.h statistics.h statustexthelper.h - stringsettings.h taskmanager.h texts.h time_bobbycar.h @@ -215,7 +214,6 @@ set(headers webserver_lock.h webserver_ota.h webserver_settings.h - webserver_stringsettings.h webserver_newsettings.h widgets/doubleprogressbar.h displays/menudisplaywithtime.h @@ -439,7 +437,6 @@ set(sources settingsutils.cpp statistics.cpp statustexthelper.cpp - stringsettings.cpp taskmanager.cpp texts.cpp time_bobbycar.cpp @@ -453,7 +450,6 @@ set(sources webserver_lock.cpp webserver_ota.cpp webserver_settings.cpp - webserver_stringsettings.cpp webserver_newsettings.cpp widgets/doubleprogressbar.cpp wifi_bobbycar.cpp diff --git a/main/actions/erasenvsaction.h b/main/actions/erasenvsaction.h index a918c84..86e3215 100644 --- a/main/actions/erasenvsaction.h +++ b/main/actions/erasenvsaction.h @@ -25,7 +25,6 @@ public: } settings = presets::defaultSettings; - stringSettings = presets::makeDefaultStringSettings(); if (!settingsPersister.openCommon()) { @@ -47,12 +46,6 @@ public: ESP_LOGE("BOBBY", "load() for settings failed"); //return; } - - if (!settingsPersister.load(stringSettings)) - { - ESP_LOGE("BOBBY", "load() for stringSettings failed"); - //return; - } } }; } diff --git a/main/buildserver.cpp b/main/buildserver.cpp index 9da58cb..8ea6dca 100644 --- a/main/buildserver.cpp +++ b/main/buildserver.cpp @@ -23,8 +23,8 @@ namespace buildserver { uint16_t count_available_buildserver() { uint16_t count = 0; - for (const auto &otaServer : stringSettings.otaServers) { - if (!otaServer.url.empty()) count++; + for (const auto &otaServer : configs.otaServers) { + if (!otaServer.url.value.empty()) count++; } return count; } @@ -135,12 +135,12 @@ namespace buildserver { std::string get_ota_url_from_index(uint16_t index) { - if (index < stringSettings.otaServers.size()) + if (index < configs.otaServers.size()) { - auto otaServer = stringSettings.otaServers[index]; - if (!otaServer.url.empty()) + const auto &otaServer = configs.otaServers[index]; + if (!otaServer.url.value.empty()) { - return otaServer.url; + return otaServer.url.value; } else { @@ -198,8 +198,8 @@ namespace buildserver { index = 0; - url_for_latest = fmt::format("{}{}", stringSettings.otaServerUrl, doc["latest"].as()); - url_for_hashes = fmt::format("{}{}", stringSettings.otaServerUrl, doc["url"].as()); + url_for_latest = fmt::format("{}{}", configs.otaServerUrl.value, doc["latest"].as()); + url_for_hashes = fmt::format("{}{}", configs.otaServerUrl.value, doc["url"].as()); parsing_finished = true; } diff --git a/main/displays/menus/selectbuildserverbranch.cpp b/main/displays/menus/selectbuildserverbranch.cpp index de4f152..e6ffbb6 100644 --- a/main/displays/menus/selectbuildserverbranch.cpp +++ b/main/displays/menus/selectbuildserverbranch.cpp @@ -88,7 +88,7 @@ SelectBuildserverBranchMenu::SelectBuildserverBranchMenu() ERR_MESSAGE(TEXT_OTA_NOBUILDSERVERAVAILABLE); // E:No server saved. } - if (stringSettings.otaServerUrl.empty()) + if (configs.otaServerUrl.value.empty()) { ERR_MESSAGE(TEXT_OTA_NOBUILDSERVERSELECTED); // E:No server selected. } @@ -99,7 +99,7 @@ SelectBuildserverBranchMenu::SelectBuildserverBranchMenu() } SelectBranch::setup_request(); - SelectBranch::start_descriptor_request(stringSettings.otaServerUrl); + SelectBranch::start_descriptor_request(configs.otaServerUrl.value); } void SelectBuildserverBranchMenu::update() diff --git a/main/displays/menus/selectbuildservermenu.cpp b/main/displays/menus/selectbuildservermenu.cpp index ad7955f..31e5e67 100644 --- a/main/displays/menus/selectbuildservermenu.cpp +++ b/main/displays/menus/selectbuildservermenu.cpp @@ -32,12 +32,10 @@ public: void triggered() override { - stringSettings.otaServerUrl = m_buildserver_url; + configs.write_config(configs.otaServerUrl, m_buildserver_url); // mir egal ob succeeded if (m_buildserver_url.substr(m_buildserver_url.length() - 4) == ".bin") - { configs.write_config(configs.otaUrl, m_buildserver_url); // mir egal ob es succeeded - } - saveSettings(); + url_for_latest.clear(); url_for_hashes.clear(); availableVersions = {}; @@ -51,10 +49,10 @@ private: SelectBuildServerMenu::SelectBuildServerMenu() { - for (const auto &otaServer : stringSettings.otaServers) + for (const auto &otaServer : configs.otaServers) { - std::string url = otaServer.url; - std::string name = (otaServer.name.empty()) ? url : otaServer.name; + std::string url = otaServer.url.value; + std::string name = (otaServer.name.value.empty()) ? url : otaServer.name.value; if (!name.empty()) { diff --git a/main/displays/menus/selectotabuildmenu.cpp b/main/displays/menus/selectotabuildmenu.cpp index 88549e7..a908c3c 100644 --- a/main/displays/menus/selectotabuildmenu.cpp +++ b/main/displays/menus/selectotabuildmenu.cpp @@ -54,7 +54,7 @@ SelectBuildMenu::SelectBuildMenu() MESSAGE(TEXT_OTA_NOBUILDSERVERAVAILABLE); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); } - else if (stringSettings.otaServerUrl.empty()) + else if (configs.otaServerUrl.value.empty()) { MESSAGE(TEXT_OTA_NOBUILDSERVERSELECTED); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); @@ -69,7 +69,7 @@ SelectBuildMenu::SelectBuildMenu() } else { - std::string serverUrl = stringSettings.otaServerUrl; + std::string serverUrl = configs.otaServerUrl.value; if (serverUrl.substr(serverUrl.length() - 4) == ".bin") { auto &menuitem = constructMenuItem>(); diff --git a/main/globals.cpp b/main/globals.cpp index 2ba0529..3d379e4 100644 --- a/main/globals.cpp +++ b/main/globals.cpp @@ -25,7 +25,6 @@ bool simplified = ; Settings settings; -StringSettings stringSettings; SettingsPersister settingsPersister; std::array ledstrip_custom_colors; diff --git a/main/globals.h b/main/globals.h index 21c00db..9b11b09 100644 --- a/main/globals.h +++ b/main/globals.h @@ -23,7 +23,6 @@ #include "display.h" #include "modeinterface.h" #include "settings.h" -#include "stringsettings.h" #include "settingspersister.h" #include "macros_bobbycar.h" @@ -51,7 +50,6 @@ extern bool isLocked; extern bool simplified; extern Settings settings; -extern StringSettings stringSettings; extern SettingsPersister settingsPersister; extern std::array ledstrip_custom_colors; diff --git a/main/main.cpp b/main/main.cpp index e46c883..d9d2d41 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -47,7 +47,6 @@ extern "C" void app_main() ESP_LOGE(TAG, "config_init_settings() failed with %s", esp_err_to_name(result)); settings = presets::defaultSettings; - stringSettings = presets::makeDefaultStringSettings(); if (settingsPersister.init()) { diff --git a/main/newsettings.h b/main/newsettings.h index beb4c0d..bf7ff56 100644 --- a/main/newsettings.h +++ b/main/newsettings.h @@ -66,6 +66,18 @@ public: ConfigWrapper doorToken; }; +class ConfiguredOtaServer +{ +public: + ConfiguredOtaServer(const char *nameKey, const char *urlKey) : + name{std::string{}, DoReset, {}, nameKey }, + url {std::string{}, DoReset, StringOr, urlKey } + {} + + ConfigWrapper name; + ConfigWrapper url; +}; + class ConfigContainer { using mac_t = wifi_stack::mac_t; @@ -122,10 +134,19 @@ public: ConfigWrapper cloudUrl {std::string{}, DoReset, StringOr, "cloudUrl" }; ConfigWrapper udpCloudHost {std::string{}, DoReset, {}, "udpCloudHost" }; + ConfigWrapper otaUrl {std::string{}, DoReset, StringOr, "otaUrl" }; ConfigWrapper otaUsername {std::string{}, DoReset, {}, "otaUsername" }; ConfigWrapper otaServerUrl {std::string{}, DoReset, StringOr, "otaServerUrl" }; ConfigWrapper otaServerBranch {std::string{}, DoReset, {}, "otaServerBranch" }; + std::array otaServers { + ConfiguredOtaServer { "otaName0", "otaUrl0" }, + ConfiguredOtaServer { "otaName1", "otaUrl1" }, + ConfiguredOtaServer { "otaName2", "otaUrl2" }, + ConfiguredOtaServer { "otaName3", "otaUrl3" }, + ConfiguredOtaServer { "otaName4", "otaUrl4" } + }; + ConfigWrapper dns_announce_enabled{true, DoReset, {}, "dnsAnnounceEnab" }; ConfigWrapper dns_announce_key {std::string{}, DoReset, {}, "dnsAnnounceKey" }; ConfigWrapper webserverPassword {std::string{}, DoReset, {}, "websPassword" }; @@ -274,10 +295,22 @@ public: \ x(cloudUrl) \ x(udpCloudHost) \ + \ x(otaUrl) \ x(otaUsername) \ x(otaServerUrl) \ x(otaServerBranch) \ + x(otaServers[0].name) \ + x(otaServers[0].url) \ + x(otaServers[1].name) \ + x(otaServers[1].url) \ + x(otaServers[2].name) \ + x(otaServers[2].url) \ + x(otaServers[3].name) \ + x(otaServers[3].url) \ + x(otaServers[4].name) \ + x(otaServers[4].url) \ + \ x(dns_announce_enabled) \ x(dns_announce_key) \ // x(webserverPassword) diff --git a/main/presets.cpp b/main/presets.cpp index 3ea53e7..7a06679 100644 --- a/main/presets.cpp +++ b/main/presets.cpp @@ -1,28 +1 @@ #include "presets.h" -#include "macros_bobbycar.h" - -namespace presets { -StringSettings makeDefaultStringSettings() -{ -#ifdef FEATURE_OTA - using ConfiguredOtaServer = StringSettings::ConfiguredOtaServer; -#endif - - return { -#ifdef FEATURE_OTA - .otaServers = std::array { - ConfiguredOtaServer { .name = {}, .url = {} }, - ConfiguredOtaServer { .name = {}, .url = {} }, - ConfiguredOtaServer { .name = {}, .url = {} }, - ConfiguredOtaServer { .name = {}, .url = {} }, - ConfiguredOtaServer { .name = {}, .url = {} }, -// ConfiguredOtaServer { .name = {}, .url = {} }, -// ConfiguredOtaServer { .name = {}, .url = {} }, -// ConfiguredOtaServer { .name = {}, .url = {} }, -// ConfiguredOtaServer { .name = {}, .url = {} }, -// ConfiguredOtaServer { .name = {}, .url = {} }, - }, -#endif - }; -} -} // namespace presets diff --git a/main/presets.h b/main/presets.h index a7a7fe7..a172063 100644 --- a/main/presets.h +++ b/main/presets.h @@ -11,7 +11,6 @@ // local includes #include "settings.h" -#include "stringsettings.h" #include "ledstripdefines.h" #include "ledstrip.h" @@ -327,6 +326,4 @@ constexpr Settings defaultSettings { .espnow = defaultEspNowSettings, #endif }; - -StringSettings makeDefaultStringSettings(); } // namespace presets diff --git a/main/settingspersister.cpp b/main/settingspersister.cpp index 0da03fc..335b70a 100644 --- a/main/settingspersister.cpp +++ b/main/settingspersister.cpp @@ -24,7 +24,6 @@ #endif #include "unifiedmodelmode.h" #include "settings.h" -#include "stringsettings.h" bool SettingsPersister::init() { @@ -327,7 +326,6 @@ bool SettingsPersister::load(T &settings) } template bool SettingsPersister::load(Settings &settings); -template bool SettingsPersister::load(StringSettings &settings); template struct nvsSetterHelper; template<> struct nvsSetterHelper { static constexpr auto nvs_set = &nvs_set_i8; }; @@ -455,7 +453,6 @@ bool SettingsPersister::save(T &settings) } template bool SettingsPersister::save(Settings &settings); -template bool SettingsPersister::save(StringSettings &settings); std::optional SettingsPersister::currentlyOpenProfileIndex() const { diff --git a/main/settingsutils.cpp b/main/settingsutils.cpp index 87b64bb..3f8967e 100644 --- a/main/settingsutils.cpp +++ b/main/settingsutils.cpp @@ -22,7 +22,6 @@ void switchProfile(uint8_t index) #endif settings = presets::defaultSettings; - stringSettings = presets::makeDefaultStringSettings(); if (!settingsPersister.openProfile(index)) { @@ -35,11 +34,5 @@ void switchProfile(uint8_t index) ESP_LOGE("BOBBY", "load() for settings failed"); return; } - - if (!settingsPersister.load(stringSettings)) - { - ESP_LOGE("BOBBY", "load() for stringSettings failed"); - return; - } } } // namespace diff --git a/main/stringsettings.cpp b/main/stringsettings.cpp deleted file mode 100644 index e69de29..0000000 diff --git a/main/stringsettings.h b/main/stringsettings.h deleted file mode 100644 index 9014c84..0000000 --- a/main/stringsettings.h +++ /dev/null @@ -1,55 +0,0 @@ -#pragma once - -// system includes -#include -#include - -struct StringSettings -{ - template - void executeForEveryCommonSetting(T &&callable); - - template - void executeForEveryProfileSetting(T &&callable); - -#ifdef FEATURE_OTA - struct ConfiguredOtaServer { - std::string name; - std::string url; - }; - - std::array otaServers; std::string otaServerUrl; -#endif -}; - -template -void StringSettings::executeForEveryCommonSetting(T &&callable) -{ -#ifdef FEATURE_OTA - callable("otaName0", otaServers[0].name); - callable("otaUrl0", otaServers[0].url); - callable("otaName1", otaServers[1].name); - callable("otaUrl1", otaServers[1].url); - callable("otaName2", otaServers[2].name); - callable("otaUrl2", otaServers[2].url); - callable("otaName3", otaServers[3].name); - callable("otaUrl3", otaServers[3].url); - callable("otaName4", otaServers[4].name); - callable("otaUrl4", otaServers[4].url); -// callable("otaName5", otaServers[5].name); -// callable("otaUrl5", otaServers[5].url); -// callable("otaName6", otaServers[6].name); -// callable("otaUrl6", otaServers[6].url); -// callable("otaName7", otaServers[7].name); -// callable("otaUrl7", otaServers[7].url); -// callable("otaName8", otaServers[8].name); -// callable("otaUrl8", otaServers[8].url); -// callable("otaName9", otaServers[9].name); -// callable("otaUrl9", otaServers[9].url); -#endif -} - -template -void StringSettings::executeForEveryProfileSetting(T &&callable) -{ -} diff --git a/main/utils.cpp b/main/utils.cpp index a8d79a0..88f192f 100644 --- a/main/utils.cpp +++ b/main/utils.cpp @@ -202,8 +202,6 @@ bool loadSettings() bool result{true}; if (!settingsPersister.load(settings)) result = false; - if (!settingsPersister.load(stringSettings)) - result = false; return result; } @@ -213,8 +211,6 @@ bool saveSettings() bool result{true}; if (!settingsPersister.save(settings)) result = false; - if (!settingsPersister.save(stringSettings)) - result = false; return result; } diff --git a/main/webserver.cpp b/main/webserver.cpp index f8a6105..899722c 100644 --- a/main/webserver.cpp +++ b/main/webserver.cpp @@ -24,7 +24,6 @@ #include "webserver_ota.h" #endif #include "webserver_settings.h" -#include "webserver_stringsettings.h" #include "webserver_newsettings.h" #ifdef OLD_NVS #include "webserver_dumpnvs.h" @@ -60,7 +59,7 @@ void initWebserver() { httpd_config_t httpConfig HTTPD_DEFAULT_CONFIG(); httpConfig.core_id = 1; - httpConfig.max_uri_handlers = 17; + httpConfig.max_uri_handlers = 15; httpConfig.stack_size = 8192; const auto result = httpd_start(&httpdHandle, &httpConfig); @@ -82,8 +81,6 @@ void initWebserver() #endif httpd_uri_t { .uri = "/settings", .method = HTTP_GET, .handler = webserver_settings_handler, .user_ctx = NULL }, httpd_uri_t { .uri = "/saveSettings", .method = HTTP_GET, .handler = webserver_saveSettings_handler, .user_ctx = NULL }, - httpd_uri_t { .uri = "/stringSettings", .method = HTTP_GET, .handler = webserver_stringSettings_handler, .user_ctx = NULL }, - httpd_uri_t { .uri = "/saveStringSettings", .method = HTTP_GET, .handler = webserver_saveStringSettings_handler, .user_ctx = NULL }, httpd_uri_t { .uri = "/newSettings", .method = HTTP_GET, .handler = webserver_newSettings_handler, .user_ctx = NULL }, httpd_uri_t { .uri = "/saveNewSettings", .method = HTTP_GET, .handler = webserver_saveNewSettings_handler, .user_ctx = NULL }, httpd_uri_t { .uri = "/resetNewSettings", .method = HTTP_GET, .handler = webserver_resetNewSettings_handler, .user_ctx = NULL }, diff --git a/main/webserver_displaycontrol.cpp b/main/webserver_displaycontrol.cpp index e131723..f3ffc99 100644 --- a/main/webserver_displaycontrol.cpp +++ b/main/webserver_displaycontrol.cpp @@ -184,7 +184,6 @@ esp_err_t webserver_root_handler(httpd_req_t *req) #endif "Settings - " - "String Settings - " "New Settings - " "Dump NVS"; } diff --git a/main/webserver_dumpnvs.cpp b/main/webserver_dumpnvs.cpp index 278c8ad..773af51 100644 --- a/main/webserver_dumpnvs.cpp +++ b/main/webserver_dumpnvs.cpp @@ -154,11 +154,6 @@ esp_err_t webserver_dump_nvs_handler(httpd_req_t *req) showInputForSetting(key, value, json_settings); }); - JsonObject json_stringSettings = doc.createNestedObject("stringSettings"); - stringSettings.executeForEveryCommonSetting([&](std::string_view key, const auto &value){ - showInputForSetting(key, value, json_stringSettings); - }); - JsonObject profiles = doc.createNestedObject("profiles"); // Profile settings @@ -175,13 +170,8 @@ esp_err_t webserver_dump_nvs_handler(httpd_req_t *req) const auto profile_str = cur_profile ? std::to_string(*cur_profile) : "-"; JsonObject profile = profiles.createNestedObject(profile_str); - JsonObject profile_stringSettings = profile.createNestedObject("stringSettings"); JsonObject profile_settings = profile.createNestedObject("settings"); - stringSettings.executeForEveryProfileSetting([&](const char *key, auto &value){ - showInputForSetting(key, value, profile_stringSettings); - }); - settings.executeForEveryProfileSetting([&](const char *key, auto &value){ showInputForSetting(key, value, profile_settings); }); diff --git a/main/webserver_newsettings.cpp b/main/webserver_newsettings.cpp index dc74d57..2af1af2 100644 --- a/main/webserver_newsettings.cpp +++ b/main/webserver_newsettings.cpp @@ -169,7 +169,6 @@ esp_err_t webserver_newSettings_handler(httpd_req_t *req) "Update - " #endif "Settings - " - "String Settings - " "New Settings - " "Dump NVS"; } diff --git a/main/webserver_ota.cpp b/main/webserver_ota.cpp index ecaa7f4..2d614f6 100644 --- a/main/webserver_ota.cpp +++ b/main/webserver_ota.cpp @@ -209,7 +209,6 @@ esp_err_t webserver_ota_handler(httpd_req_t *req) body += "Display control - " "Update - " "Settings - " - "String Settings - " "New Settings - " "Dump NVS"; } diff --git a/main/webserver_settings.cpp b/main/webserver_settings.cpp index dd9fee0..ebf2404 100644 --- a/main/webserver_settings.cpp +++ b/main/webserver_settings.cpp @@ -146,7 +146,6 @@ esp_err_t webserver_settings_handler(httpd_req_t *req) "Update - " #endif "Settings - " - "String Settings - " "New Settings - " "Dump NVS"; } diff --git a/main/webserver_stringsettings.cpp b/main/webserver_stringsettings.cpp deleted file mode 100644 index 92b995e..0000000 --- a/main/webserver_stringsettings.cpp +++ /dev/null @@ -1,191 +0,0 @@ -#include "webserver_stringsettings.h" - -// esp-idf includes -#ifdef FEATURE_WEBSERVER -#include -#endif - -// 3rdparty lib includes -#include -#include -#include -#include -#include -#include - -// local includes -#include "globals.h" -#include "webserver_lock.h" - -#ifdef FEATURE_WEBSERVER -using namespace std::chrono_literals; -using esphttpdutils::HtmlTag; - -namespace { -constexpr const char * const TAG = "BOBBYWEB"; -} // namespace - -esp_err_t webserver_stringSettings_handler(httpd_req_t *req) -{ -#ifndef FEATURE_IS_MIR_EGAL_OB_DER_WEBSERVER_KORREKT_ARBEITET - espcpputils::LockHelper helper{webserver_lock->handle, std::chrono::ceil(5s).count()}; - if (!helper.locked()) - { - constexpr const std::string_view msg = "could not lock webserver_lock"; - ESP_LOGE(TAG, "%.*s", msg.size(), msg.data()); - CALL_AND_EXIT(esphttpdutils::webserver_resp_send, req, esphttpdutils::ResponseStatus::BadRequest, "text/plain", msg); - } -#endif - - std::string body; - - { - HtmlTag htmlTag{"html", body}; - - { - HtmlTag headTag{"head", body}; - - { - HtmlTag titleTag{"title", body}; - body += "String Settings"; - } - - body += ""; - - HtmlTag styleTag{"style", "type=\"text/css\"", body}; - body += - ".form-table {" - "display: table;" - "border-collapse: separate;" - "border-spacing: 10px 0;" - "}" - - ".form-table .form-table-row {" - "display: table-row;" - "}" - - ".form-table .form-table-row .form-table-cell {" - "display: table-cell;" - "}"; - } - - { - HtmlTag bodyTag{"body", body}; - - { - HtmlTag h1Tag{"h1", body}; - body += "String Settings"; - } - - { - HtmlTag pTag{"p", body}; - body += "Display control - " -#ifdef FEATURE_OTA - "Update - " -#endif - "Settings - " - "String Settings - " - "New Settings - " - "Dump NVS"; - } - - HtmlTag divTag{"div", "class=\"form-table\"", body}; - stringSettings.executeForEveryCommonSetting([&](std::string_view key, const auto &value){ - HtmlTag formTag{"form", "class=\"form-table-row\" action=\"/saveStringSettings\" method=\"GET\"", body}; - - { - HtmlTag divTag{"div", "class=\"form-table\"", body}; - HtmlTag bTag{"b", body}; - body += esphttpdutils::htmlentities(key); - } - - { - HtmlTag divTag{"div", "class=\"form-table-cell\"", body}; - body += fmt::format("", - esphttpdutils::htmlentities(key), - esphttpdutils::htmlentities(value)); - } - - { - HtmlTag divTag{"div", "class=\"form-table-cell\"", body}; - HtmlTag buttonTag{"button", "type=\"submit\"", body}; - body += "Save"; - } - }); - } - } - - CALL_AND_EXIT(esphttpdutils::webserver_resp_send, req, esphttpdutils::ResponseStatus::Ok, "text/html", body) -} - -esp_err_t webserver_saveStringSettings_handler(httpd_req_t *req) -{ -#ifndef FEATURE_IS_MIR_EGAL_OB_DER_WEBSERVER_KORREKT_ARBEITET - espcpputils::LockHelper helper{webserver_lock->handle, std::chrono::ceil(5s).count()}; - if (!helper.locked()) - { - constexpr const std::string_view msg = "could not lock webserver_lock"; - ESP_LOGE(TAG, "%.*s", msg.size(), msg.data()); - CALL_AND_EXIT(esphttpdutils::webserver_resp_send, req, esphttpdutils::ResponseStatus::BadRequest, "text/plain", msg); - } -#endif - - std::string query; - if (auto result = esphttpdutils::webserver_get_query(req)) - query = *result; - else - { - ESP_LOGE(TAG, "%.*s", result.error().size(), result.error().data()); - CALL_AND_EXIT(esphttpdutils::webserver_resp_send, req, esphttpdutils::ResponseStatus::BadRequest, "text/plain", result.error()); - } - - std::string body; - bool success{true}; - - stringSettings.executeForEveryCommonSetting([&](std::string_view key, auto &value){ - char valueBufEncoded[256]; - if (const auto result = httpd_query_key_value(query.data(), key.data(), valueBufEncoded, 256); result != ESP_OK) - { - if (result != ESP_ERR_NOT_FOUND) - { - const auto msg = fmt::format("{}: httpd_query_key_value() failed with {}", key, esp_err_to_name(result)); - ESP_LOGE(TAG, "%.*s", msg.size(), msg.data()); - body += msg; - body += '\n'; - success = false; - } - return; - } - - char valueBuf[257]; - esphttpdutils::urldecode(valueBuf, valueBufEncoded); - - value = valueBuf; - body += fmt::format("{}: applied", key); - body += '\n'; - }); - - if (body.empty()) - CALL_AND_EXIT(esphttpdutils::webserver_resp_send, req, esphttpdutils::ResponseStatus::Ok, "text/plain", "nothing changed?!") - - if (settingsPersister.save(stringSettings)) - body += "string settings persisted successfully"; - else - { - body += "error while persisting string settings"; - success = false; - } - - if (success) - { - CALL_AND_EXIT_ON_ERROR(httpd_resp_set_hdr, req, "Location", "/stringSettings") - body += "\nOk, continue at /stringSettings"; - } - - CALL_AND_EXIT(esphttpdutils::webserver_resp_send, - req, - success ? esphttpdutils::ResponseStatus::TemporaryRedirect : esphttpdutils::ResponseStatus::BadRequest, - "text/plain", - body) -} -#endif diff --git a/main/webserver_stringsettings.h b/main/webserver_stringsettings.h deleted file mode 100644 index abd4309..0000000 --- a/main/webserver_stringsettings.h +++ /dev/null @@ -1,13 +0,0 @@ -#pragma once - -// esp-idf includes -#ifdef FEATURE_WEBSERVER -#include -#endif -#include - -#ifdef FEATURE_WEBSERVER -esp_err_t webserver_stringSettings_handler(httpd_req_t *req); -esp_err_t webserver_saveStringSettings_handler(httpd_req_t *req); -#endif -