forked from mirror/MCSM-Daemon
76 lines
2.3 KiB
JavaScript
76 lines
2.3 KiB
JavaScript
const path = require("path");
|
|
const fs = require("fs");
|
|
const compressing = require("compressing");
|
|
const fsex = require("fs-extra");
|
|
// const os = require('os');
|
|
|
|
// 此处使用临时解决方案
|
|
// let SYSTEM_CODE = null;
|
|
// if (os.platform() == "win32")
|
|
const SYSTEM_CODE = "GBK";
|
|
// else
|
|
// SYSTEM_CODE = 'UTF-8';
|
|
|
|
// 任务参数获取
|
|
const argv = process.argv;
|
|
const realArgv = argv.filter((val, index) => {
|
|
return index >= 2;
|
|
});
|
|
|
|
// 特殊文件操作子进程
|
|
// 为了防止用户解压/压缩/删除 文件数量过大导致整个面板反应速度下降或者无反应
|
|
// 所有耗时的文件操作(除非异步)均写入此。
|
|
if (realArgv.length >= 1) {
|
|
const ACTION = realArgv[0];
|
|
|
|
//解压子进程开始执行
|
|
if (ACTION === "extract") {
|
|
//执行解压
|
|
const absPath = realArgv[1];
|
|
//目录名与原文件同名
|
|
const zipExtractDir = path.normalize(path.dirname(absPath) + "/解压文件_" + path.basename(absPath, path.extname(absPath)));
|
|
// 创建目标目录
|
|
try {
|
|
fs.mkdirSync(zipExtractDir);
|
|
} catch (ignore) {
|
|
// 忽略创建目录错误
|
|
}
|
|
// 进行解压操作
|
|
compressing.zip
|
|
.uncompress(absPath, zipExtractDir, {
|
|
zipFileNameEncoding: SYSTEM_CODE
|
|
})
|
|
.then(() => {
|
|
// BUG note: 此处无法使用 MCSM 全局变量,此为额外任务子进程。感谢 @ColorfulGhost
|
|
console.log("解压任务", absPath, "成功.");
|
|
})
|
|
.catch((err) => {
|
|
console.log("解压任务", absPath, "失败,原因:\n", err);
|
|
});
|
|
}
|
|
|
|
// 文件删除子进程开始执行
|
|
// 此进程用于删除大量文件时使用,以防造成面板卡顿
|
|
if (ACTION === "remove") {
|
|
fsex.removeSync(realArgv[1]);
|
|
}
|
|
|
|
// 文件压缩子进程
|
|
// 此压缩库支持异步写法,但以防不测,依然列入子进程
|
|
if (ACTION === "compress") {
|
|
const absPath = realArgv[1];
|
|
const compressZipPath = path.normalize(path.dirname(absPath) + "/压缩文件_" + path.basename(absPath) + ".zip");
|
|
// 进行压缩操作
|
|
compressing.zip
|
|
.compressDir(absPath, compressZipPath, {
|
|
zipFileNameEncoding: SYSTEM_CODE
|
|
})
|
|
.then(() => {
|
|
console.log("压缩任务", absPath, "成功.");
|
|
})
|
|
.catch((err) => {
|
|
console.log("压缩任务", absPath, "失败,原因:\n", err);
|
|
});
|
|
}
|
|
}
|