From 4ea080e7f7841a82e653277d3d65b02592df7aac Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Tue, 19 Oct 2021 22:03:39 +0200 Subject: [PATCH] Implemented menu --- main/CMakeLists.txt | 1 - main/actions/selectbuildserveraction.h | 4 -- main/buildserver.h | 45 +++++++++++++++++++++ main/displays/menus/selectbuildservermenu.h | 41 ++++++++++++++----- main/presets.h | 1 + main/stringsettings.h | 3 ++ 6 files changed, 81 insertions(+), 14 deletions(-) delete mode 100644 main/actions/selectbuildserveraction.h diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 6241553..d2aa6f4 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -77,7 +77,6 @@ set(headers actions/multiaction.h actions/rebootaction.h actions/savesettingsaction.h - actions/selectbuildserveraction.h actions/switchprofileaction.h actions/tempomatmodeapplycurrentpeedaction.h actions/updateswapfrontbackaction.h diff --git a/main/actions/selectbuildserveraction.h b/main/actions/selectbuildserveraction.h deleted file mode 100644 index 61e87de..0000000 --- a/main/actions/selectbuildserveraction.h +++ /dev/null @@ -1,4 +0,0 @@ -#pragma once - -#include "actioninterface.h" -#include "globals.h" diff --git a/main/buildserver.h b/main/buildserver.h index e69de29..1b370cc 100644 --- a/main/buildserver.h +++ b/main/buildserver.h @@ -0,0 +1,45 @@ +#pragma once + +#include "globals.h" +#include "esp_log.h" +#include "fmt/core.h" + +// esp-idf +#include "esp_http_client.h" + +/* + * ToDo: + * - get_ota_decriptor_json_string => returns std::string, takes std::string url + */ +namespace { + +std::string ota_descriptor_json = ""; + +std::string get_ota_url_from_index(uint16_t index) +{ + if (index < stringSettings.otaServers.size()) + { + auto otaServer = stringSettings.otaServers[index]; + if (!otaServer.url.empty()) + { + return otaServer.url; + } + else + { + ESP_LOGE("BOBBY", "Cannot get OTA url: otaServer.url is empty"); + return ""; + } + } + else + { + ESP_LOGE("BOBBY", "Cannot get OTA url: Invalid Index"); + return ""; + } +} + +void get_ota_descriptor(std::string url) +{ + auto descriptorUrl = fmt::format("{}/otaDescriptor", url); + // Make GET request to descriptorUrl and store json somewhere to be decoded when needed, for example in ota_descriptor_json (buildserver.h:16) +} +} diff --git a/main/displays/menus/selectbuildservermenu.h b/main/displays/menus/selectbuildservermenu.h index 21cf7fe..283e271 100644 --- a/main/displays/menus/selectbuildservermenu.h +++ b/main/displays/menus/selectbuildservermenu.h @@ -4,10 +4,14 @@ #include "menudisplay.h" #include "utils.h" #include "actions/dummyaction.h" -#include "actions/selectbuildserveraction.h" #include "icons/back.h" #include "texts.h" #include "globals.h" +#include "buildserver.h" + +// Debugging +#include "esp_log.h" +#include "fmt/core.h" // forward declares @@ -19,6 +23,28 @@ using namespace espgui; namespace { +class BuildserverMenuItem : public MenuItem +{ + +public: + + std::string text() const override { return m_buildserver_name; } + void setBuildserverName(std::string &&buildserver_name) { m_buildserver_name = std::move(buildserver_name); } + void setBuildserverName(const std::string &buildserver_name) { m_buildserver_name = buildserver_name; } + void setBuildserverUrl(std::string &&buildserver_url) { m_buildserver_url = std::move(buildserver_url); } + void setBuildserverUrl(const std::string &buildserver_url) { m_buildserver_url = buildserver_url; } + + void triggered() override + { + stringSettings.otaServerUrl = m_buildserver_url; + saveSettings(); + } + +private: + std::string m_buildserver_url; + std::string m_buildserver_name; +}; + class SelectBuildServerMenu : public MenuDisplay, public StaticText, @@ -27,22 +53,19 @@ class SelectBuildServerMenu : public: SelectBuildServerMenu() { - auto numDisplayedServers = 0; - - for (auto index = 0; index < stringSettings.otaServers.size(); index++) + for (const auto &otaServer : stringSettings.otaServers) { - auto otaServer = stringSettings.otaServers[index]; std::string url = otaServer.url; std::string name = (otaServer.name.empty()) ? url : otaServer.name; if (!name.empty()) { - auto menuitem = constructMenuItem>(); - menuitem.setTitle(name); - numDisplayedServers++; + auto &menuitem = constructMenuItem(); + menuitem.setBuildserverName(name); + menuitem.setBuildserverUrl(url); } } - if (!numDisplayedServers) + if (menuItemCount() < 1) { constructMenuItem, DummyAction>>(); } diff --git a/main/presets.h b/main/presets.h index 6d0c671..43d9d46 100644 --- a/main/presets.h +++ b/main/presets.h @@ -339,6 +339,7 @@ StringSettings makeDefaultStringSettings() ConfiguredOtaServer { .name = {}, .url = {} }, ConfiguredOtaServer { .name = {}, .url = {} },*/ }, + .otaServerUrl = {}, #endif }; } diff --git a/main/stringsettings.h b/main/stringsettings.h index 835c890..8a84352 100644 --- a/main/stringsettings.h +++ b/main/stringsettings.h @@ -44,6 +44,7 @@ struct StringSettings }; std::array otaServers; + std::string otaServerUrl; #endif }; @@ -106,6 +107,8 @@ void StringSettings::executeForEveryCommonSetting(T &&callable) callable("otaUrl8", otaServers[8].url); callable("otaName9", otaServers[9].name); callable("otaUrl9", otaServers[9].url);*/ + + callable("otaserver", otaServerUrl); #endif }