diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index 7e46c7cc0b..c2f8cbb748 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -505,7 +505,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_PATH, - "Full path of core" + "Full Path" ) MSG_HASH( MENU_ENUM_LABEL_VALUE_CORE_INFO_SAVESTATE_SUPPORT_LEVEL, @@ -537,7 +537,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_LABEL_VALUE_CORE_INFO_FIRMWARE_PATH, - "- Looking in: '%s'" + "- Looking in: %s" ) MSG_HASH( MENU_ENUM_LABEL_VALUE_MISSING_REQUIRED, diff --git a/menu/drivers/materialui.c b/menu/drivers/materialui.c index f8c5e8dee3..2e2598edb0 100644 --- a/menu/drivers/materialui.c +++ b/menu/drivers/materialui.c @@ -10527,6 +10527,18 @@ static void materialui_list_insert( } /* for other types we don't have an icon */ break; + case MENU_SETTINGS_CORE_INFO_NONE: + node->icon_type = MUI_ICON_TYPE_INTERNAL; + if (strstr(path, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_MISSING_REQUIRED))) + node->icon_texture_index = MUI_TEXTURE_CLOSE; + else if (strstr(path, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_MISSING_OPTIONAL))) + node->icon_texture_index = MUI_TEXTURE_INFO; + else if (strstr(path, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_PRESENT_REQUIRED)) + || strstr(path, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_PRESENT_OPTIONAL))) + node->icon_texture_index = MUI_TEXTURE_CHECKMARK; + else + node->icon_type = MUI_ICON_TYPE_NONE; + break; case FILE_TYPE_RPL_ENTRY: case MENU_SETTING_DROPDOWN_ITEM: case MENU_SETTING_DROPDOWN_ITEM_RESOLUTION: @@ -10552,7 +10564,6 @@ static void materialui_list_insert( case MENU_SETTING_DROPDOWN_SETTING_FLOAT_ITEM_SPECIAL: case MENU_SETTING_DROPDOWN_SETTING_INT_ITEM_SPECIAL: case MENU_SETTING_DROPDOWN_SETTING_UINT_ITEM_SPECIAL: - case MENU_SETTINGS_CORE_INFO_NONE: case MENU_SETTING_ITEM_CORE_RESTORE_BACKUP: case MENU_SETTING_ITEM_CORE_DELETE_BACKUP: /* None of these entries have icons - catch them diff --git a/menu/drivers/ozone.c b/menu/drivers/ozone.c index 7d3c3848f7..aae0765727 100644 --- a/menu/drivers/ozone.c +++ b/menu/drivers/ozone.c @@ -1946,6 +1946,15 @@ static uintptr_t ozone_entries_icon_get_texture( if (!string_is_equal(enum_path, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_INFORMATION))) return 0; return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_CORE]; + case MENU_ENUM_LABEL_CORE_INFO_ENTRY: + if (strstr(enum_path, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_MISSING_REQUIRED))) + return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_CLOSE]; + else if (strstr(enum_path, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_MISSING_OPTIONAL))) + return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_INFO]; + else if (strstr(enum_path, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_PRESENT_REQUIRED)) + || strstr(enum_path, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_PRESENT_OPTIONAL))) + return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_CHECKMARK]; + return 0; case MENU_ENUM_LABEL_LOAD_CONTENT_LIST: case MENU_ENUM_LABEL_SUBSYSTEM_SETTINGS: case MENU_ENUM_LABEL_SCAN_FILE: diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index 78336f7f69..a6f4f63ce4 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -3214,6 +3214,15 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb, case MENU_ENUM_LABEL_QUICK_MENU_SHOW_SET_CORE_ASSOCIATION: case MENU_ENUM_LABEL_CORE_INFORMATION: return xmb->textures.list[XMB_TEXTURE_CORE]; + case MENU_ENUM_LABEL_CORE_INFO_ENTRY: + if (strstr(enum_path, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_MISSING_REQUIRED))) + return xmb->textures.list[XMB_TEXTURE_CLOSE]; + else if (strstr(enum_path, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_MISSING_OPTIONAL))) + return xmb->textures.list[XMB_TEXTURE_INFO]; + else if (strstr(enum_path, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_PRESENT_REQUIRED)) + || strstr(enum_path, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_PRESENT_OPTIONAL))) + return xmb->textures.list[XMB_TEXTURE_CHECKMARK]; + break; case MENU_ENUM_LABEL_LOAD_CONTENT_LIST: case MENU_ENUM_LABEL_SUBSYSTEM_SETTINGS: case MENU_ENUM_LABEL_SCAN_FILE: diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index e991ab3559..352c60d431 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -544,6 +544,7 @@ static int menu_displaylist_parse_core_info( const char *savestate_support = NULL; runloop_state_t *runloop_st = runloop_state_get_ptr(); bool kiosk_mode_enable = settings->bools.kiosk_mode_enable; + bool core_info_list_hide[64] = {false}; #if defined(HAVE_DYNAMIC) enum menu_contentless_cores_display_type contentless_display_type = (enum menu_contentless_cores_display_type) @@ -845,36 +846,53 @@ static int menu_displaylist_parse_core_info( MENU_ENUM_LABEL_CORE_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0, NULL)) count++; - len = strlcpy(tmp, "(!) ", sizeof(tmp)); - - /* FIXME: This looks hacky and probably - * needs to be improved for good translation support. */ - for (i = 0; i < core_info->firmware_count; i++) { if (!core_info->firmware[i].desc) continue; - snprintf(tmp + len, sizeof(tmp) - len, "%s %s", - core_info->firmware[i].missing ? - ( - core_info->firmware[i].optional - ? missing_optional - : missing_required) - : - ( - core_info->firmware[i].optional - ? present_optional - : present_required), - core_info->firmware[i].desc ? - core_info->firmware[i].desc : - rdb_entry_name - ); + snprintf(tmp, sizeof(tmp), "%s %s", + core_info->firmware[i].missing + ? (core_info->firmware[i].optional ? missing_optional : missing_required) + : (core_info->firmware[i].optional ? present_optional : present_required), + core_info->firmware[i].desc ? core_info->firmware[i].desc : rdb_entry_name + ); if (menu_entries_append(list, tmp, "", MENU_ENUM_LABEL_CORE_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0, NULL)) count++; + + /* Show relevant note row and skip showing it later */ + if (core_info->notes) + { + unsigned pos; + unsigned j; + char firmware_basename[64]; + + strlcpy(firmware_basename, core_info->firmware[i].desc, sizeof(firmware_basename)); + path_basename(firmware_basename); + firmware_basename[string_find_index_substring_string(firmware_basename, " ")] = '\0'; + + for (j = 0; j < core_info->note_list->size; j++) + { + if ( !strstr(core_info->note_list->elems[j].data, firmware_basename) + || !strstr(core_info->note_list->elems[j].data, "(md5)")) + continue; + + pos = string_find_index_substring_string(core_info->note_list->elems[j].data, "(md5)"); + + core_info_list_hide[j] = true; + len = strlcpy(tmp, "- ", sizeof(tmp)); + strlcat(tmp, core_info->note_list->elems[j].data + pos, sizeof(tmp)); + + if (menu_entries_append(list, tmp, "", + MENU_ENUM_LABEL_CORE_INFO_ENTRY, + MENU_SETTINGS_CORE_INFO_NONE, 0, 0, NULL)) + count++; + break; + } + } } } } @@ -883,6 +901,9 @@ static int menu_displaylist_parse_core_info( { for (i = 0; i < core_info->note_list->size; i++) { + if (core_info_list_hide[i]) + continue; + strlcpy(tmp, core_info->note_list->elems[i].data, sizeof(tmp)); if (menu_entries_append(list, tmp, "",