From ff9a7f615020b4bbd7324b00b053a7b4645905ff Mon Sep 17 00:00:00 2001 From: TD-er Date: Sun, 18 Oct 2026 00:53:03 +0200 Subject: [PATCH] [Build] Reduce build size by using static functions (src/WebServer) 2nd --- .../SecurityStruct_deviceSpecific_webform.cpp | 4 +- src/src/WebServer/SettingsArchive.cpp | 144 +-- src/src/WebServer/SettingsArchive.h | 29 +- src/src/WebServer/SetupPage.cpp | 365 +++---- src/src/WebServer/SetupPage.h | 15 +- src/src/WebServer/SysInfoPage.cpp | 910 +++++++++--------- src/src/WebServer/SysInfoPage.h | 32 +- src/src/WebServer/SysVarPage.cpp | 96 +- src/src/WebServer/SysVarPage.h | 5 - src/src/WebServer/TimingStats.cpp | 94 +- src/src/WebServer/TimingStats.h | 9 - src/src/WebServer/ToolsPage.cpp | 97 +- src/src/WebServer/ToolsPage.h | 18 +- src/src/WebServer/UploadPage.cpp | 37 +- src/src/WebServer/UploadPage.h | 8 +- src/src/WebServer/WebTemplateParser.cpp | 6 +- src/src/WebServer/WebTemplateParser.h | 1 - 17 files changed, 906 insertions(+), 964 deletions(-) diff --git a/src/src/WebServer/SecurityStruct_deviceSpecific_webform.cpp b/src/src/WebServer/SecurityStruct_deviceSpecific_webform.cpp index ab74b53b2..f450e53f0 100644 --- a/src/src/WebServer/SecurityStruct_deviceSpecific_webform.cpp +++ b/src/src/WebServer/SecurityStruct_deviceSpecific_webform.cpp @@ -6,7 +6,7 @@ # include "../Helpers/StringConverter.h" # include "../WebServer/Markup_Forms.h" -String DevSpecific_Security_getLabelString(SecurityStruct_deviceSpecific::KeyType keytype, +static String DevSpecific_Security_getLabelString(SecurityStruct_deviceSpecific::KeyType keytype, uint16_t index, bool displayString, KVS_StorageType::Enum & storageType, @@ -35,7 +35,7 @@ String DevSpecific_Security_getLabelString(SecurityStruct_deviceSpecific::KeyTyp return res; } -WebFormItemParams make_DevSpecific_Security_WebFormItemParams( +static WebFormItemParams make_DevSpecific_Security_WebFormItemParams( SecurityStruct_deviceSpecific::KeyType keytype, uint16_t index, bool suppressIndex_displayString) diff --git a/src/src/WebServer/SettingsArchive.cpp b/src/src/WebServer/SettingsArchive.cpp index c37214384..e49a9199e 100644 --- a/src/src/WebServer/SettingsArchive.cpp +++ b/src/src/WebServer/SettingsArchive.cpp @@ -15,6 +15,79 @@ # include "../Helpers/Misc.h" # include "../Helpers/StringConverter.h" +// ******************************************************************************** +// download filetype selectors +// ******************************************************************************** +static void addDownloadFiletypeCheckbox(FileType::Enum filetype, unsigned int filenr) { + const String fileName = getFileName(filetype, filenr); + + addRowLabel(fileName); + addCheckBox(fileName, getDownloadFiletypeChecked(filetype, filenr)); +} + +static void storeDownloadFiletypeCheckbox(FileType::Enum filetype, unsigned int filenr) { + const bool isChecked = isFormItemChecked(getFileName(filetype, filenr)); + + switch (filetype) + { + case FileType::CONFIG_DAT: ResetFactoryDefaultPreference.fetchConfigDat(isChecked); + break; + case FileType::SECURITY_DAT: ResetFactoryDefaultPreference.fetchSecurityDat(isChecked); + break; + case FileType::NOTIFICATION_DAT: ResetFactoryDefaultPreference.fetchNotificationDat(isChecked); + break; + case FileType::RULES_TXT: + { ResetFactoryDefaultPreference.fetchRulesTXT(filenr, isChecked); + break; + } + case FileType::PROVISIONING_DAT: + { ResetFactoryDefaultPreference.fetchProvisioningDat(isChecked); + break; + } +# if FEATURE_STORE_CREDENTIALS_SEPARATE_FILE + case FileType::DEV_SECURITY_DAT: + { ResetFactoryDefaultPreference.fetchDeviceSecurityDat(isChecked); + break; + } +# endif // if FEATURE_STORE_CREDENTIALS_SEPARATE_FILE + + case FileType::MAX_FILETYPE: + break; + } +} + +# if FEATURE_CUSTOM_PROVISIONING + +static void addAllowFiletypeCheckbox(const ProvisioningStruct& ProvisioningSettings, FileType::Enum filetype, unsigned int filenr) +{ + const String fileName = getFileName(filetype, filenr); + + addRowLabel(fileName); + addCheckBox(concat(F("allow_"), fileName), ProvisioningSettings.fetchFileTypeAllowed(filetype, filenr)); +} + +static void storeAllowFiletypeCheckbox(ProvisioningStruct& ProvisioningSettings, FileType::Enum filetype, unsigned int filenr) +{ + const bool isChecked = isFormItemChecked(concat(F("allow_"), getFileName(filetype, filenr))); + + ProvisioningSettings.setFetchFileTypeAllowed(filetype, filenr, isChecked); +} + +# endif // if FEATURE_CUSTOM_PROVISIONING + +static bool tryDownloadFileType(const String& url, const String& user, const String& pass, FileType::Enum filetype, unsigned int filenr) { + const String filename = getFileName(filetype, filenr); + + addRowLabel(filename); + const String error = downloadFileType(url, user, pass, filetype, filenr); + + if (error.length() == 0) { + addHtml(F("Success")); + return true; + } + addHtml(error); + return false; +} // ******************************************************************************** // Web Interface to manage archived settings @@ -41,7 +114,7 @@ void handle_settingsarchive() { storeDownloadFiletypeCheckbox(FileType::RULES_TXT, i); } } else { - storeDownloadFiletypeCheckbox(ft); + storeDownloadFiletypeCheckbox(ft, 0); } } @@ -62,6 +135,7 @@ void handle_settingsarchive() { ProvisioningSettings->ResetFactoryDefaultPreference = ResetFactoryDefaultPreference.getPreference(); ProvisioningSettings->allowedFlags.allowFetchFirmware = isFormItemChecked(F("firmware")); + for (int i = 0; i < FileType::MAX_FILETYPE; ++i) { const FileType::Enum ft = static_cast(i); @@ -70,7 +144,7 @@ void handle_settingsarchive() { storeAllowFiletypeCheckbox(*ProvisioningSettings, FileType::RULES_TXT, i); } } else { - storeAllowFiletypeCheckbox(*ProvisioningSettings, ft); + storeAllowFiletypeCheckbox(*ProvisioningSettings, ft, 0); } } @@ -109,7 +183,7 @@ void handle_settingsarchive() { if (ft != FileType::RULES_TXT) { if (getDownloadFiletypeChecked(ft, 0)) { - if (tryDownloadFileType(url, user, pass, ft)) { + if (tryDownloadFileType(url, user, pass, ft, 0)) { somethingDownloaded = true; } } @@ -174,6 +248,7 @@ void handle_settingsarchive() { addFormTextBox(F("User"), F("user"), user, 64); addFormPasswordBox(F("Pass"), F("pass"), pass, 64); # if FEATURE_CUSTOM_PROVISIONING + if (ProvisioningSettings.get()) { addFormCheckBox(F("Store Credentials"), F("savecred"), ResetFactoryDefaultPreference.storeCredentials()); @@ -184,7 +259,7 @@ void handle_settingsarchive() { const FileType::Enum ft = static_cast(i); if (ft != FileType::RULES_TXT) { - addAllowFiletypeCheckbox(*ProvisioningSettings, ft); + addAllowFiletypeCheckbox(*ProvisioningSettings, ft, 0); } } @@ -212,7 +287,7 @@ void handle_settingsarchive() { const FileType::Enum ft = static_cast(i); if (ft != FileType::RULES_TXT) { - addDownloadFiletypeCheckbox(ft); + addDownloadFiletypeCheckbox(ft, 0); } } @@ -235,63 +310,4 @@ void handle_settingsarchive() { sendTail_stdtemplate(); } -// ******************************************************************************** -// download filetype selectors -// ******************************************************************************** -void addDownloadFiletypeCheckbox(FileType::Enum filetype, unsigned int filenr) { - const String fileName = getFileName(filetype, filenr); - addRowLabel(fileName); - addCheckBox(fileName, getDownloadFiletypeChecked(filetype, filenr)); -} - -void storeDownloadFiletypeCheckbox(FileType::Enum filetype, unsigned int filenr) { - const bool isChecked = isFormItemChecked(getFileName(filetype, filenr)); - - switch (filetype) { - case FileType::CONFIG_DAT: ResetFactoryDefaultPreference.fetchConfigDat(isChecked); break; - case FileType::SECURITY_DAT: ResetFactoryDefaultPreference.fetchSecurityDat(isChecked); break; - case FileType::NOTIFICATION_DAT: ResetFactoryDefaultPreference.fetchNotificationDat(isChecked); break; - case FileType::RULES_TXT: { ResetFactoryDefaultPreference.fetchRulesTXT(filenr, isChecked); break; } - case FileType::PROVISIONING_DAT: { ResetFactoryDefaultPreference.fetchProvisioningDat(isChecked); break; } -#if FEATURE_STORE_CREDENTIALS_SEPARATE_FILE - case FileType::DEV_SECURITY_DAT: { ResetFactoryDefaultPreference.fetchDeviceSecurityDat(isChecked); break; } -#endif - - case FileType::MAX_FILETYPE: - break; - } -} - -# if FEATURE_CUSTOM_PROVISIONING -void addAllowFiletypeCheckbox(const ProvisioningStruct& ProvisioningSettings, FileType::Enum filetype, unsigned int filenr) -{ - const String fileName = getFileName(filetype, filenr); - addRowLabel(fileName); - addCheckBox(concat(F("allow_"), fileName), ProvisioningSettings.fetchFileTypeAllowed(filetype, filenr)); -} - -void storeAllowFiletypeCheckbox(ProvisioningStruct& ProvisioningSettings, FileType::Enum filetype, unsigned int filenr) -{ - const bool isChecked = isFormItemChecked(concat(F("allow_"), getFileName(filetype, filenr))); - - ProvisioningSettings.setFetchFileTypeAllowed(filetype, filenr, isChecked); -} - -# endif // if FEATURE_CUSTOM_PROVISIONING - - -bool tryDownloadFileType(const String& url, const String& user, const String& pass, FileType::Enum filetype, unsigned int filenr) { - const String filename = getFileName(filetype, filenr); - - addRowLabel(filename); - const String error = downloadFileType(url, user, pass, filetype, filenr); - - if (error.length() == 0) { - addHtml(F("Success")); - return true; - } - addHtml(error); - return false; -} - #endif // if FEATURE_SETTINGS_ARCHIVE diff --git a/src/src/WebServer/SettingsArchive.h b/src/src/WebServer/SettingsArchive.h index 2fb5d922e..bb0a1b9ff 100644 --- a/src/src/WebServer/SettingsArchive.h +++ b/src/src/WebServer/SettingsArchive.h @@ -1,16 +1,14 @@ -#ifndef WEBSERVER_WEBSERVER_SETTINGSARCHIVE_H -#define WEBSERVER_WEBSERVER_SETTINGSARCHIVE_H +#pragma once #include "../WebServer/common.h" #if FEATURE_SETTINGS_ARCHIVE -#include "../DataTypes/ESPEasyFileType.h" - -#if FEATURE_CUSTOM_PROVISIONING -#include "../DataStructs/ProvisioningStruct.h" -#endif +# include "../DataTypes/ESPEasyFileType.h" +# if FEATURE_CUSTOM_PROVISIONING +# include "../DataStructs/ProvisioningStruct.h" +# endif // ******************************************************************************** @@ -18,21 +16,4 @@ // ******************************************************************************** void handle_settingsarchive(); -// ******************************************************************************** -// download filetype selectors -// ******************************************************************************** -void addDownloadFiletypeCheckbox(FileType::Enum filetype, unsigned int filenr = 0); - -void storeDownloadFiletypeCheckbox(FileType::Enum filetype, unsigned int filenr = 0); - -# if FEATURE_CUSTOM_PROVISIONING -void addAllowFiletypeCheckbox(const ProvisioningStruct& ProvisioningSettings, FileType::Enum filetype, unsigned int filenr = 0); - -void storeAllowFiletypeCheckbox(ProvisioningStruct& ProvisioningSettings, FileType::Enum filetype, unsigned int filenr = 0); -# endif - -bool tryDownloadFileType(const String& url, const String& user, const String& pass, FileType::Enum filetype, unsigned int filenr = 0); - #endif // if FEATURE_SETTINGS_ARCHIVE - -#endif \ No newline at end of file diff --git a/src/src/WebServer/SetupPage.cpp b/src/src/WebServer/SetupPage.cpp index a4a1b1bbb..5491aeb9d 100644 --- a/src/src/WebServer/SetupPage.cpp +++ b/src/src/WebServer/SetupPage.cpp @@ -31,6 +31,190 @@ # endif + +static void handle_setup_scan_and_show(const String& ssid, const String& other, const String& password) { + int8_t scanCompleteStatus = ESPEasy::net::wifi::WiFi_AP_Candidates.scanComplete(); + const bool needsRescan = + (scanCompleteStatus == 0 || // No AP found + scanCompleteStatus == -2) // Scan not triggered + && ESPEasy::net::wifi::WiFiScanAllowed(); + + if (needsRescan) { + WiFiMode_t cur_wifimode = WiFi.getMode(); + ESPEasy::net::wifi::WifiScan(false); + scanCompleteStatus = ESPEasy::net::wifi::WiFi_AP_Candidates.scanComplete(); + ESPEasy::net::wifi::setWifiMode(cur_wifimode); + } + + + if (scanCompleteStatus <= 0) { + addHtml(F("No Access Points found")); + } + else + { + html_table_class_multirow(); + html_TR(); + html_table_header(F("Pick"), 50); + html_table_header(F("Network info")); + html_table_header(F("RSSI"), 50); + + for (auto it = ESPEasy::net::wifi::WiFi_AP_Candidates.scanned_begin(); it != ESPEasy::net::wifi::WiFi_AP_Candidates.scanned_end(); ++it) + { + html_TR_TD(); + const String id = it->toString(""); + addHtml(F("")); + + html_TD(); + addHtml(F("")); + + html_TD(); + addHtml(F("")); + } + html_end_table(); + } + + html_BR(); + + addSubmitButton(F("Rescan"), F("performrescan")); + + html_BR(); + + html_table_class_normal(); + html_TR_TD(); + + addHtml(F("")); + + html_TD(); + + addHtml(F("")); + + + html_TR(); + + html_BR(); + html_BR(); + + addFormSeparator(2); + + html_BR(); + + addFormPasswordBox(F("Password"), F("pass"), password, 63); + addFormCheckBox(F("Allow Empty Password"), F("emptypass"), false); + + /* + if (SecuritySettings.hasWiFiCredentials(SecurityStruct::WiFiCredentialsSlot::first)) { + addFormCheckBox(F("Clear Stored SSID1"), F("clearssid1"), false); + addFormNote(String(F("Current: ")) + getValue(LabelType::WIFI_STORED_SSID1)); + } + if (SecuritySettings.hasWiFiCredentials(SecurityStruct::WiFiCredentialsSlot::second)) { + addFormCheckBox(F("Clear Stored SSID2"), F("clearssid2"), false); + addFormNote(String(F("Current: ")) + getValue(LabelType::WIFI_STORED_SSID2)); + } + */ + + html_TR_TD(); + html_TD(); + html_BR(); + addSubmitButton(F("Connect"), EMPTY_STRING); + + html_end_table(); +} + +static bool handle_setup_connectingStage(uint8_t refreshCount) { + if (refreshCount > 0) + { + // safe_strncpy(SecuritySettings.WifiSSID, "ssid", sizeof(SecuritySettings.WifiSSID)); + // SecuritySettings.WifiKey[0] = 0; + addButton(F("/setup"), F("Back to Setup")); + html_TR_TD(); + html_BR(); + + // WiFiEventData.wifiSetupConnect = false; + return false; + } + int wait = WIFI_RECONNECT_WAIT / 1000; + + if (refreshCount != 0) { + wait = 3; + } + addHtml(F("Please wait for

20..

" + "