mirror of
https://github.com/ZZZure/ZZZ-Plugin.git
synced 2025-12-16 13:17:32 +00:00
105 lines
2.8 KiB
JavaScript
105 lines
2.8 KiB
JavaScript
import _ from 'lodash';
|
|
import { pluginName } from '../lib/path.js';
|
|
import { mdLogLineToHTML } from '../utils/data.js';
|
|
|
|
let Update = null;
|
|
try {
|
|
Update = (await import('../../other/update.js').catch(e => null))?.update;
|
|
Update ||= (await import('../../system/apps/update.ts')).update;
|
|
} catch (e) {
|
|
logger.error(
|
|
`[${pluginName}]未获取到更新js ${logger.yellow('更新功能')} 将无法使用`
|
|
);
|
|
}
|
|
let ZZZUpdate = null;
|
|
/**
|
|
* @typedef {Object} CommitLog
|
|
* @property {string} commit 提交ID
|
|
* @property {string} date 提交时间
|
|
* @property {string} msg 提交信息
|
|
* @property {boolean} local 是否本地记录
|
|
* @property {current} boolean 是否当前版本
|
|
*/
|
|
/**
|
|
* @typedef {Object} UpdateInfo
|
|
* @property {boolean} hasUpdate 是否有更新
|
|
* @property {CommitLog[]} logs 更新日志
|
|
*/
|
|
if (Update) {
|
|
ZZZUpdate = class ZZZUpdate extends Update {
|
|
async handleLog(remote = false) {
|
|
let cmdStr = 'git log -100 --pretty="%h||%cd||%s" --date=format:"%F %T"';
|
|
if (remote) {
|
|
cmdStr =
|
|
'git log -100 --pretty="%h||%cd||%s" --date=format:"%F %T" origin/main';
|
|
}
|
|
const cm = await this.exec(cmdStr, pluginName);
|
|
if (cm.error) {
|
|
throw new Error(cm.error.message);
|
|
}
|
|
|
|
const logAll = cm.stdout.split('\n');
|
|
if (!logAll.length) {
|
|
throw new Error('未获取到更新日志');
|
|
}
|
|
/** @type CommitLog[] */
|
|
const log = [];
|
|
let current = true;
|
|
for (let str of logAll) {
|
|
str = str.split('||');
|
|
if (str[0] === this.oldCommitId) break;
|
|
if (str[2].includes('Merge')) continue;
|
|
/** @type CommitLog */
|
|
const commit = {
|
|
commit: str[0],
|
|
date: str[1],
|
|
msg: mdLogLineToHTML(str[2]),
|
|
local: !remote,
|
|
current: false,
|
|
};
|
|
if (!remote && current) {
|
|
commit.current = true;
|
|
current = false;
|
|
}
|
|
log.push(commit);
|
|
}
|
|
return log;
|
|
}
|
|
async getZZZLog() {
|
|
const log = await this.handleLog();
|
|
return log;
|
|
}
|
|
|
|
async getZZZRemoteLog() {
|
|
const log = await this.handleLog(true);
|
|
return log;
|
|
}
|
|
|
|
async getZZZAllLog() {
|
|
const localLog = await this.getZZZLog();
|
|
const remoteLog = await this.getZZZRemoteLog();
|
|
const logs = _.unionBy(localLog, remoteLog, 'commit');
|
|
logs.sort((a, b) => {
|
|
return new Date(b.date) - new Date(a.date);
|
|
});
|
|
return logs;
|
|
}
|
|
|
|
async hasUpdate() {
|
|
const logs = await this.getZZZAllLog();
|
|
const newLogs = logs.filter(log => !log.local);
|
|
/** @type UpdateInfo */
|
|
let result = {
|
|
hasUpdate: false,
|
|
logs: [],
|
|
};
|
|
if (newLogs.length) {
|
|
result.hasUpdate = true;
|
|
result.logs = newLogs;
|
|
}
|
|
return result;
|
|
}
|
|
};
|
|
}
|
|
|
|
export { ZZZUpdate };
|