From d20f110a2ffd9e9e1ae49ff33ba234bce32f29ca Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 4 Jul 2015 03:37:43 +0200 Subject: [PATCH] Start adding 'Content Downloader' options --- menu/cbs/menu_cbs_deferred_push.c | 22 ++++++++++++++++- menu/cbs/menu_cbs_ok.c | 40 +++++++++++++++++++++++++++++++ menu/intl/menu_hash_us.c | 6 +++++ menu/menu_displaylist.c | 16 +++++++++++++ menu/menu_displaylist.h | 3 ++- menu/menu_hash.h | 5 ++++ tasks/task_http.c | 5 ++++ 7 files changed, 95 insertions(+), 2 deletions(-) diff --git a/menu/cbs/menu_cbs_deferred_push.c b/menu/cbs/menu_cbs_deferred_push.c index b650a5c4ff..a65fdea5e2 100644 --- a/menu/cbs/menu_cbs_deferred_push.c +++ b/menu/cbs/menu_cbs_deferred_push.c @@ -246,7 +246,7 @@ static int deferred_push_disk_options(menu_displaylist_info_t *info) char *core_buf; size_t core_len; -int cb_core_updater_list(void *data_, size_t len) +static int cb_net_generic(void *data_, size_t len) { char *data = (char*)data_; menu_handle_t *menu = menu_driver_get_ptr(); @@ -273,10 +273,25 @@ int cb_core_updater_list(void *data_, size_t len) return 0; } +int cb_core_updater_list(void *data_, size_t len) +{ + return cb_net_generic(data_, len); +} + +int cb_core_content_list(void *data_, size_t len) +{ + return cb_net_generic(data_, len); +} + static int deferred_push_core_updater_list(menu_displaylist_info_t *info) { return menu_displaylist_push_list(info, DISPLAYLIST_CORES_UPDATER); } + +static int deferred_push_core_content_list(menu_displaylist_info_t *info) +{ + return menu_displaylist_push_list(info, DISPLAYLIST_CORE_CONTENT); +} #endif static int deferred_push_history_list(menu_displaylist_info_t *info) @@ -531,6 +546,11 @@ static int menu_cbs_init_bind_deferred_push_compare_label(menu_file_list_cbs_t * { switch (label_hash) { + case MENU_LABEL_DEFERRED_CORE_CONTENT_LIST: +#ifdef HAVE_NETWORKING + cbs->action_deferred_push = deferred_push_core_content_list; +#endif + break; case MENU_LABEL_DEFERRED_CORE_UPDATER_LIST: #ifdef HAVE_NETWORKING cbs->action_deferred_push = deferred_push_core_updater_list; diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index e3c0cc1f6c..b33bfc55e9 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -516,6 +516,43 @@ static int action_ok_core_updater_list(const char *path, return menu_displaylist_push_list(&info, DISPLAYLIST_GENERIC); } + +static int action_ok_core_content_list(const char *path, + const char *label, unsigned type, size_t idx, size_t entry_idx) +{ + char url_path[PATH_MAX_LENGTH] = {0}; + menu_displaylist_info_t info = {0}; + menu_list_t *menu_list = menu_list_get_ptr(); + settings_t *settings = config_get_ptr(); + if (!menu_list) + return -1; + + (void)url_path; + + menu_entries_set_nonblocking_refresh(); + + if (settings->network.buildbot_url[0] == '\0') + return -1; + +#ifdef HAVE_NETWORKING + event_command(EVENT_CMD_NETWORK_INIT); + + fill_pathname_join(url_path, settings->network.buildbot_assets_url, + "cores/gw/.index", sizeof(url_path)); + + rarch_main_data_msg_queue_push(DATA_TYPE_HTTP, url_path, "cb_core_content_list", 0, 1, + true); +#endif + + info.list = menu_list->menu_stack; + info.type = type; + info.directory_ptr = idx; + strlcpy(info.path, path, sizeof(info.path)); + strlcpy(info.label, + menu_hash_to_str(MENU_LABEL_DEFERRED_CORE_CONTENT_LIST), sizeof(info.label)); + + return menu_displaylist_push_list(&info, DISPLAYLIST_GENERIC); +} static int action_ok_remap_file(const char *path, const char *label, unsigned type, size_t idx, size_t entry_idx) { @@ -1730,6 +1767,9 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs, case MENU_LABEL_RECORD_CONFIG: cbs->action_ok = action_ok_record_configfile; break; + case MENU_LABEL_DOWNLOAD_CORE_CONTENT: + cbs->action_ok = action_ok_core_content_list; + break; case MENU_LABEL_VALUE_CORE_UPDATER_LIST: cbs->action_ok = action_ok_core_updater_list; break; diff --git a/menu/intl/menu_hash_us.c b/menu/intl/menu_hash_us.c index 2c8f199540..24617c3959 100644 --- a/menu/intl/menu_hash_us.c +++ b/menu/intl/menu_hash_us.c @@ -26,6 +26,10 @@ static const char *menu_hash_to_str_us_label(uint32_t hash) { switch (hash) { + case MENU_LABEL_DEFERRED_CORE_CONTENT_LIST: + return "deferred_core_content_list"; + case MENU_LABEL_DOWNLOAD_CORE_CONTENT: + return "download_core_content"; case MENU_LABEL_SCAN_THIS_DIRECTORY: return "scan_this_directory"; case MENU_LABEL_SCAN_FILE: @@ -604,6 +608,8 @@ const char *menu_hash_to_str_us(uint32_t hash) switch (hash) { + case MENU_LABEL_VALUE_DOWNLOAD_CORE_CONTENT: + return "Download Content"; case MENU_LABEL_VALUE_SCAN_THIS_DIRECTORY: return ""; case MENU_LABEL_VALUE_SCAN_FILE: diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 2b50c2d7e9..d97de22ecc 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -1658,6 +1658,13 @@ static int menu_displaylist_parse_add_content_list(menu_displaylist_info_t *info (void)global; +#ifdef HAVE_NETWORKING + menu_list_push(info->list, + menu_hash_to_str(MENU_LABEL_VALUE_DOWNLOAD_CORE_CONTENT), + menu_hash_to_str(MENU_LABEL_DOWNLOAD_CORE_CONTENT), + MENU_SETTING_ACTION, 0, 0); +#endif + #ifdef HAVE_LIBRETRODB menu_list_push(info->list, menu_hash_to_str(MENU_LABEL_VALUE_SCAN_DIRECTORY), @@ -2253,6 +2260,15 @@ int menu_displaylist_push_list(menu_displaylist_info_t *info, unsigned type) need_push = true; break; + case DISPLAYLIST_CORE_CONTENT: + menu_list_clear(info->list); +#ifdef HAVE_NETWORKING + menu_list_clear(info->list); + print_buf_lines(info->list, core_buf, core_len, MENU_FILE_DOWNLOAD_CORE); + need_push = true; + need_refresh = true; +#endif + break; case DISPLAYLIST_CORES_UPDATER: menu_list_clear(info->list); #ifdef HAVE_NETWORKING diff --git a/menu/menu_displaylist.h b/menu/menu_displaylist.h index 6d80d9170f..c066945458 100644 --- a/menu/menu_displaylist.h +++ b/menu/menu_displaylist.h @@ -80,7 +80,8 @@ enum DISPLAYLIST_OPTIONS_MANAGEMENT, DISPLAYLIST_OPTIONS_DISK, DISPLAYLIST_OPTIONS_SHADERS, - DISPLAYLIST_ADD_CONTENT_LIST + DISPLAYLIST_ADD_CONTENT_LIST, + DISPLAYLIST_CORE_CONTENT }; typedef struct menu_displaylist_info diff --git a/menu/menu_hash.h b/menu/menu_hash.h index 21d5576c53..339e3813f2 100644 --- a/menu/menu_hash.h +++ b/menu/menu_hash.h @@ -25,6 +25,11 @@ extern "C" { #define MENU_VALUE_SEARCH 0xd0d5febbU +#define MENU_LABEL_DEFERRED_CORE_CONTENT_LIST 0x76150c63U + +#define MENU_LABEL_VALUE_DOWNLOAD_CORE_CONTENT 0xa8bb22d8U +#define MENU_LABEL_DOWNLOAD_CORE_CONTENT 0xc63b1d3fU + #define MENU_LABEL_SCAN_THIS_DIRECTORY 0x6921b775U #define MENU_LABEL_VALUE_SCAN_THIS_DIRECTORY 0x2911e177U diff --git a/tasks/task_http.c b/tasks/task_http.c index 0fb56dff8f..e8b254de0b 100644 --- a/tasks/task_http.c +++ b/tasks/task_http.c @@ -36,10 +36,12 @@ #define CB_UPDATE_DATABASES 0x931eb8d3U #define CB_UPDATE_SHADERS_GLSL 0x0121a186U #define CB_UPDATE_SHADERS_CG 0xc93a53feU +#define CB_CORE_CONTENT_LIST 0xebc51227U extern char core_updater_path[PATH_MAX_LENGTH]; int cb_core_updater_list(void *data_, size_t len); +int cb_core_content_list(void *data_, size_t len); #ifdef HAVE_ZLIB static int zlib_extract_core_callback(const char *name, const char *valid_exts, @@ -261,6 +263,9 @@ static int cb_http_conn_default(void *data_, size_t len) case CB_CORE_UPDATER_LIST: http->cb = &cb_core_updater_list; break; + case CB_CORE_CONTENT_LIST: + http->cb = &cb_core_content_list; + break; case CB_UPDATE_ASSETS: http->cb = &cb_update_assets; break;