diff --git a/WiFiManager.cpp b/WiFiManager.cpp
index 7b9ddb4..c4286bc 100644
--- a/WiFiManager.cpp
+++ b/WiFiManager.cpp
@@ -581,27 +581,36 @@ String WiFiManager::getScanItemOut(){
}
}
+ // token precheck, to speed up replacements on large ap lists
+ String HTTP_ITEM_STR = FPSTR(HTTP_ITEM);
+ bool tok_r = HTTP_ITEM_STR.indexOf("{r}") > 0;
+ bool tok_R = HTTP_ITEM_STR.indexOf("{R}") > 0;
+ bool tok_e = HTTP_ITEM_STR.indexOf("{e}") > 0;
+ bool tok_q = HTTP_ITEM_STR.indexOf("{q}") > 0;
+ bool tok_i = HTTP_ITEM_STR.indexOf("{i}") > 0;
+
//display networks in page
for (int i = 0; i < n; i++) {
if (indices[i] == -1) continue; // skip dups
- DEBUG_WM(WiFi.SSID(indices[i]));
- DEBUG_WM(WiFi.RSSI(indices[i]));
- int quality = getRSSIasQuality(WiFi.RSSI(indices[i]));
+
+ DEBUG_WM("AP: " + (String)WiFi.RSSI(indices[i]) + " " + (String)WiFi.SSID(indices[i]));
+
+ int rssiperc = getRSSIasQuality(WiFi.RSSI(indices[i]));
uint8_t enc_type = WiFi.encryptionType(indices[i]);
- if (_minimumQuality == -1 || _minimumQuality < quality) {
+ if (_minimumQuality == -1 || _minimumQuality < rssiperc) {
String item = FPSTR(HTTP_ITEM);
- String rssiQ;
- rssiQ += quality;
item.replace("{v}", WiFi.SSID(indices[i])); // ssid no encoding
- item.replace("{R}", (String)WiFi.RSSI(indices[i])); // rssi
- item.replace("{e}", encryptionTypeStr(enc_type));
- item.replace("{r}", rssiQ); // qualitypercent
- item.replace("{q}", (String)round(map(quality,0,100,1,4))); //quality icon 1-4
- if (enc_type != ENC_TYPE_NONE) {
- item.replace("{i}", "l");
- } else {
- item.replace("{i}", "");
+ if(tok_e) item.replace("{e}", encryptionTypeStr(enc_type));
+ if(tok_r) item.replace("{r}", (String)rssiperc); // rssi percentage 0-100
+ if(tok_R) item.replace("{R}", (String)WiFi.RSSI(indices[i])); // rssi db
+ if(tok_q) item.replace("{q}", (String)round(map(rssiperc,0,100,1,4))); //quality icon 1-4
+ if(tok_i){
+ if (enc_type != ENC_TYPE_NONE) {
+ item.replace("{i}", "l");
+ } else {
+ item.replace("{i}", "");
+ }
}
//DEBUG_WM(item);
page += item;
@@ -613,6 +622,7 @@ String WiFiManager::getScanItemOut(){
}
page += "
";
}
+
return page;
}
@@ -673,6 +683,16 @@ String WiFiManager::getParamOut(){
if(_paramsCount > 0){
+ String HTTP_PARAM_temp = FPSTR(HTTP_FORM_LABEL);
+ HTTP_PARAM_temp += FPSTR(HTTP_FORM_PARAM);
+ bool tok_i = HTTP_PARAM_temp.indexOf("{i}") > 0;
+ bool tok_n = HTTP_PARAM_temp.indexOf("{n}") > 0;
+ bool tok_p = HTTP_PARAM_temp.indexOf("{p}") > 0;
+ bool tok_t = HTTP_PARAM_temp.indexOf("{t}") > 0;
+ bool tok_l = HTTP_PARAM_temp.indexOf("{l}") > 0;
+ bool tok_v = HTTP_PARAM_temp.indexOf("{v}") > 0;
+ bool tok_c = HTTP_PARAM_temp.indexOf("{c}") > 0;
+
page += FPSTR(HTTP_FORM_PARAM_START);
char parLength[5];
@@ -698,14 +718,14 @@ String WiFiManager::getParamOut(){
break;
}
if (_params[i]->getID() != NULL) {
- pitem.replace("{i}", _params[i]->getID());
- pitem.replace("{n}", _params[i]->getID());
- pitem.replace("{p}", "{t}");
- pitem.replace("{t}", _params[i]->getPlaceholder());
+ if(tok_i)pitem.replace("{i}", _params[i]->getID());
+ if(tok_n)pitem.replace("{n}", _params[i]->getID());
+ if(tok_p)pitem.replace("{p}", "{t}");
+ if(tok_t)pitem.replace("{t}", _params[i]->getPlaceholder());
snprintf(parLength, 5, "%d", _params[i]->getValueLength());
- pitem.replace("{l}", parLength);
- pitem.replace("{v}", _params[i]->getValue());
- pitem.replace("{c}", _params[i]->getCustomHTML()); // additional attributes not html
+ if(tok_l)pitem.replace("{l}", parLength);
+ if(tok_v)pitem.replace("{v}", _params[i]->getValue());
+ if(tok_c)pitem.replace("{c}", _params[i]->getCustomHTML()); // meant for additional attributes, not html
} else {
pitem = _params[i]->getCustomHTML();
}
@@ -716,6 +736,7 @@ String WiFiManager::getParamOut(){
page += FPSTR(HTTP_FORM_PARAM_END);
}
}
+
return page;
}
diff --git a/WiFiManager.h b/WiFiManager.h
index 0be462f..95ce014 100644
--- a/WiFiManager.h
+++ b/WiFiManager.h
@@ -45,11 +45,12 @@ const char HTTP_STYLE[] PROGMEM = "