feat(aklive2d): add a downloader lib

This commit is contained in:
Haoyu Xu
2023-06-24 09:18:06 -04:00
parent 0ab19ad130
commit 58c16d061e
3 changed files with 45 additions and 25 deletions

7
.vscode/launch.json vendored
View File

@@ -48,6 +48,13 @@
"request": "launch", "request": "launch",
"command": "pnpm run vite:directory:dev", "command": "pnpm run vite:directory:dev",
"cwd": "${workspaceFolder}" "cwd": "${workspaceFolder}"
},
{
"type": "node-terminal",
"name": "Run Script: charword",
"request": "launch",
"command": "pnpm run charword",
"cwd": "${workspaceFolder}"
} }
] ]
} }

View File

@@ -1,8 +1,8 @@
/* eslint-disable no-undef */ /* eslint-disable no-undef */
import fetch from "node-fetch"
import path from "path" import path from "path"
import dotenv from "dotenv" import dotenv from "dotenv"
import { exists, writeSync, readdirSync, rm, readSync } from "./file.js" import { exists, writeSync, readdirSync, rm, readSync } from "./file.js"
import Downloader from "./downloader.js"
dotenv.config() dotenv.config()
@@ -121,30 +121,7 @@ export default class CharwordTable {
} }
async #download(region) { async #download(region) {
const historyResponse = await fetch(`https://api.github.com/repos/Kengxxiao/ArknightsGameData/commits?path=${region}/gamedata/excel/charword_table.json`) return await (new Downloader()).github(`https://api.github.com/repos/Kengxxiao/ArknightsGameData/commits?path=${region}/gamedata/excel/charword_table.json`, `https://raw.githubusercontent.com/Kengxxiao/ArknightsGameData/master/${region}/gamedata/excel/charword_table.json`, path.join(this.#charwordTablePath, `charword_table_${region}.json`))
const historyData = await historyResponse.json()
const lastCommit = historyData[0]
const lastCommitDate = new Date(lastCommit.commit.committer.date)
const filepath = path.join(this.#charwordTablePath, `charword_table_${region}_${lastCommitDate.getTime()}.json`)
console.log(`Last commit date: ${lastCommitDate.getTime()}`)
if (exists(filepath)) {
console.log(`charword_table_${region}.json is the latest version.`)
return JSON.parse(readSync(filepath))
}
const response = await fetch(`https://raw.githubusercontent.com/Kengxxiao/ArknightsGameData/master/${region}/gamedata/excel/charword_table.json`)
const data = await response.json()
writeSync(JSON.stringify(data), filepath)
console.log(`charword_table_${region}.json is updated.`)
// remove old file
const files = readdirSync(path.join(__projectRoot, __config.folder.operator, __config.folder.share))
for (const file of files) {
if (file.startsWith(`charword_table_${region}`) && file !== path.basename(filepath)) {
rm(path.join(__projectRoot, __config.folder.operator, __config.folder.share, file))
}
}
return data
} }
async #zhCNLoad() { async #zhCNLoad() {

36
libs/downloader.js Normal file
View File

@@ -0,0 +1,36 @@
/* eslint-disable no-undef */
import fetch from "node-fetch"
import path from "path"
import { exists, writeSync, readdirSync, rm, readSync } from "./file.js"
export default class Downloader {
async github(history_url, raw_url, filepath) {
const historyResponse = await fetch(history_url)
const historyData = await historyResponse.json()
const lastCommit = historyData[0]
const lastCommitDate = new Date(lastCommit.commit.committer.date)
console.log(`Last commit date: ${lastCommitDate.getTime()}`)
const basename = path.basename(filepath)
const ext = path.extname(filepath)
filepath = path.join(filepath, "..", `${basename}_${lastCommitDate.getTime()}${ext}`)
if (exists(filepath)) {
console.log(`${basename} is the latest version.`)
return JSON.parse(readSync(filepath))
}
const response = await fetch(raw_url)
const data = await response.json()
writeSync(JSON.stringify(data), filepath)
console.log(`${basename} is updated.`)
// remove old file
const files = readdirSync(path.join(__projectRoot, __config.folder.operator, __config.folder.share))
for (const file of files) {
if (file.startsWith(basename) && file !== path.basename(filepath)) {
rm(path.join(__projectRoot, __config.folder.operator, __config.folder.share, file))
}
}
return data
}
}