mirror of
https://github.com/crystelf/crystelf-core.git
synced 2025-12-05 10:31:56 +00:00
fix:meme服务修复
This commit is contained in:
parent
beebcc14f9
commit
5c062172f3
@ -5,17 +5,15 @@ export interface FsList {
|
||||
code: number;
|
||||
message: string;
|
||||
data: {
|
||||
content:
|
||||
| [
|
||||
name: string,
|
||||
size: number,
|
||||
is_dir: boolean,
|
||||
modified: string, //修改时间
|
||||
sign: string, //签名
|
||||
thumb: string, //略缩图
|
||||
type: number, //类型
|
||||
]
|
||||
| null;
|
||||
content: Array<{
|
||||
name: string;
|
||||
size: number;
|
||||
is_dir: boolean;
|
||||
modified: string; // 修改时间
|
||||
sign: string; // 签名
|
||||
thumb: string; // 略缩图
|
||||
type: number; // 类型
|
||||
}> | null; // 可能为空数组
|
||||
total: number; // 总数
|
||||
readme: string; // 说明?
|
||||
write: boolean; // 是否可写入
|
||||
|
||||
@ -106,6 +106,7 @@ export class OpenListUtils {
|
||||
try {
|
||||
const fileInfo = await this.getFileInfo(token, filePath);
|
||||
const rawUrl = fileInfo.data.raw_url;
|
||||
this.logger.debug(`rawUrl: ${rawUrl}`);
|
||||
if (!rawUrl) {
|
||||
this.logger.error('文件没有找到 raw_url 地址..');
|
||||
throw new Error('文件没有找到 raw_url 地址..');
|
||||
|
||||
@ -8,7 +8,7 @@ import { AppConfigService } from '../../config/config.service';
|
||||
@Injectable()
|
||||
export class MemeService {
|
||||
private readonly logger = new Logger(MemeService.name);
|
||||
private readonly updateMs = 1 * 60 * 1000; // 15min
|
||||
private readonly updateMs = 150 * 60 * 1000; // 15min
|
||||
|
||||
constructor(
|
||||
@Inject(PathService)
|
||||
@ -30,14 +30,15 @@ export class MemeService {
|
||||
try {
|
||||
const remoteFiles =
|
||||
await this.openListService.listFiles(remoteMemePath);
|
||||
this.logger.debug(remoteFiles);
|
||||
if (remoteFiles.code === 200 && remoteFiles.data.content) {
|
||||
const remoteFileList = remoteFiles.data.content;
|
||||
let remoteFileList = remoteFiles.data.content;
|
||||
const localFiles = await this.getLocalFileList(memePath);
|
||||
//this.logger.debug(localFiles);
|
||||
await this.compareAndDownloadFiles(
|
||||
memePath,
|
||||
localFiles,
|
||||
remoteFileList,
|
||||
remoteMemePath,
|
||||
);
|
||||
} else {
|
||||
this.logger.error('获取远程表情仓库文件失败..');
|
||||
@ -57,8 +58,8 @@ export class MemeService {
|
||||
* @private
|
||||
*/
|
||||
private async getLocalFileList(dir: string): Promise<string[]> {
|
||||
const files: string[] = []; //文件
|
||||
const dirs: string[] = []; //目录
|
||||
const files: string[] = [];
|
||||
const dirs: string[] = [];
|
||||
try {
|
||||
const entries = await fs.readdir(dir, { withFileTypes: true });
|
||||
for (const entry of entries) {
|
||||
@ -80,37 +81,57 @@ export class MemeService {
|
||||
}
|
||||
|
||||
/**
|
||||
* 比较本地文件和远程文件,并下载缺失的文件
|
||||
* 比较本地文件和远程文件 下载缺失的文件
|
||||
* @param localPath 本地路径
|
||||
* @param localFiles 本地文件列表
|
||||
* @param remoteFiles 远程文件列表
|
||||
* @param remoteMemePath 远程基准路径
|
||||
* @private
|
||||
*/
|
||||
private async compareAndDownloadFiles(
|
||||
localPath: string,
|
||||
localFiles: string[],
|
||||
remoteFiles: any[],
|
||||
remoteMemePath: string,
|
||||
) {
|
||||
for (const remoteFile of remoteFiles) {
|
||||
const remoteFilePath = path.join(localPath, remoteFile.name);
|
||||
if (remoteFile.is_dir) {
|
||||
await fs.mkdir(remoteFilePath, { recursive: true });
|
||||
this.logger.log(`文件夹已创建: ${remoteFile.name}`);
|
||||
await this.compareAndDownloadFiles(
|
||||
remoteFilePath,
|
||||
[],
|
||||
remoteFile.content,
|
||||
let relativePath = path.relative(remoteMemePath, remoteFile.path);
|
||||
relativePath = relativePath.replace(/D:\\alist\\crystelf\\meme/g, '');
|
||||
const localFilePath = path.join(
|
||||
localPath,
|
||||
relativePath.replace(/\\/g, '/'),
|
||||
);
|
||||
} else if (!localFiles.includes(remoteFilePath)) {
|
||||
this.logger.log(`文件缺失: ${remoteFile.name},开始下载..`);
|
||||
if (remoteFile.is_dir) {
|
||||
try {
|
||||
const localDirPath = path.dirname(localFilePath);
|
||||
await fs.mkdir(localDirPath, { recursive: true });
|
||||
this.logger.log(`文件夹已创建: ${localDirPath}`);
|
||||
const subRemoteFiles = await this.openListService.listFiles(
|
||||
remoteFile.path,
|
||||
);
|
||||
if (subRemoteFiles.code === 200 && subRemoteFiles.data.content) {
|
||||
await this.compareAndDownloadFiles(
|
||||
localPath,
|
||||
[],
|
||||
subRemoteFiles.data.content,
|
||||
remoteMemePath,
|
||||
);
|
||||
}
|
||||
} catch (error) {
|
||||
this.logger.error(`创建文件夹失败: ${remoteFile.path}`, error);
|
||||
}
|
||||
} else {
|
||||
if (!localFiles.includes(localFilePath)) {
|
||||
this.logger.log(`文件缺失: ${remoteFile.path}, 开始下载..`);
|
||||
try {
|
||||
await this.openListService.downloadFile(
|
||||
remoteFile.raw_url,
|
||||
remoteFilePath,
|
||||
remoteFile.path,
|
||||
localFilePath,
|
||||
);
|
||||
this.logger.log(`文件下载成功: ${remoteFile.name}`);
|
||||
this.logger.log(`文件下载成功: ${remoteFile.path}`);
|
||||
} catch (error) {
|
||||
this.logger.error(`下载文件失败: ${remoteFile.name}`, error);
|
||||
this.logger.error(`下载文件失败: ${remoteFile.path}`, error);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user