feat(aklive2d): add a downloader lib
This commit is contained in:
7
.vscode/launch.json
vendored
7
.vscode/launch.json
vendored
@@ -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}"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
36
libs/downloader.js
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user