From 6ba8b897db64a631dcc5e9a4eced90b8924afa3e Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Thu, 21 Oct 2021 00:43:56 +0200 Subject: [PATCH] Dont make request every time menu is visited --- main/buildserver.h | 11 ++++++++++- main/displays/menus/otamenu.h | 10 ++++++++++ main/texts.h | 1 + 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/main/buildserver.h b/main/buildserver.h index c074aa1..5f1f8ca 100644 --- a/main/buildserver.h +++ b/main/buildserver.h @@ -25,6 +25,7 @@ namespace { bool request_running = false; uint16_t request_failed = false; bool parsing_finished = false; + static bool redownload = true; cpputils::DelayedConstruction request; std::string get_ota_url_from_index(uint16_t index) @@ -95,9 +96,9 @@ namespace { } JsonObject availableVersionsObject = doc["availableVersions"]; + static auto index = 0; for (JsonPair kv : availableVersionsObject) { - static auto index = 0; auto hash = kv.key().c_str(); if (index > availableVersions.size()) { @@ -107,9 +108,12 @@ namespace { index++; } + index = 0; + url_for_latest = fix_url(fmt::format("{}{}", stringSettings.otaServerUrl, doc["latest"].as())); url_for_hashes = fix_url(fmt::format("{}{}", stringSettings.otaServerUrl, doc["url"].as())); parsing_finished = true; + redownload = false; } void setup_request() @@ -120,6 +124,11 @@ namespace { void start_descriptor_request(std::string server_base_url) { + if (!redownload) + { + parsing_finished = true; + return; + } if (!request.constructed()) { ESP_LOGW("BOBBY", "request is im oarsch"); diff --git a/main/displays/menus/otamenu.h b/main/displays/menus/otamenu.h index 85d3a19..e808595 100644 --- a/main/displays/menus/otamenu.h +++ b/main/displays/menus/otamenu.h @@ -2,12 +2,14 @@ // local includes #include "menudisplay.h" +#include "actioninterface.h" #include "utils.h" #include "actions/dummyaction.h" #include "icons/back.h" #include "icons/update.h" #include "icons/presets.h" #include "texts.h" +#include "buildserver.h" // forward declares @@ -22,6 +24,13 @@ using namespace espgui; namespace { +class RedownloadJsonAction : public virtual ActionInterface { +public: + void triggered() override { + redownload = true; + } +}; + class OtaMenu : public MenuDisplay, public StaticText, @@ -33,6 +42,7 @@ public: constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&bobbyicons::presets>>>(); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&bobbyicons::update>>>(); constructMenuItem, SwitchScreenAction>>(); + constructMenuItem, RedownloadJsonAction>>(); constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); } }; diff --git a/main/texts.h b/main/texts.h index 3d85cb8..1a5ffa3 100644 --- a/main/texts.h +++ b/main/texts.h @@ -482,6 +482,7 @@ constexpr char TEXT_OTA_NOBUILDSERVERAVAILABLE[] = "E:No server saved."; constexpr char TEXT_OTA_NOBUILDSERVERSELECTED[] = "E:No server selected."; constexpr char TEXT_OTA_NOCONNECTION[] = "E:No internet."; constexpr char TEXT_OTA_WAITFORRESPONSE[] = "Wait for response..."; +constexpr char TEXT_REDOWNLOAD[] = "Reload list"; #ifdef FEATURE_CAN constexpr char TEXT_POWERSUPPLY[] = "Powersupply";