Create database_info_build_query_enum

This commit is contained in:
twinaphex 2016-12-20 21:19:25 +01:00
parent c8dc0fef0c
commit 6d285be90c
3 changed files with 121 additions and 2 deletions

View file

@ -206,6 +206,100 @@ int database_info_build_query(char *s, size_t len,
return 0;
}
int database_info_build_query_enum(char *s, size_t len,
enum database_query_type type,
const char *path)
{
bool add_quotes = true;
bool add_glob = false;
database_info_build_query_add_bracket_open(s, len);
switch (type)
{
case DATABASE_QUERY_ENTRY:
strlcat(s, "name", len);
break;
case DATABASE_QUERY_ENTRY_PUBLISHER:
strlcat(s, "publisher", len);
break;
case DATABASE_QUERY_ENTRY_DEVELOPER:
strlcat(s, "developer", len);
add_glob = true;
add_quotes = false;
break;
case DATABASE_QUERY_ENTRY_ORIGIN:
strlcat(s, "origin", len);
break;
case DATABASE_QUERY_ENTRY_FRANCHISE:
strlcat(s, "franchise", len);
break;
case DATABASE_QUERY_ENTRY_RATING:
strlcat(s, "esrb_rating", len);
break;
case DATABASE_QUERY_ENTRY_BBFC_RATING:
strlcat(s, "bbfc_rating", len);
break;
case DATABASE_QUERY_ENTRY_ELSPA_RATING:
strlcat(s, "elspa_rating", len);
break;
case DATABASE_QUERY_ENTRY_PEGI_RATING:
strlcat(s, "pegi_rating", len);
break;
case DATABASE_QUERY_ENTRY_CERO_RATING:
strlcat(s, "cero_rating", len);
break;
case DATABASE_QUERY_ENTRY_ENHANCEMENT_HW:
strlcat(s, "enhancement_hw", len);
break;
case DATABASE_QUERY_ENTRY_EDGE_MAGAZINE_RATING:
strlcat(s, "edge_rating", len);
add_quotes = false;
break;
case DATABASE_QUERY_ENTRY_EDGE_MAGAZINE_ISSUE:
strlcat(s, "edge_issue", len);
add_quotes = false;
break;
case DATABASE_QUERY_ENTRY_FAMITSU_MAGAZINE_RATING:
strlcat(s, "famitsu_rating", len);
add_quotes = false;
break;
case DATABASE_QUERY_ENTRY_RELEASEDATE_MONTH:
strlcat(s, "releasemonth", len);
add_quotes = false;
break;
case DATABASE_QUERY_ENTRY_RELEASEDATE_YEAR:
strlcat(s, "releaseyear", len);
add_quotes = false;
break;
case DATABASE_QUERY_ENTRY_MAX_USERS:
strlcat(s, "users", len);
add_quotes = false;
break;
default:
RARCH_LOG("Unknown type: %d\n", type);
break;
}
database_info_build_query_add_colon(s, len);
if (add_glob)
database_info_build_query_add_glob_open(s, len);
if (add_quotes)
database_info_build_query_add_quote(s, len);
strlcat(s, path, len);
if (add_glob)
database_info_build_query_add_glob_close(s, len);
if (add_quotes)
database_info_build_query_add_quote(s, len);
database_info_build_query_add_bracket_close(s, len);
#if 0
RARCH_LOG("query: %s\n", s);
#endif
return 0;
}
/*
* NOTE: Allocates memory, it is the caller's responsibility to free the
* memory after it is no longer required.

View file

@ -47,6 +47,28 @@ enum database_type
DATABASE_TYPE_CRC_LOOKUP
};
enum database_query_type
{
DATABASE_QUERY_NONE = 0,
DATABASE_QUERY_ENTRY,
DATABASE_QUERY_ENTRY_PUBLISHER,
DATABASE_QUERY_ENTRY_DEVELOPER,
DATABASE_QUERY_ENTRY_ORIGIN,
DATABASE_QUERY_ENTRY_FRANCHISE,
DATABASE_QUERY_ENTRY_RATING,
DATABASE_QUERY_ENTRY_BBFC_RATING,
DATABASE_QUERY_ENTRY_ELSPA_RATING,
DATABASE_QUERY_ENTRY_PEGI_RATING,
DATABASE_QUERY_ENTRY_CERO_RATING,
DATABASE_QUERY_ENTRY_ENHANCEMENT_HW,
DATABASE_QUERY_ENTRY_EDGE_MAGAZINE_RATING,
DATABASE_QUERY_ENTRY_EDGE_MAGAZINE_ISSUE,
DATABASE_QUERY_ENTRY_FAMITSU_MAGAZINE_RATING,
DATABASE_QUERY_ENTRY_RELEASEDATE_MONTH,
DATABASE_QUERY_ENTRY_RELEASEDATE_YEAR,
DATABASE_QUERY_ENTRY_MAX_USERS
};
typedef struct
{
enum database_status status;
@ -113,6 +135,9 @@ void database_info_free(database_info_handle_t *handle);
int database_info_build_query(
char *query, size_t len, const char *label, const char *path);
int database_info_build_query_enum(
char *query, size_t len, enum database_query_type type, const char *path);
/* NOTE: Allocates memory, it is the caller's responsibility to free the
* memory after it is no longer required. */
char *bin_to_hex_alloc(const uint8_t *data, size_t len);

View file

@ -1694,8 +1694,8 @@ static int menu_displaylist_parse_database_entry(menu_displaylist_info_t *info)
if (!menu_driver_ctl(RARCH_MENU_CTL_DRIVER_DATA_GET, &menu))
goto error;
database_info_build_query(query, sizeof(query),
"displaylist_parse_database_entry", info->path_b);
database_info_build_query_enum(query, sizeof(query),
DATABASE_QUERY_ENTRY, info->path_b);
db_info = database_info_list_new(info->path, query);
if (!db_info)