From ddf0d271371319d398c2f5442e1d70feb470612b Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Tue, 7 Dec 2021 02:53:43 +0100 Subject: [PATCH 1/5] Refactored Ledstrip (Fixed types and removed Macros) --- main/actions/ledstripanimationactions.h | 2 +- main/ledstrip.cpp | 12 ++++++------ main/ledstrip.h | 4 ++-- main/ledstripdefines.h | 12 +++++++----- main/presets.h | 2 +- 5 files changed, 17 insertions(+), 15 deletions(-) diff --git a/main/actions/ledstripanimationactions.h b/main/actions/ledstripanimationactions.h index ed08b8f..d79671e 100644 --- a/main/actions/ledstripanimationactions.h +++ b/main/actions/ledstripanimationactions.h @@ -10,7 +10,7 @@ using namespace espgui; namespace { #ifdef FEATURE_LEDSTRIP -template +template class LedStripSetAnimationAction : public virtual ActionInterface { public: diff --git a/main/ledstrip.cpp b/main/ledstrip.cpp index 625d866..b35229a 100644 --- a/main/ledstrip.cpp +++ b/main/ledstrip.cpp @@ -16,8 +16,8 @@ using namespace std::chrono_literals; std::vector leds; uint8_t gHue = 0; -int16_t blinkAnimation = LEDSTRIP_OVERWRITE_NONE; -int16_t animation_type = LEDSTRIP_ANIMATION_TYPE_DEFAULTRAINBOW; +uint16_t blinkAnimation = LEDSTRIP_OVERWRITE_NONE; +uint16_t animation_type = LedstripAnimation::DefaultRainbow; void initLedStrip() @@ -215,10 +215,10 @@ void showAnimation() { if (settings.ledstrip.enableLedAnimation && !simplified && !(asyncOtaTaskStarted && settings.ledstrip.otaMode != OtaAnimationModes::None)) { - if (animation_type == LEDSTRIP_ANIMATION_TYPE_DEFAULTRAINBOW) showDefaultLedstrip(); - else if (animation_type == LEDSTRIP_ANIMATION_TYPE_BETTERRAINBOW) showBetterRainbow(); - else if (animation_type == LEDSTRIP_ANIMATION_TYPE_SPEEDSYNCANIMATION) showSpeedSyncAnimation(); - else if (animation_type == LEDSTRIP_ANIMATION_TYPE_CUSTOMCOLOR) showCustomColor(); + if (animation_type == LedstripAnimation::DefaultRainbow) showDefaultLedstrip(); + else if (animation_type == LedstripAnimation::BetterRainbow) showBetterRainbow(); + else if (animation_type == LedstripAnimation::SpeedSync) showSpeedSyncAnimation(); + else if (animation_type == LedstripAnimation::CustomColor) showCustomColor(); else showDefaultLedstrip(); } else if (asyncOtaTaskStarted && settings.ledstrip.otaMode != OtaAnimationModes::None) diff --git a/main/ledstrip.h b/main/ledstrip.h index 5c79fd4..e8edea8 100644 --- a/main/ledstrip.h +++ b/main/ledstrip.h @@ -29,8 +29,8 @@ enum OtaAnimationModes extern std::vector leds; extern uint8_t gHue; -extern int16_t blinkAnimation; -extern int16_t animation_type; +extern uint16_t blinkAnimation; +extern uint16_t animation_type; void showDefaultLedstrip(); void showAnimation(); diff --git a/main/ledstripdefines.h b/main/ledstripdefines.h index 283f1e3..5582ca9 100644 --- a/main/ledstripdefines.h +++ b/main/ledstripdefines.h @@ -1,4 +1,5 @@ #pragma once +#include /* * This file contains a few defines, so you don't have to remember which ledstrip animation is which number */ @@ -13,11 +14,12 @@ #endif #define LEDSTRIP_OVERWRITE_BLINKBOTH 3 - -#define LEDSTRIP_ANIMATION_TYPE_DEFAULTRAINBOW 0 -#define LEDSTRIP_ANIMATION_TYPE_BETTERRAINBOW 1 -#define LEDSTRIP_ANIMATION_TYPE_SPEEDSYNCANIMATION 2 -#define LEDSTRIP_ANIMATION_TYPE_CUSTOMCOLOR 3 +enum LedstripAnimation : uint16_t { + DefaultRainbow, + BetterRainbow, + SpeedSync, + CustomColor +}; #define BLINK_LEFT_EXPR blinkAnimation != LEDSTRIP_OVERWRITE_BLINKRIGHT #define BLINK_RIGHT_EXPR blinkAnimation != LEDSTRIP_OVERWRITE_BLINKLEFT diff --git a/main/presets.h b/main/presets.h index 578bc5f..c99feab 100644 --- a/main/presets.h +++ b/main/presets.h @@ -256,7 +256,7 @@ constexpr Settings::Ledstrip defaultLedstrip { #ifdef LEDSTRIP_ANIMATION_DEFAULT .animationType = LEDSTRIP_ANIMATION_DEFAULT, #else - .animationType = LEDSTRIP_ANIMATION_TYPE_DEFAULTRAINBOW, + .animationType = LedstripAnimation::DefaultRainbow, #endif .enableFullBlink = false, .enableStVO = false, From 5dff47f4376663ada6cd3732e575d1960ed204ff Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Tue, 7 Dec 2021 02:54:14 +0100 Subject: [PATCH 2/5] Refactored blesettingsmenu, ledstripselectanimationmenu, profilesmenu --- main/bletexthelpers.h | 6 +- main/displays/menus/blesettingsmenu.cpp | 30 ++++++++++ main/displays/menus/blesettingsmenu.h | 26 ++------- .../menus/ledstripselectanimationmenu.cpp | 46 +++++++++++++++ .../menus/ledstripselectanimationmenu.h | 57 ++++--------------- main/displays/menus/profilesmenu.cpp | 23 ++++++++ main/displays/menus/profilesmenu.h | 22 ++----- 7 files changed, 122 insertions(+), 88 deletions(-) diff --git a/main/bletexthelpers.h b/main/bletexthelpers.h index ac8271f..359eb0a 100644 --- a/main/bletexthelpers.h +++ b/main/bletexthelpers.h @@ -4,9 +4,8 @@ #include "textinterface.h" #include "ble_bobby.h" -namespace { #ifdef FEATURE_BLE -struct BleServerPeerDevicesText : public virtual TextInterface { +struct BleServerPeerDevicesText : public virtual espgui::TextInterface { public: std::string text() const override { @@ -17,7 +16,7 @@ public: } }; -struct BleCharacSubscribedText : public virtual TextInterface { +struct BleCharacSubscribedText : public virtual espgui::TextInterface { public: std::string text() const override { @@ -28,4 +27,3 @@ public: } }; #endif -} diff --git a/main/displays/menus/blesettingsmenu.cpp b/main/displays/menus/blesettingsmenu.cpp index e69de29..8fdc785 100644 --- a/main/displays/menus/blesettingsmenu.cpp +++ b/main/displays/menus/blesettingsmenu.cpp @@ -0,0 +1,30 @@ +#include "blesettingsmenu.h" + +// local includes +#include "accessors/settingsaccessors.h" +#include "actions/dummyaction.h" +#include "actions/switchscreenaction.h" +#include "actions/toggleboolaction.h" +#include "bletexthelpers.h" +#include "checkboxicon.h" +#include "displays/menus/settingsmenu.h" +#include "icons/back.h" +#include "texts.h" + +#ifdef FEATURE_BLE + +using namespace espgui; + +BleSettingsMenu::BleSettingsMenu() +{ + constructMenuItem, ToggleBoolAction, CheckboxIcon, BleEnabledAccessor>>(); + constructMenuItem>(); + constructMenuItem>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); +} + +void BleSettingsMenu::back() +{ + switchScreen(); +} +#endif diff --git a/main/displays/menus/blesettingsmenu.h b/main/displays/menus/blesettingsmenu.h index 62e550f..1363c43 100644 --- a/main/displays/menus/blesettingsmenu.h +++ b/main/displays/menus/blesettingsmenu.h @@ -2,32 +2,16 @@ // local includes #include "menudisplay.h" -#include "menuitem.h" -#include "actions/switchscreenaction.h" -#include "actions/toggleboolaction.h" -#include "checkboxicon.h" -#include "bletexthelpers.h" -#include "accessors/settingsaccessors.h" -#include "icons/back.h" #include "texts.h" -using namespace espgui; - -namespace { #ifdef FEATURE_BLE + class BleSettingsMenu : - public MenuDisplay, - public StaticText, - public BackActionInterface> + public espgui::MenuDisplay, + public espgui::StaticText { public: - BleSettingsMenu() - { - constructMenuItem, ToggleBoolAction, CheckboxIcon, BleEnabledAccessor>>(); - constructMenuItem>(); - constructMenuItem>(); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); - } + BleSettingsMenu(); + void back() override; }; #endif -} // namespace diff --git a/main/displays/menus/ledstripselectanimationmenu.cpp b/main/displays/menus/ledstripselectanimationmenu.cpp index e69de29..d3437b7 100644 --- a/main/displays/menus/ledstripselectanimationmenu.cpp +++ b/main/displays/menus/ledstripselectanimationmenu.cpp @@ -0,0 +1,46 @@ +#include "ledstripselectanimationmenu.h" + +// Local includes +#include "actions/dummyaction.h" +#include "actions/ledstripanimationactions.h" +#include "actions/switchscreenaction.h" +#include "icons/back.h" +#include "ledstripdefines.h" +#include "ledstripmenu.h" + +using namespace espgui; + + +#ifdef FEATURE_LEDSTRIP +std::string currentSelectedAnimationText::text() const +{ + switch (animation_type) { + case LedstripAnimation::DefaultRainbow: + return TEXT_ANIMATION_DEFAULTRAINBOW; + case LedstripAnimation::BetterRainbow: + return TEXT_ANIMATION_BETTERRAINBOW; + case LedstripAnimation::SpeedSync: + return TEXT_ANIMATION_SPEEDSYNCANIMATION; + case LedstripAnimation::CustomColor: + return TEXT_ANIMATION_CUSTOMCOLOR; + default: + return "Animation Unkown"; + } +} + +LedstripSelectAnimationMenu::LedstripSelectAnimationMenu() +{ + constructMenuItem>(); + constructMenuItem>(); + constructMenuItem, LedStripSetAnimationAction>>(); + constructMenuItem, LedStripSetAnimationAction>>(); + constructMenuItem, LedStripSetAnimationAction>>(); + constructMenuItem, LedStripSetAnimationAction>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); +} + +void LedstripSelectAnimationMenu::back() +{ + switchScreen(); +} +#endif diff --git a/main/displays/menus/ledstripselectanimationmenu.h b/main/displays/menus/ledstripselectanimationmenu.h index 8deae40..5a08871 100644 --- a/main/displays/menus/ledstripselectanimationmenu.h +++ b/main/displays/menus/ledstripselectanimationmenu.h @@ -2,54 +2,21 @@ // Local includes #include "menudisplay.h" -#include "utils.h" -#include "menuitem.h" -#include "ledstrip.h" -#include "ledstripselectanimationmenu.h" -#include "icons/back.h" #include "texts.h" -#include "actions/dummyaction.h" -#include "actions/ledstripanimationactions.h" -#include "actions/switchscreenaction.h" -#include "ledstrip.h" -#include "ledstripdefines.h" #ifdef FEATURE_LEDSTRIP -class currentSelectedAnimationText : public virtual TextInterface { public: std::string text() const override { - switch (animation_type) { - case LEDSTRIP_ANIMATION_TYPE_DEFAULTRAINBOW: - return TEXT_ANIMATION_DEFAULTRAINBOW; - case LEDSTRIP_ANIMATION_TYPE_BETTERRAINBOW: - return TEXT_ANIMATION_BETTERRAINBOW; - case LEDSTRIP_ANIMATION_TYPE_SPEEDSYNCANIMATION: - return TEXT_ANIMATION_SPEEDSYNCANIMATION; - case LEDSTRIP_ANIMATION_TYPE_CUSTOMCOLOR: - return TEXT_ANIMATION_CUSTOMCOLOR; - default: - return "Animation Unkown"; - } - }; + +class currentSelectedAnimationText : public virtual espgui::TextInterface { +public: + std::string text() const override; }; -using namespace espgui; - -namespace { - class LedstripSelectAnimationMenu : - public MenuDisplay, - public StaticText, - public BackActionInterface> - { - public: - LedstripSelectAnimationMenu() - { - constructMenuItem>(); - constructMenuItem>(); - constructMenuItem, LedStripSetAnimationAction>>(); - constructMenuItem, LedStripSetAnimationAction>>(); - constructMenuItem, LedStripSetAnimationAction>>(); - constructMenuItem, LedStripSetAnimationAction>>(); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); - } - }; -} // Namespace +class LedstripSelectAnimationMenu : + public espgui::MenuDisplay, + public espgui::StaticText +{ +public: + LedstripSelectAnimationMenu(); + void back() override; +}; #endif diff --git a/main/displays/menus/profilesmenu.cpp b/main/displays/menus/profilesmenu.cpp index e69de29..ad99a4c 100644 --- a/main/displays/menus/profilesmenu.cpp +++ b/main/displays/menus/profilesmenu.cpp @@ -0,0 +1,23 @@ +#include "profilesmenu.h" + +// local includes +#include "actions/switchprofileaction.h" +#include "actions/switchscreenaction.h" +#include "displays/menus/mainmenu.h" +#include "icons/back.h" +#include "menudisplay.h" +#include "texts.h" + +ProfilesMenu::ProfilesMenu() +{ + constructMenuItem, SwitchProfileAction<0>>>(); + constructMenuItem, SwitchProfileAction<1>>>(); + constructMenuItem, SwitchProfileAction<2>>>(); + constructMenuItem, SwitchProfileAction<3>>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); +} + +void ProfilesMenu::back() +{ + switchScreen(); +} diff --git a/main/displays/menus/profilesmenu.h b/main/displays/menus/profilesmenu.h index 4e184d9..9956571 100644 --- a/main/displays/menus/profilesmenu.h +++ b/main/displays/menus/profilesmenu.h @@ -2,27 +2,13 @@ // local includes #include "menudisplay.h" -#include "actions/switchprofileaction.h" -#include "actions/switchscreenaction.h" -#include "icons/back.h" #include "texts.h" -using namespace espgui; - -namespace { class ProfilesMenu : - public MenuDisplay, - public StaticText, - public BackActionInterface> + public espgui::MenuDisplay, + public espgui::StaticText { public: - ProfilesMenu() - { - constructMenuItem, SwitchProfileAction<0>>>(); - constructMenuItem, SwitchProfileAction<1>>>(); - constructMenuItem, SwitchProfileAction<2>>>(); - constructMenuItem, SwitchProfileAction<3>>>(); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); - } + ProfilesMenu(); + void back() override; }; -} // namespace From 14d74a5846a327b66d7e6fc99b2b8ce3afb9fe7c Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Tue, 7 Dec 2021 15:54:34 +0100 Subject: [PATCH 3/5] Added namespace --- main/displays/menus/selectbuildservermenu.cpp | 2 +- main/displays/menus/selectotabuildmenu.cpp | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/main/displays/menus/selectbuildservermenu.cpp b/main/displays/menus/selectbuildservermenu.cpp index 5ffa52d..702a4cc 100644 --- a/main/displays/menus/selectbuildservermenu.cpp +++ b/main/displays/menus/selectbuildservermenu.cpp @@ -15,7 +15,7 @@ #ifdef FEATURE_OTA -using namespace buildserver; +using namespace buildserver::SelectBuild; using namespace espgui; namespace { diff --git a/main/displays/menus/selectotabuildmenu.cpp b/main/displays/menus/selectotabuildmenu.cpp index 0db149b..8f05880 100644 --- a/main/displays/menus/selectotabuildmenu.cpp +++ b/main/displays/menus/selectotabuildmenu.cpp @@ -19,7 +19,7 @@ #define MESSAGE(text) constructMenuItem, DefaultFont, StaticColor, DummyAction>>() using namespace espgui; -using namespace buildserver; +using namespace buildserver::SelectBuild; namespace { template @@ -50,7 +50,7 @@ private: SelectBuildMenu::SelectBuildMenu() { - if (count_available_buildserver() < 1) + if (buildserver::count_available_buildserver() < 1) { MESSAGE(TEXT_OTA_NOBUILDSERVERAVAILABLE); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); @@ -115,6 +115,7 @@ void SelectBuildMenu::update() void SelectBuildMenu::buildMenuFromJson() { + ESP_LOGW("BOBBY", "Building menu"); auto &latest = constructMenuItem>(); latest.setHash("latest"); latest.setUrl(url_for_latest); From b831d282d9e1a13401fc6a319431b2ab53cf8a29 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Tue, 7 Dec 2021 15:54:56 +0100 Subject: [PATCH 4/5] Added branch select --- main/CMakeLists.txt | 2 + main/buildserver.cpp | 123 +++++++++++++++-- main/buildserver.h | 22 ++- main/displays/menus/otamenu.cpp | 2 + .../menus/selectbuildserverbranch.cpp | 128 ++++++++++++++++++ main/displays/menus/selectbuildserverbranch.h | 46 +++++++ main/presets.cpp | 1 + main/stringsettings.h | 2 + main/texts.cpp | 4 + main/texts.h | 4 + 10 files changed, 320 insertions(+), 14 deletions(-) create mode 100644 main/displays/menus/selectbuildserverbranch.cpp create mode 100644 main/displays/menus/selectbuildserverbranch.h diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 660176b..4b96d1a 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -100,6 +100,7 @@ set(headers displays/menus/presetsmenu.h displays/menus/profilesmenu.h displays/menus/selectbatterytypemenu.h + displays/menus/selectbuildserverbranch.h displays/menus/selectbuildservermenu.h displays/menus/selectmodemenu.h displays/menus/selectotabuildmenu.h @@ -297,6 +298,7 @@ set(sources displays/menus/presetsmenu.cpp displays/menus/profilesmenu.cpp displays/menus/selectbatterytypemenu.cpp + displays/menus/selectbuildserverbranch.cpp displays/menus/selectbuildservermenu.cpp displays/menus/selectmodemenu.cpp displays/menus/selectotabuildmenu.cpp diff --git a/main/buildserver.cpp b/main/buildserver.cpp index af3ea46..e5d8734 100644 --- a/main/buildserver.cpp +++ b/main/buildserver.cpp @@ -18,7 +18,111 @@ #include "esp_http_client.h" #ifdef FEATURE_OTA + namespace buildserver { + + uint16_t count_available_buildserver() + { + uint16_t count = 0; + for (const auto &otaServer : stringSettings.otaServers) { + if (!otaServer.url.empty()) count++; + } + return count; + } + + namespace SelectBranch { + cpputils::DelayedConstruction request; + bool request_running{false}; + bool constructedMenu{false}; + std::string request_failed{}; + std::vector branches{}; + + void setup_request() + { + if (!request.constructed()) + { + request.construct("ota-descriptor-request", espcpputils::CoreAffinity::Core0); + } + } + + void start_descriptor_request(std::string server_base_url) + { + if (!request.constructed()) + { + ESP_LOGW("BOBBY", "request is im oarsch"); + return; + } + + const auto url = fmt::format("{}/otaDescriptor?username={}&branches", server_base_url, OTA_USERNAME); + ESP_LOGD("BOBBY", "requesting data..."); + if (const auto result = request->start(url); !result) + { + ESP_LOGW("BOBBY", "request start failed"); + return; + } + request_running = true; + constructedMenu = false; + } + + + void check_descriptor_request() + { + if (!request.constructed()) + { + ESP_LOGW("BOBBY", "request is im oarsch"); + request_running = false; + request_failed = "request is im oarsch"; + return; + } + + if (!request->finished()) + { + // ESP_LOGW("BOBBY", "Request has not finished yet."); + return; + } + + const auto helper = cpputils::makeCleanupHelper([](){ request->clearFinished(); }); + const std::string content = std::move(request->takeBuffer()); + + if (const auto result = request->result(); !result) + { + ESP_LOGW("BOBBY", "request failed: %.*s", result.error().size(), result.error().data()); + request_failed = result.error(); + return; + } + + const auto result = request->result(); + ESP_LOGW("BOBBY", "Request finished: %s", content.c_str()); + parse_response(content); + request_running = false; + request_failed = {}; + } + + void parse_response(std::string response) + { + StaticJsonDocument<1024> doc; + + if (const auto error = deserializeJson(doc, response)) + { + ESP_LOGE("BOBBY", "Error parsing server-response => %s (%s)", error.c_str(), response.c_str()); + return; + } + + JsonArray arr = doc.as(); + branches.resize(arr.size()); + + for(JsonVariant v : arr) { + branches.push_back(v); + } + } + + bool get_request_running() + { + return request_running; + } + } // namespace SelectBranch + + namespace SelectBuild { void buildMenuFromJson(std::string json); void buildMenuRequestError(std::string error); @@ -27,7 +131,7 @@ namespace buildserver { std::array availableVersions{}; bool request_running{false}; std::string request_failed{}; - bool parsing_finished{true}; + bool parsing_finished{false}; cpputils::DelayedConstruction request; std::string get_ota_url_from_index(uint16_t index) @@ -52,15 +156,6 @@ namespace buildserver { } } - uint16_t count_available_buildserver() - { - uint16_t count = 0; - for (const auto &otaServer : stringSettings.otaServers) { - if (!otaServer.url.empty()) count++; - } - return count; - } - std::string get_hash_url(std::string hash) { return fmt::format(url_for_hashes, hash); @@ -73,7 +168,10 @@ namespace buildserver { std::string get_descriptor_url(std::string base_url) { - return fmt::format("{}/otaDescriptor?username={}", base_url, OTA_USERNAME); + if (stringSettings.otaServerBranch.empty()) + return fmt::format("{}/otaDescriptor?username={}", base_url, OTA_USERNAME); + else + return fmt::format("{}/otaDescriptor?username={}&branch={}", base_url, OTA_USERNAME, stringSettings.otaServerBranch); } void parse_response_into_variables(std::string response) @@ -172,5 +270,6 @@ namespace buildserver { { return request_running; } -} + } // namespace SelectBuild +} // namespace buildserver #endif diff --git a/main/buildserver.h b/main/buildserver.h index 0ce3d3c..99eb6d8 100644 --- a/main/buildserver.h +++ b/main/buildserver.h @@ -8,6 +8,24 @@ #ifdef FEATURE_OTA namespace buildserver { + +uint16_t count_available_buildserver(); + +namespace SelectBranch { + extern cpputils::DelayedConstruction request; + extern bool request_running; + extern bool constructedMenu; + void setup_request(); + void start_descriptor_request(std::string server_base_url); + void check_descriptor_request(); + void parse_response(std::string response); + bool get_request_running(); + extern std::string request_failed; + extern std::vector branches; +} // namespace SelectBranch + +namespace SelectBuild { + void buildMenuFromJson(std::string json); void buildMenuRequestError(std::string error); @@ -20,7 +38,6 @@ namespace buildserver { extern cpputils::DelayedConstruction request; std::string get_ota_url_from_index(uint16_t index); - uint16_t count_available_buildserver(); std::string get_hash_url(std::string hash); std::string get_latest_url(); std::string get_descriptor_url(std::string base_url); @@ -29,5 +46,6 @@ namespace buildserver { void start_descriptor_request(std::string server_base_url); void check_descriptor_request(); bool get_request_running(); -} +} // namespace SelectBuild +} // namespace buildserver #endif diff --git a/main/displays/menus/otamenu.cpp b/main/displays/menus/otamenu.cpp index 4ccfde0..f28f478 100644 --- a/main/displays/menus/otamenu.cpp +++ b/main/displays/menus/otamenu.cpp @@ -10,6 +10,7 @@ #include "icons/presets.h" #include "icons/update.h" #include "displays/menus/selectotabuildmenu.h" +#include "displays/menus/selectbuildserverbranch.h" #include "displays/menus/selectbuildservermenu.h" #include "displays/menus/mainmenu.h" #include "displays/updatedisplay.h" @@ -21,6 +22,7 @@ using namespace espgui; OtaMenu::OtaMenu() { constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&bobbyicons::presets>>>(); + constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&bobbyicons::update>>>(); constructMenuItem, SwitchScreenAction>>(); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); diff --git a/main/displays/menus/selectbuildserverbranch.cpp b/main/displays/menus/selectbuildserverbranch.cpp new file mode 100644 index 0000000..eaf846c --- /dev/null +++ b/main/displays/menus/selectbuildserverbranch.cpp @@ -0,0 +1,128 @@ +#ifdef FEATURE_OTA +#include "selectbuildserverbranch.h" + +// 3rd party includes +#include + +// local includes +#include "actions/dummyaction.h" +#include "actions/switchscreenaction.h" +#include "buildserver.h" +#include "displays/menus/otamenu.h" +#include "globals.h" +#include "icons/back.h" +#include "icons/reboot.h" +#include "utils.h" + +#define ERR_MESSAGE(text) \ + constructMenuItem, DefaultFont, StaticColor, DummyAction>>(); \ + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); \ + return; + +using namespace espgui; +using namespace buildserver; +using namespace SelectBuildServerBranch; + +namespace SelectBuildServerBranch { +std::string CurrentBranch::text() const +{ + return stringSettings.otaServerBranch.empty() ? "All builds" : stringSettings.otaServerBranch; +} + +std::string BranchMenuItem::text() const +{ + return m_name; +} + +void BranchMenuItem::setName(std::string &&name) +{ + m_name = std::move(name); +} + +void BranchMenuItem::setName(const std::string &name) +{ + m_name = name; +} + +void BranchMenuItem::triggered() +{ + stringSettings.otaServerBranch = m_name; + saveSettings(); +} + +void ClearBranchAction::triggered() +{ + stringSettings.otaServerBranch = {}; + saveSettings(); +} +} + +SelectBuildserverBranchMenu::SelectBuildserverBranchMenu() +{ + using namespace SelectBuildServerBranch; + + if (count_available_buildserver() < 1) + { + ERR_MESSAGE(TEXT_OTA_NOBUILDSERVERAVAILABLE); // E:No server saved. + } + + if (stringSettings.otaServerUrl.empty()) + { + ERR_MESSAGE(TEXT_OTA_NOBUILDSERVERSELECTED); // E:No server selected. + } + + if (const auto staStatus = wifi_stack::get_sta_status(); staStatus != wifi_stack::WiFiStaStatus::CONNECTED) + { + ERR_MESSAGE(TEXT_OTA_NOCONNECTION); // E:No internet. + } + + SelectBranch::setup_request(); + SelectBranch::start_descriptor_request(stringSettings.otaServerUrl); +} + +void SelectBuildserverBranchMenu::update() +{ + using namespace SelectBranch; + if(get_request_running()) + { + check_descriptor_request(); + if (!request_failed.empty()) + { + this->buildMenuRequestError(request_failed); + request_failed = {}; + } + } + + if (!constructedMenu && branches.size() > 0) + { + constructedMenu = true; + constructMenuItem>(); + constructMenuItem>(); + + for (const std::string &branch : branches) + { + if (branch.empty()) + continue; + auto &menuitem = constructMenuItem(); + menuitem.setName(branch); + } + + constructMenuItem>(); + constructMenuItem, ClearBranchAction, StaticMenuItemIcon<&bobbyicons::reboot>>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); + } + Base::update(); +} + +void SelectBuildserverBranchMenu::back() +{ + switchScreen(); +} + +void SelectBuildserverBranchMenu::buildMenuRequestError(std::string error) +{ + auto &item = constructMenuItem, DummyAction>>(); + item.setTitle(error); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); +} +#endif diff --git a/main/displays/menus/selectbuildserverbranch.h b/main/displays/menus/selectbuildserverbranch.h new file mode 100644 index 0000000..d671846 --- /dev/null +++ b/main/displays/menus/selectbuildserverbranch.h @@ -0,0 +1,46 @@ +#pragma once + +// 3rd party includes +#include +#include +#ifdef FEATURE_OTA + +namespace SelectBuildServerBranch { + class CurrentBranch : public virtual espgui::TextInterface + { + public: + std::string text() const override; + }; + + class BranchMenuItem : public espgui::MenuItem + { + public: + std::string text() const override; + void setName(std::string &&name); + void setName(const std::string &name); + + void triggered() override; + private: + std::string m_name; + }; + + class ClearBranchAction : public virtual espgui::ActionInterface + { + public: + void triggered() override; + }; +} + +class SelectBuildserverBranchMenu : + public espgui::MenuDisplay, + public espgui::StaticText +{ + using Base = espgui::MenuDisplay; +public: + SelectBuildserverBranchMenu(); + void buildMenuRequestError(std::string error); + void update() override; + void back() override; +}; + +#endif diff --git a/main/presets.cpp b/main/presets.cpp index 7c3425d..14a16fb 100644 --- a/main/presets.cpp +++ b/main/presets.cpp @@ -51,6 +51,7 @@ StringSettings makeDefaultStringSettings() .otaServerUrl = {}, #endif .ap_password = STRING(AP_PASSWORD), + .otaServerBranch = {} }; } } // namespace presets diff --git a/main/stringsettings.h b/main/stringsettings.h index 2434d51..406bcab 100644 --- a/main/stringsettings.h +++ b/main/stringsettings.h @@ -49,6 +49,7 @@ struct StringSettings std::string dns_key; #endif std::string ap_password; + std::string otaServerBranch; }; template @@ -118,6 +119,7 @@ void StringSettings::executeForEveryCommonSetting(T &&callable) callable("dnskey", dns_key); #endif callable("ap_pw", ap_password); + callable("otaBranch", otaServerBranch); } template diff --git a/main/texts.cpp b/main/texts.cpp index 48b14f5..baed3b2 100644 --- a/main/texts.cpp +++ b/main/texts.cpp @@ -533,4 +533,8 @@ char TEXT_STATSCLEAR[] = "Clear current km"; char TEXT_POWERSUPPLY[] = "Powersupply"; #endif char TEXT_REENABLE_MENUITEMS[] = "Show advanced"; + +//SelectBuildserverBranchMenu +char TEXT_SELECT_BRANCH[] = "Select Branch"; +char TEXT_SELECT_BRANCH_CLEAR[] = "Clear Branch"; } // namespace diff --git a/main/texts.h b/main/texts.h index d260a23..b3b9a74 100644 --- a/main/texts.h +++ b/main/texts.h @@ -532,6 +532,10 @@ extern char TEXT_STATSCLEAR[]; extern char TEXT_POWERSUPPLY[]; #endif extern char TEXT_REENABLE_MENUITEMS[]; + +//SelectBuildserverBranchMenu +extern char TEXT_SELECT_BRANCH[]; +extern char TEXT_SELECT_BRANCH_CLEAR[]; } // namespace using namespace bobbytexts; From 36265be5959d42791d5e5a726ba5d7c7ce7249fd Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Tue, 7 Dec 2021 16:02:53 +0100 Subject: [PATCH 5/5] Removed debug print --- main/displays/menus/selectotabuildmenu.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/main/displays/menus/selectotabuildmenu.cpp b/main/displays/menus/selectotabuildmenu.cpp index 8f05880..00de071 100644 --- a/main/displays/menus/selectotabuildmenu.cpp +++ b/main/displays/menus/selectotabuildmenu.cpp @@ -115,7 +115,6 @@ void SelectBuildMenu::update() void SelectBuildMenu::buildMenuFromJson() { - ESP_LOGW("BOBBY", "Building menu"); auto &latest = constructMenuItem>(); latest.setHash("latest"); latest.setUrl(url_for_latest);