mirror of
https://github.com/stenzek/duckstation.git
synced 2026-02-16 11:24:36 +00:00
GameDatabase: Check timestamp of discsets.yaml
This commit is contained in:
@@ -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<u64>(Host::GetResourceFileTimestamp(GAMEDB_YAML_FILENAME, false).value_or(0));
|
||||
const u64 discsets_ts = static_cast<u64>(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<u64>(Host::GetResourceFileTimestamp(GAMEDB_YAML_FILENAME, false).value_or(0));
|
||||
const u64 discsets_ts = static_cast<u64>(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<u64>(gamedb_ts));
|
||||
writer.WriteU64(gamedb_ts);
|
||||
writer.WriteU64(discsets_ts);
|
||||
|
||||
writer.WriteU32(static_cast<u32>(s_state.disc_sets.size()));
|
||||
writer.WriteU32(static_cast<u32>(s_state.entries.size()));
|
||||
|
||||
Reference in New Issue
Block a user