mirror of
https://github.com/libretro/RetroArch
synced 2025-03-02 19:13:34 +00:00
Overhaul content 'Information' menu display
This commit is contained in:
parent
fdd09a8b06
commit
97aaf42446
@ -405,6 +405,8 @@ MSG_HASH(MENU_ENUM_LABEL_DEFERRED_CRT_SWITCHRES_SETTINGS_LIST,
|
||||
"deferred_crt_switchres_settings_list")
|
||||
MSG_HASH(MENU_ENUM_LABEL_DEFERRED_WIFI_SETTINGS_LIST,
|
||||
"deferred_wifi_settings_list")
|
||||
MSG_HASH(MENU_ENUM_LABEL_DEFERRED_INFORMATION,
|
||||
"deferred_information")
|
||||
MSG_HASH(MENU_ENUM_LABEL_DELETE_ENTRY,
|
||||
"delete_entry")
|
||||
MSG_HASH(MENU_ENUM_LABEL_FAVORITES,
|
||||
@ -871,6 +873,8 @@ MSG_HASH(MENU_ENUM_LABEL_QUIT_RETROARCH,
|
||||
"quit_retroarch")
|
||||
MSG_HASH(MENU_ENUM_LABEL_RDB_ENTRY,
|
||||
"rdb_entry")
|
||||
MSG_HASH(MENU_ENUM_LABEL_RDB_ENTRY_DETAIL,
|
||||
"rdb_entry_detail")
|
||||
MSG_HASH(MENU_ENUM_LABEL_RDB_ENTRY_ANALOG,
|
||||
"rdb_entry_analog")
|
||||
MSG_HASH(MENU_ENUM_LABEL_RDB_ENTRY_BBFC_RATING,
|
||||
@ -955,6 +959,18 @@ MSG_HASH(MENU_ENUM_LABEL_RDB_ENTRY_START_CONTENT,
|
||||
"rdb_entry_start_content")
|
||||
MSG_HASH(MENU_ENUM_LABEL_RDB_ENTRY_TGDB_RATING,
|
||||
"rdb_entry_tgdb_rating")
|
||||
MSG_HASH(MENU_ENUM_LABEL_CONTENT_INFO_LABEL,
|
||||
"content_info_label")
|
||||
MSG_HASH(MENU_ENUM_LABEL_CONTENT_INFO_PATH,
|
||||
"content_info_path")
|
||||
MSG_HASH(MENU_ENUM_LABEL_CONTENT_INFO_CORE_NAME,
|
||||
"content_info_core_name")
|
||||
MSG_HASH(MENU_ENUM_LABEL_CONTENT_INFO_DATABASE,
|
||||
"content_info_database")
|
||||
MSG_HASH(MENU_ENUM_LABEL_CONTENT_INFO_RUNTIME,
|
||||
"content_info_runtime")
|
||||
MSG_HASH(MENU_ENUM_LABEL_CONTENT_INFO_LAST_PLAYED,
|
||||
"content_info_last_played")
|
||||
MSG_HASH(MENU_ENUM_LABEL_REBOOT,
|
||||
"reboot")
|
||||
MSG_HASH(MENU_ENUM_LABEL_RECORDING_CONFIG_DIRECTORY,
|
||||
|
@ -2183,6 +2183,10 @@ MSG_HASH(
|
||||
"Restart RetroArch"
|
||||
)
|
||||
#endif
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_DETAIL,
|
||||
"Database Entry")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_RDB_ENTRY_DETAIL,
|
||||
"Show database information for current content")
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ANALOG,
|
||||
"Analog supported"
|
||||
@ -2295,6 +2299,30 @@ MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_RDB_ENTRY_TGDB_RATING,
|
||||
"TGDB Rating"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_CONTENT_INFO_LABEL,
|
||||
"Name"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_CONTENT_INFO_PATH,
|
||||
"File Path"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_CONTENT_INFO_CORE_NAME,
|
||||
"Core"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_CONTENT_INFO_DATABASE,
|
||||
"Database"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_CONTENT_INFO_RUNTIME,
|
||||
"Play Time"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_CONTENT_INFO_LAST_PLAYED,
|
||||
"Last Played"
|
||||
)
|
||||
#ifdef HAVE_LAKKA_SWITCH
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_REBOOT,
|
||||
|
@ -96,6 +96,7 @@ generic_deferred_push(deferred_push_configurations_list, DISPLAYLIST_
|
||||
generic_deferred_push(deferred_push_load_content_special, DISPLAYLIST_LOAD_CONTENT_LIST)
|
||||
generic_deferred_push(deferred_push_load_content_list, DISPLAYLIST_LOAD_CONTENT_LIST)
|
||||
generic_deferred_push(deferred_push_information_list, DISPLAYLIST_INFORMATION_LIST)
|
||||
generic_deferred_push(deferred_push_information, DISPLAYLIST_INFORMATION)
|
||||
generic_deferred_push(deferred_archive_action_detect_core, DISPLAYLIST_ARCHIVE_ACTION_DETECT_CORE)
|
||||
generic_deferred_push(deferred_archive_action, DISPLAYLIST_ARCHIVE_ACTION)
|
||||
generic_deferred_push(deferred_push_management_options, DISPLAYLIST_OPTIONS_MANAGEMENT)
|
||||
@ -1004,6 +1005,11 @@ static int menu_cbs_init_bind_deferred_push_compare_label(
|
||||
{
|
||||
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_information_list);
|
||||
}
|
||||
else if (strstr(label,
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_INFORMATION)))
|
||||
{
|
||||
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_information);
|
||||
}
|
||||
else if (strstr(label,
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_SHADER_OPTIONS)))
|
||||
{
|
||||
@ -1163,6 +1169,9 @@ static int menu_cbs_init_bind_deferred_push_compare_label(
|
||||
case MENU_ENUM_LABEL_INFORMATION_LIST:
|
||||
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_information_list);
|
||||
break;
|
||||
case MENU_ENUM_LABEL_INFORMATION:
|
||||
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_information);
|
||||
break;
|
||||
case MENU_ENUM_LABEL_MANAGEMENT:
|
||||
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_management_options);
|
||||
break;
|
||||
|
@ -43,7 +43,7 @@ static int (func)(file_list_t *list, unsigned type, unsigned i, const char *labe
|
||||
return 0; \
|
||||
}
|
||||
|
||||
fill_label_macro(action_bind_label_information, MENU_ENUM_LABEL_VALUE_INFORMATION)
|
||||
fill_label_macro(action_bind_label_rdb_entry_detail, MENU_ENUM_LABEL_VALUE_RDB_ENTRY_DETAIL)
|
||||
fill_label_macro(action_bind_label_internal_memory, MSG_INTERNAL_STORAGE)
|
||||
fill_label_macro(action_bind_label_removable_storage, MSG_REMOVABLE_STORAGE)
|
||||
fill_label_macro(action_bind_label_external_application_dir, MSG_EXTERNAL_APPLICATION_DIR)
|
||||
@ -108,8 +108,8 @@ int menu_cbs_init_bind_label(menu_file_list_cbs_t *cbs,
|
||||
case MSG_EXTERNAL_APPLICATION_DIR:
|
||||
BIND_ACTION_LABEL(cbs, action_bind_label_external_application_dir);
|
||||
break;
|
||||
case MENU_ENUM_LABEL_INFORMATION:
|
||||
BIND_ACTION_LABEL(cbs, action_bind_label_information);
|
||||
case MENU_ENUM_LABEL_RDB_ENTRY_DETAIL:
|
||||
BIND_ACTION_LABEL(cbs, action_bind_label_rdb_entry_detail);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -494,7 +494,7 @@ static int menu_cbs_init_bind_left_compare_label(menu_file_list_cbs_t *cbs,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (strstr(label, "rdb_entry"))
|
||||
if (strstr(label, "rdb_entry") || strstr(label, "content_info"))
|
||||
{
|
||||
BIND_ACTION_LEFT(cbs, action_left_scroll);
|
||||
}
|
||||
|
@ -5796,6 +5796,7 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs,
|
||||
case MENU_ENUM_LABEL_CONFIGURATIONS_LIST:
|
||||
case MENU_ENUM_LABEL_HELP_LIST:
|
||||
case MENU_ENUM_LABEL_INFORMATION_LIST:
|
||||
case MENU_ENUM_LABEL_INFORMATION:
|
||||
case MENU_ENUM_LABEL_CONTENT_SETTINGS:
|
||||
#ifdef HAVE_LAKKA_SWITCH
|
||||
case MENU_ENUM_LABEL_SWITCH_GPU_PROFILE:
|
||||
|
@ -626,7 +626,7 @@ static int menu_cbs_init_bind_right_compare_label(menu_file_list_cbs_t *cbs,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (strstr(label, "rdb_entry"))
|
||||
if (strstr(label, "rdb_entry") || strstr(label, "content_info"))
|
||||
{
|
||||
BIND_ACTION_RIGHT(cbs, action_right_scroll);
|
||||
}
|
||||
|
@ -617,6 +617,7 @@ default_sublabel_macro(action_bind_sublabel_menu_rgui_extended_ascii,
|
||||
default_sublabel_macro(action_bind_sublabel_thumbnails_updater_list, MENU_ENUM_SUBLABEL_THUMBNAILS_UPDATER_LIST)
|
||||
default_sublabel_macro(action_bind_sublabel_pl_thumbnails_updater_list, MENU_ENUM_SUBLABEL_PL_THUMBNAILS_UPDATER_LIST)
|
||||
default_sublabel_macro(action_bind_sublabel_help_send_debug_info, MENU_ENUM_SUBLABEL_HELP_SEND_DEBUG_INFO)
|
||||
default_sublabel_macro(action_bind_sublabel_rdb_entry_detail, MENU_ENUM_SUBLABEL_RDB_ENTRY_DETAIL)
|
||||
|
||||
static int action_bind_sublabel_systeminfo_controller_entry(
|
||||
file_list_t *list,
|
||||
@ -2623,6 +2624,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
|
||||
case MENU_ENUM_LABEL_HELP_SEND_DEBUG_INFO:
|
||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_help_send_debug_info);
|
||||
break;
|
||||
case MENU_ENUM_LABEL_RDB_ENTRY_DETAIL:
|
||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_rdb_entry_detail);
|
||||
break;
|
||||
default:
|
||||
case MSG_UNKNOWN:
|
||||
return -1;
|
||||
|
@ -167,6 +167,7 @@ default_title_macro(action_get_system_information_list, MENU_ENUM_LABEL_
|
||||
default_title_macro(action_get_network_information_list, MENU_ENUM_LABEL_VALUE_NETWORK_INFORMATION)
|
||||
default_title_macro(action_get_settings_list, MENU_ENUM_LABEL_VALUE_SETTINGS)
|
||||
default_title_macro(action_get_title_information_list, MENU_ENUM_LABEL_VALUE_INFORMATION_LIST)
|
||||
default_title_macro(action_get_title_information, MENU_ENUM_LABEL_VALUE_INFORMATION)
|
||||
default_title_macro(action_get_title_goto_favorites, MENU_ENUM_LABEL_VALUE_GOTO_FAVORITES)
|
||||
default_title_macro(action_get_title_goto_image, MENU_ENUM_LABEL_VALUE_GOTO_IMAGES)
|
||||
default_title_macro(action_get_title_goto_music, MENU_ENUM_LABEL_VALUE_GOTO_MUSIC)
|
||||
@ -736,6 +737,9 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs,
|
||||
case MENU_ENUM_LABEL_INFORMATION_LIST:
|
||||
BIND_ACTION_GET_TITLE(cbs, action_get_title_information_list);
|
||||
break;
|
||||
case MENU_ENUM_LABEL_INFORMATION:
|
||||
BIND_ACTION_GET_TITLE(cbs, action_get_title_information);
|
||||
break;
|
||||
case MENU_ENUM_LABEL_SETTINGS:
|
||||
BIND_ACTION_GET_TITLE(cbs, action_get_settings_list);
|
||||
break;
|
||||
@ -1084,6 +1088,9 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs,
|
||||
case MENU_LABEL_INFORMATION_LIST:
|
||||
BIND_ACTION_GET_TITLE(cbs, action_get_title_information_list);
|
||||
break;
|
||||
case MENU_LABEL_INFORMATION:
|
||||
BIND_ACTION_GET_TITLE(cbs, action_get_title_information);
|
||||
break;
|
||||
case MENU_LABEL_SETTINGS:
|
||||
BIND_ACTION_GET_TITLE(cbs, action_get_settings_list);
|
||||
break;
|
||||
|
@ -3140,7 +3140,6 @@ static void xmb_draw_items(
|
||||
menu_entry_t entry;
|
||||
menu_entry_init(&entry);
|
||||
entry.label_enabled = false;
|
||||
entry.rich_label_enabled = false;
|
||||
entry.sublabel_enabled = (i == current);
|
||||
menu_entry_get(&entry, 0, i, list, true);
|
||||
ret = xmb_draw_item(video_info,
|
||||
|
@ -93,6 +93,7 @@
|
||||
#include "../wifi/wifi_driver.h"
|
||||
#include "../tasks/tasks_internal.h"
|
||||
#include "../dynamic.h"
|
||||
#include "../runtime_file.h"
|
||||
|
||||
static char new_path_entry[4096] = {0};
|
||||
static char new_lbl_entry[4096] = {0};
|
||||
@ -1003,51 +1004,40 @@ static int create_string_list_rdb_entry_int(
|
||||
int actual_int, const char *path, file_list_t *list)
|
||||
{
|
||||
union string_list_elem_attr attr;
|
||||
size_t path_size = PATH_MAX_LENGTH * sizeof(char);
|
||||
char *tmp = NULL;
|
||||
char *str = NULL;
|
||||
char *output_label = NULL;
|
||||
int str_len = 0;
|
||||
struct string_list *str_list = string_list_new();
|
||||
char tmp[PATH_MAX_LENGTH];
|
||||
char str[PATH_MAX_LENGTH];
|
||||
char output_label[PATH_MAX_LENGTH];
|
||||
|
||||
tmp[0] = '\0';
|
||||
str[0] = '\0';
|
||||
output_label[0] = '\0';
|
||||
|
||||
if (!str_list)
|
||||
return -1;
|
||||
|
||||
attr.i = 0;
|
||||
tmp = (char*)malloc(path_size);
|
||||
str = (char*)malloc(path_size);
|
||||
tmp[0] = str[0] = '\0';
|
||||
|
||||
str_len += strlen(label) + 1;
|
||||
string_list_append(str_list, label, attr);
|
||||
|
||||
snprintf(str, path_size, "%d", actual_int);
|
||||
snprintf(str, sizeof(str), "%d", actual_int);
|
||||
str_len += strlen(str) + 1;
|
||||
string_list_append(str_list, str, attr);
|
||||
free(str);
|
||||
|
||||
str_len += strlen(path) + 1;
|
||||
string_list_append(str_list, path, attr);
|
||||
|
||||
output_label = (char*)calloc(str_len, sizeof(char));
|
||||
|
||||
if (!output_label)
|
||||
{
|
||||
string_list_free(str_list);
|
||||
free(tmp);
|
||||
return -1;
|
||||
}
|
||||
|
||||
string_list_join_concat(output_label, str_len, str_list, "|");
|
||||
string_list_free(str_list);
|
||||
str_list = NULL;
|
||||
|
||||
snprintf(tmp, path_size, "%s : %d", desc, actual_int);
|
||||
snprintf(tmp, sizeof(tmp), "%s : %d", desc, actual_int);
|
||||
menu_entries_append_enum(list, tmp, output_label,
|
||||
enum_idx,
|
||||
0, 0, 0);
|
||||
|
||||
free(output_label);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1977,6 +1967,15 @@ static int menu_displaylist_parse_load_content_settings(
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (settings->bools.quick_menu_show_information)
|
||||
{
|
||||
menu_entries_append_enum(info->list,
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_INFORMATION),
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_INFORMATION),
|
||||
MENU_ENUM_LABEL_INFORMATION,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
}
|
||||
}
|
||||
else
|
||||
menu_entries_append_enum(info->list,
|
||||
@ -2061,6 +2060,25 @@ static int menu_displaylist_parse_horizontal_content_actions(
|
||||
string_is_equal(system, "images_history") ||
|
||||
string_is_equal(system, "music_history") ||
|
||||
string_is_equal(system, "video_history");
|
||||
|
||||
/* An annoyance: if the user navigates to the information menu,
|
||||
* then to the database entry, the thumbnail system will be changed.
|
||||
* This breaks the above 'remove_entry_enabled' check for the
|
||||
* history and favorites playlists. We therefore have to check
|
||||
* the playlist file name as well... */
|
||||
if (!remove_entry_enabled && settings->bools.quick_menu_show_information)
|
||||
{
|
||||
const char *playlist_path = playlist_get_conf_path(playlist);
|
||||
|
||||
if (!string_is_empty(playlist_path))
|
||||
{
|
||||
const char *playlist_file = path_basename(playlist_path);
|
||||
|
||||
if (!string_is_empty(playlist_file))
|
||||
remove_entry_enabled = string_is_equal(playlist_file, file_path_str(FILE_PATH_CONTENT_HISTORY)) ||
|
||||
string_is_equal(playlist_file, file_path_str(FILE_PATH_CONTENT_FAVORITES));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (remove_entry_enabled)
|
||||
@ -2086,33 +2104,14 @@ static int menu_displaylist_parse_horizontal_content_actions(
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_RESET_CORE_ASSOCIATION),
|
||||
MENU_ENUM_LABEL_RESET_CORE_ASSOCIATION, FILE_TYPE_PLAYLIST_ENTRY, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
if ((entry && !string_is_empty(entry->db_name)) && (!content_loaded ||
|
||||
(content_loaded && settings->bools.quick_menu_show_information)))
|
||||
{
|
||||
char *db_path = (char*)malloc(PATH_MAX_LENGTH * sizeof(char));
|
||||
|
||||
db_path[0] = '\0';
|
||||
|
||||
fill_pathname_join_noext(db_path,
|
||||
settings->paths.path_content_database,
|
||||
entry->db_name,
|
||||
PATH_MAX_LENGTH * sizeof(char));
|
||||
strlcat(db_path,
|
||||
file_path_str(FILE_PATH_RDB_EXTENSION),
|
||||
PATH_MAX_LENGTH * sizeof(char)
|
||||
);
|
||||
|
||||
if (path_is_valid(db_path))
|
||||
menu_entries_append_enum(
|
||||
info->list,
|
||||
entry->label,
|
||||
db_path,
|
||||
MENU_ENUM_LABEL_INFORMATION,
|
||||
FILE_TYPE_RDB_ENTRY, 0, idx);
|
||||
|
||||
free(db_path);
|
||||
if (settings->bools.quick_menu_show_information)
|
||||
{
|
||||
menu_entries_append_enum(info->list,
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_INFORMATION),
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_INFORMATION),
|
||||
MENU_ENUM_LABEL_INFORMATION, MENU_SETTING_ACTION, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef HAVE_NETWORKING
|
||||
@ -2690,6 +2689,249 @@ static unsigned menu_displaylist_parse_pl_thumbnail_download_list(
|
||||
}
|
||||
#endif
|
||||
|
||||
static unsigned menu_displaylist_parse_content_information(
|
||||
menu_handle_t *menu,
|
||||
menu_displaylist_info_t *info)
|
||||
{
|
||||
settings_t *settings = config_get_ptr();
|
||||
playlist_t *playlist = playlist_get_cached();
|
||||
unsigned idx = menu->rpl_entry_selection_ptr;
|
||||
const struct playlist_entry *entry = NULL;
|
||||
const char *loaded_content_path = path_get(RARCH_PATH_CONTENT);
|
||||
const char *loaded_core_path = path_get(RARCH_PATH_CORE);
|
||||
const char *content_label = NULL;
|
||||
const char *content_path = NULL;
|
||||
const char *core_path = NULL;
|
||||
const char *db_name = NULL;
|
||||
bool content_loaded = false;
|
||||
bool playlist_valid = false;
|
||||
unsigned count = 0;
|
||||
char core_name[PATH_MAX_LENGTH];
|
||||
char tmp[PATH_MAX_LENGTH];
|
||||
|
||||
core_name[0] = '\0';
|
||||
|
||||
if (!settings)
|
||||
return count;
|
||||
|
||||
content_loaded = !rarch_ctl(RARCH_CTL_IS_DUMMY_CORE, NULL)
|
||||
&& string_is_equal(menu->deferred_path, loaded_content_path);
|
||||
|
||||
/* If content is currently running, have to make sure
|
||||
* we have a valid playlist to work with
|
||||
* (if content is not running, than playlist will always
|
||||
* be valid provided that playlist_get_cached() does not
|
||||
* return NULL) */
|
||||
if (content_loaded)
|
||||
{
|
||||
if (!string_is_empty(loaded_content_path) && !string_is_empty(loaded_core_path))
|
||||
playlist_valid = playlist_index_is_valid(
|
||||
playlist, idx, loaded_content_path, loaded_core_path);
|
||||
}
|
||||
else if (playlist)
|
||||
playlist_valid = true;
|
||||
|
||||
if (playlist_valid)
|
||||
{
|
||||
/* If playlist is valid, all information is readily available */
|
||||
playlist_get_index(playlist, idx, &entry);
|
||||
|
||||
if (entry)
|
||||
{
|
||||
content_label = entry->label;
|
||||
content_path = entry->path;
|
||||
core_path = entry->core_path;
|
||||
db_name = entry->db_name;
|
||||
|
||||
strlcpy(core_name, entry->core_name, sizeof(core_name));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
core_info_ctx_find_t core_info;
|
||||
|
||||
/* No playlist - just extract what we can... */
|
||||
content_path = loaded_content_path;
|
||||
core_path = loaded_core_path;
|
||||
|
||||
core_info.inf = NULL;
|
||||
core_info.path = core_path;
|
||||
|
||||
if (core_info_find(&core_info, core_path))
|
||||
if (!string_is_empty(core_info.inf->display_name))
|
||||
strlcpy(core_name, core_info.inf->display_name, sizeof(core_name));
|
||||
}
|
||||
|
||||
/* Content label */
|
||||
if (!string_is_empty(content_label))
|
||||
{
|
||||
tmp[0] = '\0';
|
||||
|
||||
snprintf(tmp, sizeof(tmp),
|
||||
"%s: %s", msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CONTENT_INFO_LABEL), content_label);
|
||||
|
||||
if (menu_entries_append_enum(info->list, tmp,
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_CONTENT_INFO_LABEL),
|
||||
MENU_ENUM_LABEL_CONTENT_INFO_LABEL,
|
||||
0, 0, 0))
|
||||
count++;
|
||||
}
|
||||
|
||||
/* Content path */
|
||||
if (!string_is_empty(content_path))
|
||||
{
|
||||
tmp[0] = '\0';
|
||||
|
||||
snprintf(tmp, sizeof(tmp),
|
||||
"%s: %s", msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CONTENT_INFO_PATH), content_path);
|
||||
|
||||
if (menu_entries_append_enum(info->list, tmp,
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_CONTENT_INFO_PATH),
|
||||
MENU_ENUM_LABEL_CONTENT_INFO_PATH,
|
||||
0, 0, 0))
|
||||
count++;
|
||||
}
|
||||
|
||||
/* Core name */
|
||||
if (!string_is_empty(core_name) &&
|
||||
!string_is_equal(core_name, file_path_str(FILE_PATH_DETECT)))
|
||||
{
|
||||
tmp[0] = '\0';
|
||||
|
||||
snprintf(tmp, sizeof(tmp),
|
||||
"%s: %s", msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CONTENT_INFO_CORE_NAME), core_name);
|
||||
|
||||
if (menu_entries_append_enum(info->list, tmp,
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_CONTENT_INFO_CORE_NAME),
|
||||
MENU_ENUM_LABEL_CONTENT_INFO_CORE_NAME,
|
||||
0, 0, 0))
|
||||
count++;
|
||||
}
|
||||
|
||||
/* Database */
|
||||
if (!string_is_empty(db_name))
|
||||
{
|
||||
char *db_name_no_ext = NULL;
|
||||
char db_name_no_ext_buff[PATH_MAX_LENGTH];
|
||||
|
||||
db_name_no_ext_buff[0] = '\0';
|
||||
|
||||
/* Remove .lpl extension
|
||||
* > path_remove_extension() requires a char * (not const)
|
||||
* so have to use a temporary buffer... */
|
||||
strlcpy(db_name_no_ext_buff, db_name, sizeof(db_name_no_ext_buff));
|
||||
db_name_no_ext = path_remove_extension(db_name_no_ext_buff);
|
||||
|
||||
if (!string_is_empty(db_name_no_ext))
|
||||
{
|
||||
tmp[0] = '\0';
|
||||
|
||||
snprintf(tmp, sizeof(tmp),
|
||||
"%s: %s", msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CONTENT_INFO_DATABASE), db_name_no_ext);
|
||||
|
||||
if (menu_entries_append_enum(info->list, tmp,
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_CONTENT_INFO_DATABASE),
|
||||
MENU_ENUM_LABEL_CONTENT_INFO_DATABASE,
|
||||
0, 0, 0))
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
/* Runtime */
|
||||
if (((settings->uints.playlist_sublabel_runtime_type == PLAYLIST_RUNTIME_PER_CORE) &&
|
||||
settings->bools.content_runtime_log) ||
|
||||
((settings->uints.playlist_sublabel_runtime_type == PLAYLIST_RUNTIME_AGGREGATE) &&
|
||||
!settings->bools.content_runtime_log_aggregate))
|
||||
{
|
||||
runtime_log_t *runtime_log = runtime_log_init(
|
||||
content_path, core_path,
|
||||
(settings->uints.playlist_sublabel_runtime_type == PLAYLIST_RUNTIME_PER_CORE));
|
||||
|
||||
if (runtime_log)
|
||||
{
|
||||
if (runtime_log_has_runtime(runtime_log))
|
||||
{
|
||||
unsigned runtime_hours;
|
||||
unsigned runtime_minutes;
|
||||
unsigned runtime_seconds;
|
||||
unsigned last_played_year;
|
||||
unsigned last_played_month;
|
||||
unsigned last_played_day;
|
||||
unsigned last_played_hour;
|
||||
unsigned last_played_minute;
|
||||
unsigned last_played_second;
|
||||
|
||||
/* Play time */
|
||||
runtime_log_get_runtime_hms(runtime_log,
|
||||
&runtime_hours, &runtime_minutes, &runtime_seconds);
|
||||
|
||||
tmp[0] = '\0';
|
||||
|
||||
snprintf(tmp, sizeof(tmp),
|
||||
"%s: %02u:%02u:%02u", msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CONTENT_INFO_RUNTIME),
|
||||
runtime_hours, runtime_minutes, runtime_seconds);
|
||||
|
||||
if (menu_entries_append_enum(info->list, tmp,
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_CONTENT_INFO_RUNTIME),
|
||||
MENU_ENUM_LABEL_CONTENT_INFO_RUNTIME,
|
||||
0, 0, 0))
|
||||
count++;
|
||||
|
||||
/* Last Played */
|
||||
runtime_log_get_last_played(runtime_log,
|
||||
&last_played_year, &last_played_month, &last_played_day,
|
||||
&last_played_hour, &last_played_minute, &last_played_second);
|
||||
|
||||
tmp[0] = '\0';
|
||||
|
||||
snprintf(tmp, sizeof(tmp),
|
||||
"%s: %04u/%02u/%02u - %02u:%02u:%02u",
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CONTENT_INFO_LAST_PLAYED),
|
||||
last_played_year, last_played_month, last_played_day,
|
||||
last_played_hour, last_played_minute, last_played_second);
|
||||
|
||||
if (menu_entries_append_enum(info->list, tmp,
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_CONTENT_INFO_LAST_PLAYED),
|
||||
MENU_ENUM_LABEL_CONTENT_INFO_LAST_PLAYED,
|
||||
0, 0, 0))
|
||||
count++;
|
||||
}
|
||||
|
||||
free(runtime_log);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef HAVE_LIBRETRODB
|
||||
|
||||
/* Database entry */
|
||||
if (!string_is_empty(db_name))
|
||||
{
|
||||
char db_path[PATH_MAX_LENGTH];
|
||||
|
||||
db_path[0] = '\0';
|
||||
|
||||
fill_pathname_join_noext(db_path,
|
||||
settings->paths.path_content_database,
|
||||
db_name,
|
||||
sizeof(db_path));
|
||||
strlcat(db_path,
|
||||
file_path_str(FILE_PATH_RDB_EXTENSION),
|
||||
sizeof(db_path));
|
||||
|
||||
if (path_is_valid(db_path))
|
||||
if (menu_entries_append_enum(info->list,
|
||||
entry->label,
|
||||
db_path,
|
||||
MENU_ENUM_LABEL_RDB_ENTRY_DETAIL,
|
||||
FILE_TYPE_RDB_ENTRY, 0, 0))
|
||||
count++;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
static bool menu_displaylist_push_internal(
|
||||
const char *label,
|
||||
menu_displaylist_ctx_entry_t *entry,
|
||||
@ -4802,6 +5044,20 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type,
|
||||
info->need_push = true;
|
||||
/* TODO/FIXME ? */
|
||||
break;
|
||||
case DISPLAYLIST_INFORMATION:
|
||||
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
|
||||
count = menu_displaylist_parse_content_information(menu, info);
|
||||
|
||||
if (count == 0)
|
||||
menu_entries_append_enum(info->list,
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_ENTRIES_TO_DISPLAY),
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_NO_ENTRIES_TO_DISPLAY),
|
||||
MENU_ENUM_LABEL_NO_ENTRIES_TO_DISPLAY,
|
||||
FILE_TYPE_NONE, 0, 0);
|
||||
|
||||
info->need_push = true;
|
||||
info->need_refresh = true;
|
||||
break;
|
||||
case DISPLAYLIST_DATABASE_ENTRY:
|
||||
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
|
||||
{
|
||||
|
@ -175,6 +175,7 @@ enum menu_displaylist_ctl_state
|
||||
DISPLAYLIST_LOAD_CONTENT_LIST,
|
||||
DISPLAYLIST_LOAD_CONTENT_SPECIAL,
|
||||
DISPLAYLIST_INFORMATION_LIST,
|
||||
DISPLAYLIST_INFORMATION,
|
||||
DISPLAYLIST_CONTENT_SETTINGS,
|
||||
DISPLAYLIST_OPTIONS,
|
||||
DISPLAYLIST_OPTIONS_CHEATS,
|
||||
|
13
msg_hash.h
13
msg_hash.h
@ -1229,6 +1229,7 @@ enum msg_hash_enums
|
||||
MENU_ENUM_LABEL_DEFERRED_ACCOUNTS_TWITCH_LIST,
|
||||
MENU_ENUM_LABEL_DEFERRED_ACCOUNTS_YOUTUBE_LIST,
|
||||
MENU_ENUM_LABEL_DEFERRED_ACCOUNTS_LIST,
|
||||
MENU_ENUM_LABEL_DEFERRED_INFORMATION,
|
||||
|
||||
MENU_LABEL(FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||
MENU_LABEL(DOWNLOADED_FILE_DETECT_CORE_LIST),
|
||||
@ -1596,6 +1597,15 @@ enum msg_hash_enums
|
||||
MENU_LABEL(RDB_ENTRY_SHA1),
|
||||
MENU_LABEL(RDB_ENTRY_MD5),
|
||||
MENU_LABEL(RDB_ENTRY_CRC32),
|
||||
MENU_LABEL(RDB_ENTRY_DETAIL),
|
||||
|
||||
/* Content information settings */
|
||||
MENU_LABEL(CONTENT_INFO_LABEL),
|
||||
MENU_LABEL(CONTENT_INFO_PATH),
|
||||
MENU_LABEL(CONTENT_INFO_CORE_NAME),
|
||||
MENU_LABEL(CONTENT_INFO_DATABASE),
|
||||
MENU_LABEL(CONTENT_INFO_RUNTIME),
|
||||
MENU_LABEL(CONTENT_INFO_LAST_PLAYED),
|
||||
|
||||
MENU_LABEL(NO_PLAYLIST_ENTRIES_AVAILABLE),
|
||||
|
||||
@ -2458,6 +2468,7 @@ enum msg_hash_enums
|
||||
#define MENU_LABEL_DEFERRED_INPUT_HOTKEY_BINDS_LIST 0x10b41d97U
|
||||
#define MENU_LABEL_DEFERRED_CONFIGURATIONS_LIST 0x679a1b0bU
|
||||
#define MENU_LABEL_DEFERRED_BROWSE_URL_START 0xcef58296U
|
||||
#define MENU_LABEL_DEFERRED_INFORMATION 0x3FCC9F2BU
|
||||
|
||||
/* Cheevos settings */
|
||||
|
||||
@ -2478,6 +2489,8 @@ enum msg_hash_enums
|
||||
|
||||
#define MENU_LABEL_INFORMATION_LIST 0x225e7606U
|
||||
|
||||
#define MENU_LABEL_INFORMATION 0x81E8DC6BU
|
||||
|
||||
#define MENU_LABEL_CONTENT_SETTINGS 0xe789f7f6U
|
||||
|
||||
#define MENU_LABEL_SCREEN_RESOLUTION 0x5c9b3a58U
|
||||
|
Loading…
x
Reference in New Issue
Block a user