Skip to content

Commit 860a53b

Browse files
authored
Merge pull request #949 from oradke/improve-variables
Refactor: improve variable usage in hasp_attribute_helper.h
2 parents 6f6ab1b + f145a34 commit 860a53b

1 file changed

Lines changed: 25 additions & 33 deletions

File tree

src/hasp/hasp_attribute_helper.h

Lines changed: 25 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -505,45 +505,37 @@ static const char* my_label_get_text(const lv_obj_t* label)
505505

506506
static void my_label_set_text(lv_obj_t* label, const char* text)
507507
{
508-
if(text[0] == '%') {
509-
uint16_t hash = Parser::get_sdbm(text);
510-
size_t len = strlen(text);
511-
const char* static_text = NULL;
508+
if(!text || !label) return;
512509

513-
switch(hash) {
514-
case ATTR_TEXT_MAC:
515-
if(len == 5) static_text = haspDevice.get_hardware_id();
516-
break;
510+
std::string result(text);
517511

518-
#if HASP_USE_WIFI > 0
519-
case ATTR_TEXT_SSID:
520-
if(len == 6) static_text = wifi_get_ssid();
521-
break;
522-
523-
case ATTR_TEXT_IP:
524-
if(len == 4) static_text = wifi_get_ip_address();
525-
break;
526-
#endif
527-
case ATTR_TEXT_HOSTNAME:
528-
if(len == 10) static_text = haspDevice.get_hostname();
529-
break;
512+
// Helper to replace tags only if not preceded by '\'
513+
auto safe_replace = [](std::string& str, const std::string& tag, const char* replacement) {
514+
size_t pos = 0;
515+
while((pos = str.find(tag, pos)) != std::string::npos) {
516+
if(pos == 0 || str[pos - 1] != '\\') {
517+
str.replace(pos, tag.length(), replacement);
518+
pos += strlen(replacement);
519+
} else {
520+
// Remove the escape character '\'
521+
str.erase(pos - 1, 1);
522+
pos += tag.length() - 1;
523+
}
524+
}
525+
};
530526

531-
case ATTR_TEXT_MODEL:
532-
if(len == 7) static_text = haspDevice.get_model();
533-
break;
527+
safe_replace(result, "%mac%", haspDevice.get_hardware_id());
534528

535-
case ATTR_TEXT_VERSION:
536-
if(len == 9) static_text = haspDevice.get_version();
537-
break;
538-
}
529+
#if HASP_USE_WIFI > 0
530+
safe_replace(result, "%ssid%", wifi_get_ssid());
531+
safe_replace(result, "%ip%", wifi_get_ip_address());
532+
#endif
539533

540-
if(static_text) {
541-
lv_label_set_text_static(label, static_text);
542-
return;
543-
}
544-
}
534+
safe_replace(result, "%hostname%", haspDevice.get_hostname());
535+
safe_replace(result, "%model%", haspDevice.get_model());
536+
safe_replace(result, "%version%", haspDevice.get_version());
545537

546-
lv_label_set_text(label, text);
538+
lv_label_set_text(label, result.c_str());
547539
}
548540

549541
/**

0 commit comments

Comments
 (0)