diff --git a/README.md b/README.md index 18bac30..579aed6 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,10 @@ To add operator info to README.md $ node runner.js directory To generate directory.json ``` +``` bash +$ node runner.js charword +To generate the latest charword_table.json +``` ### Webpage & JavaScript Add query string `settings` to bring up the settings panel to adjust your settings. Then use appropriate JavaScript code to load your settings diff --git a/Version b/Version index 944880f..15a2799 100644 --- a/Version +++ b/Version @@ -1 +1 @@ -3.2.0 +3.3.0 diff --git a/libs/charword_table.js b/libs/charword_table.js index a9ead73..bba9735 100644 --- a/libs/charword_table.js +++ b/libs/charword_table.js @@ -14,17 +14,34 @@ const NICKNAME = { } export default class CharwordTable { - #operatorIDs = Object.values(__config.operators).map(operator => { return operator.filename.replace(/^(dyn_illust_)(char_[\d]+)(_[\w]+)(|(_.+))$/g, '$2$3$4') }) - #charwordTable = { + #operatorIDs = Object.values(__config.operators).map(operator => { return this.#getOperatorId(operator) }) + #charwordTablePath = path.join(__dirname, __config.folder.operator, __config.folder.share) + #charwordTableFile = path.join(this.#charwordTablePath, 'charword_table.json') + #charwordTable = JSON.parse(readSync(this.#charwordTableFile)) || { config: { default_region: DEFAULT_REGION, regions: REGIONS, }, operators: {}, } - #charwordTablePath = path.join(__dirname, __config.folder.operator, __config.folder.share) - constructor() { + async process() { + await Promise.all(REGIONS.map(async (region) => {await this.#load(region)})) + writeSync(JSON.stringify(this.#charwordTable), this.#charwordTableFile) + } + + lookup(operatorName) { + return { + config: this.#charwordTable.config, + operator: this.#charwordTable.operators[this.#getOperatorId(__config.operators[operatorName])], + } + } + + #getOperatorId(operatorConfig) { + return operatorConfig.filename.replace(/^(dyn_illust_)(char_[\d]+)(_[\w]+)(|(_.+))$/g, '$2$3$4') + } + + async #load(region) { this.#operatorIDs.forEach(id => { this.#charwordTable.operators[id] = { alternativeId: id.replace(/^(char_)([\d]+)(_[\w]+)(|(_.+))$/g, '$1$2$3'), @@ -32,17 +49,11 @@ export default class CharwordTable { info: REGIONS.reduce((acc, cur) => ({ ...acc, [cur]: {} }), {}), // use object to store voice actor info } }) - } - async process() { - await Promise.all(REGIONS.map(async (region) => {await this.#load(region)})) - writeSync(JSON.stringify(this.#charwordTable), path.join(this.#charwordTablePath, 'charword_table.json')) - } - - async #load(region) { if (region === 'zh_TW') { return await this.#zhTWLoad() } + const data = await this.#download(region) // put voice actor info into charword_table diff --git a/libs/file.js b/libs/file.js index c75388c..6335258 100644 --- a/libs/file.js +++ b/libs/file.js @@ -16,7 +16,10 @@ export async function read(filePath, encoding = 'utf8') { } export function readSync(filePath, encoding = 'utf8') { - return fs.readFileSync(filePath, encoding, { flag: 'r' }) + if (exists(filePath)) { + return fs.readFileSync(filePath, encoding, { flag: 'r' }) + } + return null } export function exists(filePath) { diff --git a/runner.js b/runner.js index 4ec41c0..7a5b116 100644 --- a/runner.js +++ b/runner.js @@ -23,6 +23,7 @@ async function main() { const background = new Background() await background.process() const backgrounds = ['operator_bg.png', ...background.files] + const charwordTable = new CharwordTable() directory() @@ -38,10 +39,9 @@ async function main() { for (const [key, _] of Object.entries(__config.operators)) { OPERATOR_NAMES.push(key) } - case 'test': - const charwordTable = new CharwordTable() + case 'charword': await charwordTable.process() - return + process.exit(0) default: break } @@ -85,6 +85,8 @@ async function main() { write(JSON.stringify(content.assetsJson, null), path.join(OPERATOR_SOURCE_FOLDER, OPERATOR_NAME, `${__config.operators[OPERATOR_NAME].filename}.json`)) }) + writeSync(JSON.stringify(charwordTable.lookup(OPERATOR_NAME)), path.join(OPERATOR_SOURCE_FOLDER, OPERATOR_NAME, 'charword_table.json')) + const filesToCopy = [ ...background.getFilesToCopy(SHOWCASE_PUBLIC_ASSSETS_FOLDER), {