diff --git a/src/core/game_database.cpp b/src/core/game_database.cpp index b4849f094..e08d08539 100644 --- a/src/core/game_database.cpp +++ b/src/core/game_database.cpp @@ -40,7 +40,7 @@ namespace GameDatabase { enum : u32 { GAME_DATABASE_CACHE_SIGNATURE = 0x45434C48, - GAME_DATABASE_CACHE_VERSION = 30, + GAME_DATABASE_CACHE_VERSION = 31, }; static const Entry* GetEntryForId(std::string_view code); @@ -1084,19 +1084,21 @@ bool GameDatabase::LoadFromCache() } BinarySpanReader reader(db_data->cspan()); - const u64 gamedb_ts = Host::GetResourceFileTimestamp("gamedb.yaml", false).value_or(0); + const u64 gamedb_ts = static_cast(Host::GetResourceFileTimestamp(GAMEDB_YAML_FILENAME, false).value_or(0)); + const u64 discsets_ts = static_cast(Host::GetResourceFileTimestamp(DISCSETS_YAML_FILENAME, false).value_or(0)); u32 signature, version, num_disc_set_entries, num_entries, num_codes; - u64 file_gamedb_ts; + u64 file_gamedb_ts, file_discsets_ts; if (!reader.ReadU32(&signature) || !reader.ReadU32(&version) || !reader.ReadU64(&file_gamedb_ts) || - !reader.ReadU32(&num_disc_set_entries) || !reader.ReadU32(&num_entries) || !reader.ReadU32(&num_codes) || - signature != GAME_DATABASE_CACHE_SIGNATURE || version != GAME_DATABASE_CACHE_VERSION) + !reader.ReadU64(&file_discsets_ts) || !reader.ReadU32(&num_disc_set_entries) || !reader.ReadU32(&num_entries) || + !reader.ReadU32(&num_codes) || signature != GAME_DATABASE_CACHE_SIGNATURE || + version != GAME_DATABASE_CACHE_VERSION) { DEV_LOG("Cache header is corrupted or version mismatch."); return false; } - if (gamedb_ts != file_gamedb_ts) + if (gamedb_ts != file_gamedb_ts || discsets_ts != file_discsets_ts) { DEV_LOG("Cache is out of date, recreating."); return false; @@ -1204,7 +1206,8 @@ bool GameDatabase::LoadFromCache() bool GameDatabase::SaveToCache() { - const u64 gamedb_ts = Host::GetResourceFileTimestamp("gamedb.yaml", false).value_or(0); + const u64 gamedb_ts = static_cast(Host::GetResourceFileTimestamp(GAMEDB_YAML_FILENAME, false).value_or(0)); + const u64 discsets_ts = static_cast(Host::GetResourceFileTimestamp(DISCSETS_YAML_FILENAME, false).value_or(0)); Error error; FileSystem::AtomicRenamedFile file = FileSystem::CreateAtomicRenamedFile(GetCacheFile(), &error); @@ -1217,7 +1220,8 @@ bool GameDatabase::SaveToCache() BinaryFileWriter writer(file.get()); writer.WriteU32(GAME_DATABASE_CACHE_SIGNATURE); writer.WriteU32(GAME_DATABASE_CACHE_VERSION); - writer.WriteU64(static_cast(gamedb_ts)); + writer.WriteU64(gamedb_ts); + writer.WriteU64(discsets_ts); writer.WriteU32(static_cast(s_state.disc_sets.size())); writer.WriteU32(static_cast(s_state.entries.size()));