@@ -505,45 +505,37 @@ static const char* my_label_get_text(const lv_obj_t* label)
505505
506506static 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