Fix a bug with outdated festival data

This commit is contained in:
Matt Isenhower
2023-04-22 14:27:55 -07:00
parent 46fdbbe8c7
commit 142f2a82c5
2 changed files with 12 additions and 4 deletions

View File

@@ -38,8 +38,15 @@ export default class ValueCache
return item && item.data;
}
async getCachedAt() {
let item = await this._getRawItem();
return (item && item.cachedAt) ? new Date(item.cachedAt) : null;
}
async setData(data, expires = null) {
let serialized = JSON.stringify({ expires, data }, undefined, 2);
let cachedAt = new Date;
let serialized = JSON.stringify({ expires, data, cachedAt }, undefined, 2);
await mkdirp(path.dirname(this.path));
await fs.writeFile(this.path, serialized);

View File

@@ -81,13 +81,14 @@ export default class FestivalUpdater extends DataUpdater
// We don't need to use the locale for this data
// since localization data retrieval happens elsewhere.
let data = await cache.getData();
let cachedAt = await cache.getCachedAt();
// How long until this festival ends/ended?
// We want to retrieve the latest data until 4 hours after the Splatfest ends
let diff = Date.now() - new Date(node.endTime);
let forceUpdate = (diff < 4 * 60 * 60 * 1000);
let cutoff = new Date(node.endTime);
cutoff.setHours(cutoff.getHours() + 4);
if (forceUpdate || !data) {
if (!data || cachedAt < cutoff) {
this.console.info(`Getting festival details for ${node.id}`);
data = await this.splatnet().getFestDetailData(node.id);
await cache.setData(data);