Skip to content

Commit

Permalink
Retrieve localizations in parallel
Browse files Browse the repository at this point in the history
  • Loading branch information
misenhower committed Nov 21, 2024
1 parent 8054490 commit 10c082a
Show file tree
Hide file tree
Showing 4 changed files with 89 additions and 22 deletions.
18 changes: 10 additions & 8 deletions app/data/updaters/DataUpdater.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ import { Console } from 'node:console';
import mkdirp from 'mkdirp';
import jsonpath from 'jsonpath';
import ical from 'ical-generator';
import pFilter from 'p-filter';
import prefixedConsole from '../../common/prefixedConsole.mjs';
import SplatNet3Client from '../../splatnet/SplatNet3Client.mjs';
import ImageProcessor from '../ImageProcessor.mjs';
import NsoClient from '../../splatnet/NsoClient.mjs';
import { locales, regionalLocales, defaultLocale } from '../../../src/common/i18n.mjs';
import { LocalizationProcessor } from '../LocalizationProcessor.mjs';
import { deriveId, getDateParts, getTopOfCurrentHour } from '../../common/util.mjs';

export default class DataUpdater
{
name = null;
Expand Down Expand Up @@ -135,16 +135,18 @@ export default class DataUpdater
}

// Retrieve data for missing languages
for (let locale of this.locales.filter(l => l !== initialLocale)) {
processor = new LocalizationProcessor(locale, this.localizations);

if (await processor.hasMissingLocalizations(data)) {
this.console.info(`Retrieving localized data for ${locale.code}`);
let processors = this.locales.filter(l => l !== initialLocale)
.map(l => new LocalizationProcessor(l, this.localizations));
let missing = await pFilter(processors, p => p.hasMissingLocalizations(data));

let regionalData = await this.getData(locale);
if (missing.length > 0) {
await Promise.all(missing.map(async (processor) => {
let regionalData = await this.getData(processor.locale);
this.deriveIds(regionalData);
await processor.updateLocalizations(regionalData);
}

this.console.info(`Retrieved localized data for: ${processor.locale.code}`);
}));
}
}

Expand Down
11 changes: 8 additions & 3 deletions app/splatnet/SplatNet3Client.mjs
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
import fs from 'fs/promises';
import pLimit from 'p-limit';
import ValueCache from '../common/ValueCache.mjs';
import prefixedConsole from '../common/prefixedConsole.mjs';

export const SPLATNET3_WEB_SERVICE_ID = '4834290508791808';

// Concurrent request limit
const limit = pLimit(5);

export default class SplatNet3Client
{
baseUrl = 'https://api.lp1.av5ja.srv.nintendo.net';
Expand Down Expand Up @@ -108,17 +112,18 @@ export default class SplatNet3Client

async getGraphQL(body = {}) {
await this._maybeStartSession();
let webViewVersion = await this._webViewVersion();

let response = await fetch(this.baseUrl + '/api/graphql', {
let response = await limit(() => fetch(this.baseUrl + '/api/graphql', {
method: 'POST',
headers: {
'Authorization': `Bearer ${this.bulletToken.bulletToken}`,
'X-Web-View-Ver': await this._webViewVersion(),
'X-Web-View-Ver': webViewVersion,
'Content-Type': 'application/json',
'Accept-Language': this.acceptLanguage,
},
body: JSON.stringify(body),
});
}));

if (!response.ok) {
throw new Error(`Invalid GraphQL response code: ${response.status}`);
Expand Down
80 changes: 69 additions & 11 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@
"masto": "^6.7.0",
"mkdirp": "^1.0.4",
"nxapi": "^1.4.0",
"p-filter": "^4.1.0",
"p-limit": "^6.1.0",
"p-queue": "^8.0.1",
"pinia": "^2.0.22",
"puppeteer-core": "^23.8.0",
Expand Down

0 comments on commit 10c082a

Please sign in to comment.