From 6d285be90c6b3237b5779c948f40bf4f09d1444b Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 20 Dec 2016 21:19:25 +0100 Subject: [PATCH] Create database_info_build_query_enum --- database_info.c | 94 +++++++++++++++++++++++++++++++++++++++++ database_info.h | 25 +++++++++++ menu/menu_displaylist.c | 4 +- 3 files changed, 121 insertions(+), 2 deletions(-) diff --git a/database_info.c b/database_info.c index b2bde55049..6645f07fde 100644 --- a/database_info.c +++ b/database_info.c @@ -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. diff --git a/database_info.h b/database_info.h index 8f6ca65a85..9bbe452f92 100644 --- a/database_info.h +++ b/database_info.h @@ -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); diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 65b48e79fe..ea90082e0b 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -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)