mirror of
https://github.com/libretro/RetroArch
synced 2025-04-18 14:42:30 +00:00
only scan the content databases that support the file's extension
This commit is contained in:
parent
49e54356f4
commit
fc1f2cdcf4
46
core_info.c
46
core_info.c
@ -688,6 +688,52 @@ size_t core_info_list_num_info_files(core_info_list_t *core_info_list)
|
|||||||
return num;
|
return num;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool core_info_unsupported_content_path(const char *path)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
if (!core_info_curr_list)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
for (i = 0; i < core_info_curr_list->count; i++)
|
||||||
|
{
|
||||||
|
const core_info_t *info = &core_info_curr_list->list[i];
|
||||||
|
|
||||||
|
if (string_list_find_elem(info->supported_extensions_list, path_get_extension(path)))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool core_info_database_supports_content_path(const char *database_path, const char *path)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
char *database = NULL;
|
||||||
|
|
||||||
|
if (!core_info_curr_list)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
database = strdup(path_basename(database_path));
|
||||||
|
|
||||||
|
path_remove_extension(database);
|
||||||
|
|
||||||
|
for (i = 0; i < core_info_curr_list->count; i++)
|
||||||
|
{
|
||||||
|
const core_info_t *info = &core_info_curr_list->list[i];
|
||||||
|
|
||||||
|
if (string_list_find_elem(info->supported_extensions_list, path_get_extension(path)))
|
||||||
|
if (string_list_find_elem(info->databases_list, database))
|
||||||
|
{
|
||||||
|
free(database);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
free(database);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool core_info_list_get_display_name(core_info_list_t *core_info_list,
|
bool core_info_list_get_display_name(core_info_list_t *core_info_list,
|
||||||
const char *path, char *s, size_t len)
|
const char *path, char *s, size_t len)
|
||||||
{
|
{
|
||||||
|
@ -119,6 +119,10 @@ bool core_info_find(core_info_ctx_find_t *info, const char *name);
|
|||||||
|
|
||||||
bool core_info_load(core_info_ctx_find_t *info);
|
bool core_info_load(core_info_ctx_find_t *info);
|
||||||
|
|
||||||
|
bool core_info_database_supports_content_path(const char *database_path, const char *path);
|
||||||
|
|
||||||
|
bool core_info_unsupported_content_path(const char *path);
|
||||||
|
|
||||||
RETRO_END_DECLS
|
RETRO_END_DECLS
|
||||||
|
|
||||||
#endif /* CORE_INFO_H_ */
|
#endif /* CORE_INFO_H_ */
|
||||||
|
@ -23,7 +23,6 @@
|
|||||||
#include <queues/message_queue.h>
|
#include <queues/message_queue.h>
|
||||||
#include <encodings/crc32.h>
|
#include <encodings/crc32.h>
|
||||||
#include <streams/file_stream.h>
|
#include <streams/file_stream.h>
|
||||||
|
|
||||||
#include "tasks_internal.h"
|
#include "tasks_internal.h"
|
||||||
|
|
||||||
#include "../database_info.h"
|
#include "../database_info.h"
|
||||||
@ -35,6 +34,7 @@
|
|||||||
#include "../playlist.h"
|
#include "../playlist.h"
|
||||||
#include "../runloop.h"
|
#include "../runloop.h"
|
||||||
#include "../verbosity.h"
|
#include "../verbosity.h"
|
||||||
|
#include "../core_info.h"
|
||||||
|
|
||||||
#ifndef COLLECTION_SIZE
|
#ifndef COLLECTION_SIZE
|
||||||
#define COLLECTION_SIZE 99999
|
#define COLLECTION_SIZE 99999
|
||||||
@ -206,6 +206,7 @@ static int database_info_list_iterate_new(database_state_handle_t *db_state,
|
|||||||
const char *query)
|
const char *query)
|
||||||
{
|
{
|
||||||
const char *new_database = database_info_get_current_name(db_state);
|
const char *new_database = database_info_get_current_name(db_state);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
RARCH_LOG("Check database [%d/%d] : %s\n", (unsigned)db_state->list_index,
|
RARCH_LOG("Check database [%d/%d] : %s\n", (unsigned)db_state->list_index,
|
||||||
(unsigned)db_state->list->size, new_database);
|
(unsigned)db_state->list->size, new_database);
|
||||||
@ -311,6 +312,7 @@ static int database_info_list_iterate_next(
|
|||||||
static int task_database_iterate_crc_lookup(
|
static int task_database_iterate_crc_lookup(
|
||||||
database_state_handle_t *db_state,
|
database_state_handle_t *db_state,
|
||||||
database_info_handle_t *db,
|
database_info_handle_t *db,
|
||||||
|
const char *name,
|
||||||
const char *archive_entry)
|
const char *archive_entry)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -321,6 +323,11 @@ static int task_database_iterate_crc_lookup(
|
|||||||
if (db_state->entry_index == 0)
|
if (db_state->entry_index == 0)
|
||||||
{
|
{
|
||||||
char query[50] = {0};
|
char query[50] = {0};
|
||||||
|
|
||||||
|
if (!core_info_database_supports_content_path(db_state->list->elems[db_state->list_index].data, name) &&
|
||||||
|
!core_info_unsupported_content_path(name))
|
||||||
|
return database_info_list_iterate_next(db_state);
|
||||||
|
|
||||||
snprintf(query, sizeof(query),
|
snprintf(query, sizeof(query),
|
||||||
"{crc:or(b\"%08X\",b\"%08X\")}",
|
"{crc:or(b\"%08X\",b\"%08X\")}",
|
||||||
swap_if_big32(db_state->crc), swap_if_big32(db_state->archive_crc));
|
swap_if_big32(db_state->crc), swap_if_big32(db_state->archive_crc));
|
||||||
@ -362,7 +369,10 @@ static int task_database_iterate_crc_lookup(
|
|||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
database_info_list_free(db_state->info);
|
database_info_list_free(db_state->info);
|
||||||
free(db_state->info);
|
|
||||||
|
if (db_state->info)
|
||||||
|
free(db_state->info);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -373,7 +383,7 @@ static int task_database_iterate_playlist_archive(
|
|||||||
#ifdef HAVE_COMPRESSION
|
#ifdef HAVE_COMPRESSION
|
||||||
if (db_state->crc != 0)
|
if (db_state->crc != 0)
|
||||||
return task_database_iterate_crc_lookup(
|
return task_database_iterate_crc_lookup(
|
||||||
db_state, db, db_state->archive_name);
|
db_state, db, name, db_state->archive_name);
|
||||||
|
|
||||||
db_state->crc = file_archive_get_file_crc32(name);
|
db_state->crc = file_archive_get_file_crc32(name);
|
||||||
#endif
|
#endif
|
||||||
@ -500,7 +510,7 @@ static int task_database_iterate(database_state_handle_t *db_state,
|
|||||||
case DATABASE_TYPE_SERIAL_LOOKUP:
|
case DATABASE_TYPE_SERIAL_LOOKUP:
|
||||||
return task_database_iterate_serial_lookup(db_state, db, name);
|
return task_database_iterate_serial_lookup(db_state, db, name);
|
||||||
case DATABASE_TYPE_CRC_LOOKUP:
|
case DATABASE_TYPE_CRC_LOOKUP:
|
||||||
return task_database_iterate_crc_lookup(db_state, db, NULL);
|
return task_database_iterate_crc_lookup(db_state, db, name, NULL);
|
||||||
case DATABASE_TYPE_NONE:
|
case DATABASE_TYPE_NONE:
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -561,7 +571,7 @@ static void task_database_handler(retro_task_t *task)
|
|||||||
task_database_iterate_start(dbinfo, name);
|
task_database_iterate_start(dbinfo, name);
|
||||||
break;
|
break;
|
||||||
case DATABASE_STATUS_ITERATE:
|
case DATABASE_STATUS_ITERATE:
|
||||||
if (dbstate && task_database_iterate(dbstate, dbinfo) == 0)
|
if (task_database_iterate(dbstate, dbinfo) == 0)
|
||||||
{
|
{
|
||||||
dbinfo->status = DATABASE_STATUS_ITERATE_NEXT;
|
dbinfo->status = DATABASE_STATUS_ITERATE_NEXT;
|
||||||
dbinfo->type = DATABASE_TYPE_ITERATE;
|
dbinfo->type = DATABASE_TYPE_ITERATE;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user