Files
aklive2d/libs/downloader.js
2024-10-10 15:02:30 +08:00

37 lines
1.4 KiB
JavaScript

/* 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)
const ext = path.extname(filepath)
const basename = path.basename(filepath).replace(ext, '')
filepath = path.join(filepath, "..", `${basename}_${lastCommitDate.getTime()}${ext}`)
const dirpath = path.join(filepath, "..")
console.log(`Last ${basename} commit date: ${lastCommitDate.getTime()}`)
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(dirpath))
for (const file of files) {
if (file.startsWith(basename) && file !== path.basename(filepath)) {
rm(path.join(dirpath, file))
}
}
return data
}
}