From 2be1355b570ee696b0c2aaf547aeb13eab1a42ab Mon Sep 17 00:00:00 2001 From: radius Date: Sun, 22 Jan 2017 18:57:50 -0500 Subject: [PATCH] this should work as soon as the server component is updated --- menu/cbs/menu_cbs_ok.c | 1 + tasks/task_netplay_crc.c | 180 ------------------------------ tasks/task_netplay_find_content.c | 7 +- tasks/tasks_internal.h | 2 +- 4 files changed, 7 insertions(+), 183 deletions(-) delete mode 100644 tasks/task_netplay_crc.c diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index 0e9622f86e..723a970153 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -3141,6 +3141,7 @@ static int action_ok_netplay_connect_room(const char *path, netplay_room_list[idx - 1].gamecrc); task_push_netplay_crc_scan(netplay_room_list[idx - 1].gamecrc, + netplay_room_list[idx - 1].gamename, tmp_hostname, netplay_room_list[idx - 1].corename); #else diff --git a/tasks/task_netplay_crc.c b/tasks/task_netplay_crc.c deleted file mode 100644 index 3e01e526ce..0000000000 --- a/tasks/task_netplay_crc.c +++ /dev/null @@ -1,180 +0,0 @@ -/* RetroArch - A frontend for libretro. - * Copyright (C) 2016 - Jean-André Santoni - * - * RetroArch is free software: you can redistribute it and/or modify it under the terms - * of the GNU General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - * PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with RetroArch. - * If not, see . - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "tasks_internal.h" -#include "../file_path_special.h" -#include "../verbosity.h" -#include "../configuration.h" -#include "../playlist.h" -#include "../command.h" -#include "../core_info.h" - -typedef struct -{ - struct string_list *lpl_list; - char crc[PATH_MAX_LENGTH]; - char path[PATH_MAX_LENGTH]; - char hostname[512]; - char corename[PATH_MAX_LENGTH]; - bool found; -} netplay_crc_handle_t; - -static void netplay_crc_scan_callback(void *task_data, - void *user_data, const char *error) -{ - int i; - netplay_crc_handle_t *state = (netplay_crc_handle_t*)task_data; - core_info_list_t *info = NULL; - content_ctx_info_t content_info = {0}; - - core_info_get_list(&info); - - if (!state) - return; - - for (i=0; i < info->count; i++) - { - if(string_is_equal(info->list[i].core_name, state->corename)) - break; - } - - static char content_path[PATH_MAX_LENGTH]; - snprintf(content_path, sizeof(content_path), "%s", state->path); - - command_event(CMD_EVENT_NETPLAY_INIT_DIRECT_DEFERRED, state->hostname); - task_push_content_load_default( - info->list[i].path, content_path, - &content_info, - CORE_TYPE_PLAIN, - CONTENT_MODE_LOAD_CONTENT_WITH_NEW_CORE_FROM_MENU, - NULL, NULL); - - free(state); -} - -static void task_netplay_crc_scan_handler(retro_task_t *task) -{ - size_t i, j; - netplay_crc_handle_t *state = (netplay_crc_handle_t*)task->state; - - task_set_progress(task, 0); - task_set_title(task, strdup("Looking for compatible content...")); - task_set_finished(task, false); - - if (!state->lpl_list) - { - task_set_progress(task, 100); - task_set_title(task, strdup("Playlist directory not found")); - task_set_finished(task, true); - free(state); - return; - } - - if (state->lpl_list->size == 0) - goto no_playlists; - - for (i = 0; i < state->lpl_list->size; i++) - { - playlist_t *playlist = NULL; - const char *lpl_path = state->lpl_list->elems[i].data; - - if (!strstr(lpl_path, file_path_str(FILE_PATH_LPL_EXTENSION))) - continue; - - playlist = playlist_init(lpl_path, 99999); - - for (j = 0; j < playlist->size; j++) - { - if (string_is_equal(playlist->entries[j].crc32, state->crc)) - { - strlcpy(state->path, playlist->entries[j].path, sizeof(state->path)); - state->found = true; - task_set_data(task, state); - task_set_progress(task, 100); - task_set_title(task, strdup("Compatible content found")); - task_set_finished(task, true); - string_list_free(state->lpl_list); - return; - } - - task_set_progress(task, (int)(j/playlist->size*100.0)); - } - } - -no_playlists: - string_list_free(state->lpl_list); - task_set_progress(task, 100); - task_set_title(task, strdup("Couldn't find compatible content")); - task_set_finished(task, true); - return; -} - -bool task_push_netplay_crc_scan(uint32_t crc, - const char *hostname, const char *corename) -{ - settings_t *settings = config_get_ptr(); - retro_task_t *task = (retro_task_t *)calloc(1, sizeof(*task)); - netplay_crc_handle_t *state = (netplay_crc_handle_t*)calloc(1, sizeof(*state)); - - if (!task || !state) - goto error; - - state->crc[0] = '\0'; - snprintf(state->crc, sizeof(state->crc), "%08X|crc", crc); - - state->hostname[0] = '\0'; - snprintf(state->hostname, sizeof(state->hostname), "%s", hostname); - - state->corename[0] = '\0'; - snprintf(state->corename, sizeof(state->corename), "%s", corename); - - state->lpl_list = dir_list_new(settings->directory.playlist, - NULL, true, true, true, false); - - state->found = false; - - /* blocking means no other task can run while this one is running, - * which is the default */ - task->type = TASK_TYPE_BLOCKING; - task->state = state; - task->handler = task_netplay_crc_scan_handler; - task->callback = netplay_crc_scan_callback; - task->title = strdup("Looking for matching content..."); - - task_queue_ctl(TASK_QUEUE_CTL_PUSH, task); - - return true; - -error: - if (state) - free(state); - if (task) - free(task); - - return false; -} diff --git a/tasks/task_netplay_find_content.c b/tasks/task_netplay_find_content.c index c91606e438..ca15731e7a 100644 --- a/tasks/task_netplay_find_content.c +++ b/tasks/task_netplay_find_content.c @@ -139,9 +139,10 @@ static void task_netplay_crc_scan_handler(retro_task_t *task) { for (j = 0; j < playlist->size; j++) { - printf("paths: %s %s\n", playlist->entries[j].path, state->path); + /*printf("State: %s Entry: %s\n", state->path, playlist->entries[j].path);*/ if (strstr(playlist->entries[j].path, state->path)) { + printf("Match! %s %s\n", playlist->entries[j].path, state->path); strlcpy(state->path, playlist->entries[j].path, sizeof(state->path)); state->found = true; task_set_data(task, state); @@ -175,7 +176,7 @@ no_playlists: return; } -bool task_push_netplay_crc_scan(uint32_t crc, +bool task_push_netplay_crc_scan(uint32_t crc, char* name, const char *hostname, const char *corename) { settings_t *settings = config_get_ptr(); @@ -187,6 +188,8 @@ bool task_push_netplay_crc_scan(uint32_t crc, state->crc[0] = '\0'; snprintf(state->crc, sizeof(state->crc), "%08X|crc", crc); + state->path[0] = '\0'; + snprintf(state->path, sizeof(state->path), "%s", name); state->hostname[0] = '\0'; snprintf(state->hostname, sizeof(state->hostname), "%s", hostname); diff --git a/tasks/tasks_internal.h b/tasks/tasks_internal.h index 958afb17ec..61bedf861a 100644 --- a/tasks/tasks_internal.h +++ b/tasks/tasks_internal.h @@ -98,7 +98,7 @@ bool task_push_wifi_scan(void); bool task_push_netplay_lan_scan(void); -bool task_push_netplay_crc_scan(uint32_t crc, +bool task_push_netplay_crc_scan(uint32_t crc, char* name, const char *hostname, const char *corename); #endif