Don't use settings struct from thrading functions
This commit is contained in:
parent
ff4b260853
commit
6faabfeebf
1 changed files with 33 additions and 16 deletions
|
@ -59,6 +59,8 @@ typedef struct db_handle
|
||||||
database_state_handle_t state;
|
database_state_handle_t state;
|
||||||
database_info_handle_t *handle;
|
database_info_handle_t *handle;
|
||||||
unsigned status;
|
unsigned status;
|
||||||
|
char playlist_directory[4096];
|
||||||
|
char content_database_path[4096];
|
||||||
} db_handle_t;
|
} db_handle_t;
|
||||||
|
|
||||||
static void database_info_set_type(database_info_handle_t *handle, enum database_type type)
|
static void database_info_set_type(database_info_handle_t *handle, enum database_type type)
|
||||||
|
@ -270,6 +272,7 @@ static int database_info_list_iterate_new(database_state_handle_t *db_state,
|
||||||
}
|
}
|
||||||
|
|
||||||
static int database_info_list_iterate_found_match(
|
static int database_info_list_iterate_found_match(
|
||||||
|
db_handle_t *_db,
|
||||||
database_state_handle_t *db_state,
|
database_state_handle_t *db_state,
|
||||||
database_info_handle_t *db,
|
database_info_handle_t *db,
|
||||||
const char *archive_name
|
const char *archive_name
|
||||||
|
@ -280,7 +283,6 @@ static int database_info_list_iterate_found_match(
|
||||||
char db_playlist_base_str[PATH_MAX_LENGTH];
|
char db_playlist_base_str[PATH_MAX_LENGTH];
|
||||||
char entry_path_str[PATH_MAX_LENGTH];
|
char entry_path_str[PATH_MAX_LENGTH];
|
||||||
playlist_t *playlist = NULL;
|
playlist_t *playlist = NULL;
|
||||||
settings_t *settings = config_get_ptr();
|
|
||||||
const char *db_path =
|
const char *db_path =
|
||||||
database_info_get_current_name(db_state);
|
database_info_get_current_name(db_state);
|
||||||
const char *entry_path =
|
const char *entry_path =
|
||||||
|
@ -299,7 +301,7 @@ static int database_info_list_iterate_found_match(
|
||||||
strlcat(db_playlist_base_str,
|
strlcat(db_playlist_base_str,
|
||||||
file_path_str(FILE_PATH_LPL_EXTENSION),
|
file_path_str(FILE_PATH_LPL_EXTENSION),
|
||||||
sizeof(db_playlist_base_str));
|
sizeof(db_playlist_base_str));
|
||||||
fill_pathname_join(db_playlist_path, settings->directory.playlist,
|
fill_pathname_join(db_playlist_path, _db->playlist_directory,
|
||||||
db_playlist_base_str, sizeof(db_playlist_path));
|
db_playlist_base_str, sizeof(db_playlist_path));
|
||||||
|
|
||||||
playlist = playlist_init(db_playlist_path, COLLECTION_SIZE);
|
playlist = playlist_init(db_playlist_path, COLLECTION_SIZE);
|
||||||
|
@ -364,6 +366,7 @@ static int database_info_list_iterate_next(
|
||||||
}
|
}
|
||||||
|
|
||||||
static int task_database_iterate_crc_lookup(
|
static int task_database_iterate_crc_lookup(
|
||||||
|
db_handle_t *_db,
|
||||||
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 *name,
|
||||||
|
@ -411,9 +414,11 @@ static int task_database_iterate_crc_lookup(
|
||||||
#endif
|
#endif
|
||||||
if (db_state->archive_crc == db_info_entry->crc32)
|
if (db_state->archive_crc == db_info_entry->crc32)
|
||||||
return database_info_list_iterate_found_match(
|
return database_info_list_iterate_found_match(
|
||||||
|
_db,
|
||||||
db_state, db, NULL);
|
db_state, db, NULL);
|
||||||
if (db_state->crc == db_info_entry->crc32)
|
if (db_state->crc == db_info_entry->crc32)
|
||||||
return database_info_list_iterate_found_match(
|
return database_info_list_iterate_found_match(
|
||||||
|
_db,
|
||||||
db_state, db, archive_entry);
|
db_state, db, archive_entry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -440,13 +445,14 @@ static int task_database_iterate_crc_lookup(
|
||||||
}
|
}
|
||||||
|
|
||||||
static int task_database_iterate_playlist_archive(
|
static int task_database_iterate_playlist_archive(
|
||||||
|
db_handle_t *_db,
|
||||||
database_state_handle_t *db_state,
|
database_state_handle_t *db_state,
|
||||||
database_info_handle_t *db, const char *name)
|
database_info_handle_t *db, const char *name)
|
||||||
{
|
{
|
||||||
#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, name, db_state->archive_name);
|
_db, 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
|
||||||
|
@ -455,18 +461,18 @@ static int task_database_iterate_playlist_archive(
|
||||||
}
|
}
|
||||||
|
|
||||||
static int task_database_iterate_playlist_lutro(
|
static int task_database_iterate_playlist_lutro(
|
||||||
|
db_handle_t *_db,
|
||||||
database_state_handle_t *db_state,
|
database_state_handle_t *db_state,
|
||||||
database_info_handle_t *db,
|
database_info_handle_t *db,
|
||||||
const char *path)
|
const char *path)
|
||||||
{
|
{
|
||||||
char db_playlist_path[PATH_MAX_LENGTH];
|
char db_playlist_path[PATH_MAX_LENGTH];
|
||||||
playlist_t *playlist = NULL;
|
playlist_t *playlist = NULL;
|
||||||
settings_t *settings = config_get_ptr();
|
|
||||||
|
|
||||||
db_playlist_path[0] = '\0';
|
db_playlist_path[0] = '\0';
|
||||||
|
|
||||||
fill_pathname_join(db_playlist_path,
|
fill_pathname_join(db_playlist_path,
|
||||||
settings->directory.playlist,
|
_db->playlist_directory,
|
||||||
file_path_str(FILE_PATH_LUTRO_PLAYLIST),
|
file_path_str(FILE_PATH_LUTRO_PLAYLIST),
|
||||||
sizeof(db_playlist_path));
|
sizeof(db_playlist_path));
|
||||||
|
|
||||||
|
@ -497,6 +503,7 @@ static int task_database_iterate_playlist_lutro(
|
||||||
|
|
||||||
|
|
||||||
static int task_database_iterate_serial_lookup(
|
static int task_database_iterate_serial_lookup(
|
||||||
|
db_handle_t *_db,
|
||||||
database_state_handle_t *db_state,
|
database_state_handle_t *db_state,
|
||||||
database_info_handle_t *db, const char *name)
|
database_info_handle_t *db, const char *name)
|
||||||
{
|
{
|
||||||
|
@ -534,7 +541,8 @@ static int task_database_iterate_serial_lookup(
|
||||||
db_info_entry->name);
|
db_info_entry->name);
|
||||||
#endif
|
#endif
|
||||||
if (string_is_equal(db_state->serial, db_info_entry->serial))
|
if (string_is_equal(db_state->serial, db_info_entry->serial))
|
||||||
return database_info_list_iterate_found_match(db_state, db, NULL);
|
return database_info_list_iterate_found_match(_db,
|
||||||
|
db_state, db, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -556,7 +564,9 @@ static int task_database_iterate_serial_lookup(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int task_database_iterate(database_state_handle_t *db_state,
|
static int task_database_iterate(
|
||||||
|
db_handle_t *_db,
|
||||||
|
database_state_handle_t *db_state,
|
||||||
database_info_handle_t *db)
|
database_info_handle_t *db)
|
||||||
{
|
{
|
||||||
const char *name = database_info_get_current_element_name(db);
|
const char *name = database_info_get_current_element_name(db);
|
||||||
|
@ -573,13 +583,13 @@ static int task_database_iterate(database_state_handle_t *db_state,
|
||||||
case DATABASE_TYPE_ITERATE:
|
case DATABASE_TYPE_ITERATE:
|
||||||
return task_database_iterate_playlist(db_state, db, name);
|
return task_database_iterate_playlist(db_state, db, name);
|
||||||
case DATABASE_TYPE_ITERATE_ARCHIVE:
|
case DATABASE_TYPE_ITERATE_ARCHIVE:
|
||||||
return task_database_iterate_playlist_archive(db_state, db, name);
|
return task_database_iterate_playlist_archive(_db, db_state, db, name);
|
||||||
case DATABASE_TYPE_ITERATE_LUTRO:
|
case DATABASE_TYPE_ITERATE_LUTRO:
|
||||||
return task_database_iterate_playlist_lutro(db_state, db, name);
|
return task_database_iterate_playlist_lutro(_db, db_state, db, name);
|
||||||
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, db_state, db, name);
|
||||||
case DATABASE_TYPE_CRC_LOOKUP:
|
case DATABASE_TYPE_CRC_LOOKUP:
|
||||||
return task_database_iterate_crc_lookup(db_state, db, name, NULL);
|
return task_database_iterate_crc_lookup(_db, db_state, db, name, NULL);
|
||||||
case DATABASE_TYPE_NONE:
|
case DATABASE_TYPE_NONE:
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -625,9 +635,8 @@ static void task_database_handler(retro_task_t *task)
|
||||||
case DATABASE_STATUS_ITERATE_BEGIN:
|
case DATABASE_STATUS_ITERATE_BEGIN:
|
||||||
if (dbstate && !dbstate->list)
|
if (dbstate && !dbstate->list)
|
||||||
{
|
{
|
||||||
settings_t *settings = config_get_ptr();
|
|
||||||
dbstate->list = dir_list_new_special(
|
dbstate->list = dir_list_new_special(
|
||||||
settings->path.content_database,
|
db->content_database_path,
|
||||||
DIR_LIST_DATABASES, NULL);
|
DIR_LIST_DATABASES, NULL);
|
||||||
}
|
}
|
||||||
dbinfo->status = DATABASE_STATUS_ITERATE_START;
|
dbinfo->status = DATABASE_STATUS_ITERATE_START;
|
||||||
|
@ -640,7 +649,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 (task_database_iterate(dbstate, dbinfo) == 0)
|
if (task_database_iterate(db, 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;
|
||||||
|
@ -694,8 +703,9 @@ task_finished:
|
||||||
bool task_push_dbscan(const char *fullpath,
|
bool task_push_dbscan(const char *fullpath,
|
||||||
bool directory, retro_task_callback_t cb)
|
bool directory, retro_task_callback_t cb)
|
||||||
{
|
{
|
||||||
retro_task_t *t = (retro_task_t*)calloc(1, sizeof(*t));
|
settings_t *settings = config_get_ptr();
|
||||||
db_handle_t *db = (db_handle_t*)calloc(1, sizeof(db_handle_t));
|
retro_task_t *t = (retro_task_t*)calloc(1, sizeof(*t));
|
||||||
|
db_handle_t *db = (db_handle_t*)calloc(1, sizeof(db_handle_t));
|
||||||
|
|
||||||
if (!t || !db)
|
if (!t || !db)
|
||||||
goto error;
|
goto error;
|
||||||
|
@ -704,6 +714,13 @@ bool task_push_dbscan(const char *fullpath,
|
||||||
t->state = db;
|
t->state = db;
|
||||||
t->callback = cb;
|
t->callback = cb;
|
||||||
|
|
||||||
|
strlcpy(db->playlist_directory,
|
||||||
|
settings->directory.playlist,
|
||||||
|
sizeof(db->playlist_directory));
|
||||||
|
strlcpy(db->content_database_path,
|
||||||
|
settings->path.content_database,
|
||||||
|
sizeof(db->content_database_path));
|
||||||
|
|
||||||
if (directory)
|
if (directory)
|
||||||
db->handle = database_info_dir_init(fullpath, DATABASE_TYPE_ITERATE);
|
db->handle = database_info_dir_init(fullpath, DATABASE_TYPE_ITERATE);
|
||||||
else
|
else
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue