static int task_database_iterate( db_handle_t *_db, database_state_handle_t *db_state, database_info_handle_t *db) { const char *name = database_info_get_current_element_name(db); if (!name) return 0; if (database_info_get_type(db) == DATABASE_TYPE_ITERATE) if (path_contains_compressed_file(name)) database_info_set_type(db, DATABASE_TYPE_ITERATE_ARCHIVE); switch (database_info_get_type(db)) { case DATABASE_TYPE_ITERATE: return task_database_iterate_playlist(db_state, db, name); case DATABASE_TYPE_ITERATE_ARCHIVE: return task_database_iterate_playlist_archive(_db, db_state, db, name); case DATABASE_TYPE_ITERATE_LUTRO: return task_database_iterate_playlist_lutro(_db, db_state, db, name); case DATABASE_TYPE_SERIAL_LOOKUP: return task_database_iterate_serial_lookup(_db, db_state, db, name); case DATABASE_TYPE_CRC_LOOKUP: return task_database_iterate_crc_lookup(_db, db_state, db, name, NULL); case DATABASE_TYPE_NONE: default: break; } return 0; }
static int task_database_iterate_playlist( database_state_handle_t *db_state, database_info_handle_t *db, const char *name) { switch (msg_hash_to_file_type(msg_hash_calculate(path_get_extension(name)))) { case FILE_TYPE_COMPRESSED: #ifdef HAVE_COMPRESSION database_info_set_type(db, DATABASE_TYPE_CRC_LOOKUP); /* first check crc of archive itself */ return file_get_crc(db_state, name, &db_state->archive_crc); #else break; #endif case FILE_TYPE_CUE: db_state->serial[0] = '\0'; if (cue_get_serial(db_state, db, name, db_state->serial)) { database_info_set_type(db, DATABASE_TYPE_SERIAL_LOOKUP); } else { database_info_set_type(db, DATABASE_TYPE_CRC_LOOKUP); return file_get_crc(db_state, name, &db_state->crc); } break; case FILE_TYPE_ISO: db_state->serial[0] = '\0'; iso_get_serial(db_state, db, name, db_state->serial); database_info_set_type(db, DATABASE_TYPE_SERIAL_LOOKUP); break; case FILE_TYPE_CHD: db_state->serial[0] = '\0'; if (chd_get_serial(db_state, db, name, db_state->serial)) { database_info_set_type(db, DATABASE_TYPE_SERIAL_LOOKUP); } else { database_info_set_type(db, DATABASE_TYPE_CRC_LOOKUP); return chd_get_crc(db_state, name, &db_state->crc); } break; case FILE_TYPE_LUTRO: database_info_set_type(db, DATABASE_TYPE_ITERATE_LUTRO); break; default: database_info_set_type(db, DATABASE_TYPE_CRC_LOOKUP); return file_get_crc(db_state, name, &db_state->crc); } return 1; }
static int task_database_iterate_playlist( database_state_handle_t *db_state, database_info_handle_t *db, const char *name) { switch (extension_to_file_type(path_get_extension(name))) { case FILE_TYPE_COMPRESSED: #ifdef HAVE_COMPRESSION database_info_set_type(db, DATABASE_TYPE_CRC_LOOKUP); /* first check crc of archive itself */ return intfstream_file_get_crc(name, 0, SIZE_MAX, &db_state->archive_crc); #else break; #endif case FILE_TYPE_CUE: task_database_cue_prune(db, name); db_state->serial[0] = '\0'; if (task_database_cue_get_serial(name, db_state->serial)) database_info_set_type(db, DATABASE_TYPE_SERIAL_LOOKUP); else { database_info_set_type(db, DATABASE_TYPE_CRC_LOOKUP); return task_database_cue_get_crc(name, &db_state->crc); } break; case FILE_TYPE_GDI: gdi_prune(db, name); db_state->serial[0] = '\0'; /* There are no serial databases, so don't bother with serials at the moment */ if (0 && task_database_gdi_get_serial(name, db_state->serial)) database_info_set_type(db, DATABASE_TYPE_SERIAL_LOOKUP); else { database_info_set_type(db, DATABASE_TYPE_CRC_LOOKUP); return task_database_gdi_get_crc(name, &db_state->crc); } break; /* Consider Wii WBFS files similar to ISO files. */ case FILE_TYPE_WBFS: case FILE_TYPE_ISO: db_state->serial[0] = '\0'; intfstream_file_get_serial(name, 0, SIZE_MAX, db_state->serial); database_info_set_type(db, DATABASE_TYPE_SERIAL_LOOKUP); break; case FILE_TYPE_CHD: db_state->serial[0] = '\0'; if (task_database_chd_get_serial(name, db_state->serial)) database_info_set_type(db, DATABASE_TYPE_SERIAL_LOOKUP); else { database_info_set_type(db, DATABASE_TYPE_CRC_LOOKUP); return task_database_chd_get_crc(name, &db_state->crc); } break; case FILE_TYPE_LUTRO: database_info_set_type(db, DATABASE_TYPE_ITERATE_LUTRO); break; default: database_info_set_type(db, DATABASE_TYPE_CRC_LOOKUP); return intfstream_file_get_crc(name, 0, SIZE_MAX, &db_state->crc); } return 1; }