cadb
Version:
安卓/鸿蒙系统截图/录屏工具
217 lines (202 loc) • 5.64 kB
JavaScript
/**
* Created by Niki on 2025/12/4
* 将最近 15 分钟内下载的 p7b 证书移动到 ztrip-harmony 指定 keystore 目录
*/
const program = require('commander');
const fs = require('fs');
const path = require('path');
const {ztripHarmony, logRed, logGreen} = require('../common/constants');
const {
getSystemHomePath,
loadOrCollectProjectPathBatch,
} = require('../common/utils');
const ZTRIP_PREFIX = 'ztrip_harmonynext_adhoc';
const TRAVEL_PREFIX = 'travel_harmonynext_adhoc';
const ZTRIP_PREFIX_DEBUG = 'ztrip_harmonynext_debug';
const TRAVEL_PREFIX_DEBUG = 'travel_harmonynext_debug';
const P7B_EXT = '.p7b';
const VALID_MS = 15 * 60 * 1000; // 15分钟
program
.option('-c --noCache', 'drop local project path cache')
.action(args => {
run(args);
})
.parse(process.argv);
async function run(args) {
const downloadsDir = getDownloadsDir();
ensureDownloadsDirExists(downloadsDir);
precleanStandardFiles(downloadsDir);
const ztripHarmonyPath = await resolveZtripHarmonyPath(args);
const candidates = collectCandidates(downloadsDir);
if (candidates.length <= 0) {
logRed('未找到匹配的 p7b 证书文件');
setTimeout(() => process.exit(0), 100);
return;
}
const now = Date.now();
let movedCount = 0;
for (const candidate of candidates) {
const {name, full, birthtimeMs} = candidate;
if (!isWithinValidWindow(birthtimeMs, now)) {
logRed(`文件无效(超过15分钟): ${name}`);
continue;
}
const destInfo = getDestInfo(name, ztripHarmonyPath);
if (!destInfo) {
logRed(`未知前缀文件, 跳过: ${name}`);
continue;
}
const {destDir, canonicalBaseName} = destInfo;
const moved = moveToTarget(full, destDir, canonicalBaseName);
if (moved) {
logGreen(`已移动: ${name} -> ${destDir}`);
movedCount++;
}
}
if (movedCount <= 0) {
logRed('未有符合条件的证书被移动');
}
setTimeout(() => process.exit(0), 100);
}
function getDownloadsDir() {
return path.join(getSystemHomePath(), 'Downloads');
}
function ensureDownloadsDirExists(downloadsDir) {
if (!fs.existsSync(downloadsDir)) {
logRed(`未找到下载目录: ${downloadsDir}`);
process.exit(1);
}
}
function precleanStandardFiles(downloadsDir) {
const canonicalNames = [
`${TRAVEL_PREFIX}${P7B_EXT}`,
`${ZTRIP_PREFIX}${P7B_EXT}`,
`${TRAVEL_PREFIX_DEBUG}${P7B_EXT}`,
`${ZTRIP_PREFIX_DEBUG}${P7B_EXT}`,
];
for (const base of canonicalNames) {
const filePath = path.join(downloadsDir, base);
try {
if (fs.existsSync(filePath)) {
fs.unlinkSync(filePath);
logGreen(`已清理下载目录旧文件: ${base}`);
}
} catch (e) {
// ignore
}
}
}
async function resolveZtripHarmonyPath(args) {
const {noCache} = args || {};
const [ztripHarmonyPath] = await loadOrCollectProjectPathBatch(
[ztripHarmony],
noCache,
);
return ztripHarmonyPath;
}
function collectCandidates(downloadsDir) {
const fileNames = fs.readdirSync(downloadsDir);
if (!fileNames || fileNames.length === 0) {
logRed('下载目录为空, 未找到任何证书文件');
return [];
}
return fileNames
.filter(name => {
const lower = name.toLowerCase();
return (
(lower.startsWith(ZTRIP_PREFIX) ||
lower.startsWith(TRAVEL_PREFIX) ||
lower.startsWith(ZTRIP_PREFIX_DEBUG) ||
lower.startsWith(TRAVEL_PREFIX_DEBUG)) &&
lower.endsWith(P7B_EXT)
);
})
.map(name => {
const full = path.join(downloadsDir, name);
try {
const stat = fs.statSync(full);
return {name, full, birthtimeMs: stat.birthtimeMs};
} catch (e) {
return null;
}
})
.filter(Boolean);
}
function isWithinValidWindow(birthtimeMs, now) {
return now - birthtimeMs <= VALID_MS;
}
function getDestInfo(name, ztripHarmonyPath) {
const lower = name.toLowerCase();
if (lower.startsWith(ZTRIP_PREFIX)) {
return {
destDir: path.join(
ztripHarmonyPath,
'app_config',
'default',
'adhoc',
'keystore',
),
canonicalBaseName: `${ZTRIP_PREFIX}${P7B_EXT}`,
};
}
if (lower.startsWith(TRAVEL_PREFIX)) {
return {
destDir: path.join(
ztripHarmonyPath,
'app_config',
'travel',
'adhoc',
'keystore',
),
canonicalBaseName: `${TRAVEL_PREFIX}${P7B_EXT}`,
};
}
if (lower.startsWith(ZTRIP_PREFIX_DEBUG)) {
return {
destDir: path.join(
ztripHarmonyPath,
'app_config',
'default',
'default',
'keystore',
),
canonicalBaseName: `${ZTRIP_PREFIX_DEBUG}${P7B_EXT}`,
};
}
if (lower.startsWith(TRAVEL_PREFIX_DEBUG)) {
return {
destDir: path.join(
ztripHarmonyPath,
'app_config',
'travel',
'default',
'keystore',
),
canonicalBaseName: `${TRAVEL_PREFIX_DEBUG}${P7B_EXT}`,
};
}
return null;
}
function moveToTarget(sourceFullPath, destDir, canonicalBaseName) {
try {
if (!fs.existsSync(destDir)) {
fs.mkdirSync(destDir, {recursive: true});
}
const target = path.join(destDir, canonicalBaseName);
if (fs.existsSync(target)) {
fs.unlinkSync(target);
}
fs.renameSync(sourceFullPath, target);
if (fs.existsSync(sourceFullPath)) {
try {
fs.unlinkSync(sourceFullPath);
} catch (e) {}
}
return true;
} catch (err) {
logRed(
`移动失败: ${path.basename(sourceFullPath)}, ${err?.message || err}`,
);
return false;
}
}