mirror of
https://github.com/GiriNeko/YesPlayMusic.git
synced 2025-12-16 21:28:06 +00:00
feat: unified script
This commit is contained in:
parent
9eb1417ada
commit
854c282599
2 changed files with 11 additions and 7 deletions
103
script/pull.js
Normal file
103
script/pull.js
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
// node module
|
||||
const fs = require("fs");
|
||||
const https = require("https");
|
||||
const resolve = require("path").resolve;
|
||||
const join = require("path").resolve;
|
||||
const extract = require("extract-zip");
|
||||
|
||||
// 函数参数
|
||||
const dest = resolve(__dirname, "../");
|
||||
const fileName = "NeteaseCloudMusicApi-master.zip";
|
||||
const options = {
|
||||
hostname: "github.91chifun.workers.dev",
|
||||
path: `//https://github.com/Binaryify/NeteaseCloudMusicApi/archive/master.zip`,
|
||||
};
|
||||
|
||||
// 完整的流程控制
|
||||
/**
|
||||
* 1. 检查本地文件是否已有
|
||||
* 2. 下载默认/指定版本的 zip 压缩包,等待下载
|
||||
* 3. 解压缩
|
||||
* 4. 进入目录安装依赖 npm install
|
||||
*/
|
||||
|
||||
function fix2(number) {
|
||||
return number.toFixed(2);
|
||||
}
|
||||
|
||||
async function download(options, fileName, callback) {
|
||||
return await new Promise((resolve, reject) => {
|
||||
const destPath = join(__dirname, "../" + fileName);
|
||||
// Check if exist
|
||||
if (fs.existsSync(destPath)) return resolve(destPath);
|
||||
|
||||
const file = fs.createWriteStream(destPath);
|
||||
const request = https.get(options, (res) => {
|
||||
let len = res.headers && parseInt(res.headers["content-length"], 10);
|
||||
let cur = 0;
|
||||
// 1048576 - bytes in 1Megabyte
|
||||
const MEGA = 1048576;
|
||||
let total = 0;
|
||||
if (len) {
|
||||
total = len / MEGA;
|
||||
}
|
||||
if (!len) {
|
||||
console.log(
|
||||
"Downloading, but can not get content-length, please be patient."
|
||||
);
|
||||
}
|
||||
res.on("data", (chunk) => {
|
||||
if (len) {
|
||||
cur += chunk.length;
|
||||
console.log(
|
||||
`Downloading ${fix2((100.0 * cur) / len)}% ${fix2(
|
||||
cur / MEGA
|
||||
)}/${fix2(total)}mb`
|
||||
);
|
||||
}
|
||||
});
|
||||
res.on("end", () => {
|
||||
callback("Downloading complete!");
|
||||
});
|
||||
res.pipe(file);
|
||||
file.on("finish", () => {
|
||||
file.close(() => {
|
||||
callback("File wrote complete!");
|
||||
resolve(destPath);
|
||||
});
|
||||
});
|
||||
file.on("error", (err) => {
|
||||
fs.unlink(destPath);
|
||||
reject(err);
|
||||
});
|
||||
request.on("error", (err) => {
|
||||
console.log("Error: " + err.message);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async function unzip(source, target) {
|
||||
try {
|
||||
await extract(source, {
|
||||
dir: target,
|
||||
});
|
||||
console.log("Extraction complete");
|
||||
return true;
|
||||
} catch (err) {
|
||||
// handle any errors
|
||||
if (err.message === "end of central directory record signature not found") {
|
||||
console.log("Not a full_downloaded zip file, removed!");
|
||||
fs.unlinkSync(source);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// Download process
|
||||
download(options, fileName, (text) => {
|
||||
console.log(text);
|
||||
}).then((path) => {
|
||||
console.log(path);
|
||||
// Unzip process
|
||||
return unzip(path, dest);
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue