- 任务右键菜单:实现打开输出目录(inputs/outputs/.cache 结构)、
复制资源链接、重新编辑、再次生成、拉取结果、重新下载、收藏、删除记录
- 主进程下载:通过 Electron net 模块绕过 CORS,支持 CDN 媒体文件下载
- sharp 缩略图:替换 nativeImage,支持 4K/8K+ 大尺寸素材的流式处理
- IPC 精简:40+ 冗余通道 → 15 个分组通道,移除未使用的 preload 桥接方法
- 任务存储:新增收藏字段、schema 迁移、task-store 持久化
- 清理废弃模块:canvas-ipc / updater / request / pricing
refactor: IPC/Preload/Services 模块化拆分 — 单一职责 + 向后兼容
主要变更:
- shared/constants/ipc-channels.ts → ipc/ 模块 (base/storage/canvas/updater)
- electron/preload.ts → preload/ 模块 (base/safe-storage/file-storage/canvas)
- electron/main/ipc/canvas-ipc.ts → canvas/ 模块 (types/walk/sidecar/mime/thumbnail)
- electron/main/ipc/storage-ipc.ts → 提取 utils/ (path/download/thumbnail)
- electron/main/updater.ts → updater/ 模块 (provider/platform-updaters)
- src/services/request.ts → request/ 模块 (token/interceptors/methods)
- src/shared/utils/pricing.ts → pricing/ 模块 (types/helpers/format/calculate/fields)
- src/modules/home/center/views/ModelInputForm.tsx → 提取 utils + DependentFormItem
架构优化:
- 所有拆分均保持向后兼容(旧导入路径仍可用)
- TypeScript 编译通过 ✓
- 每个模块单一职责,平均 ~130 行
103 lines
3.4 KiB
TypeScript
103 lines
3.4 KiB
TypeScript
// ============================================================
|
||
// platform-updaters.ts — 平台特定 Updater
|
||
//
|
||
// 覆盖 getUpdateInfoAndProvider() 以注入 HeiXiuProvider。
|
||
// 其他行为(NSIS 安装、签名校验等)完全由父类处理。
|
||
// ============================================================
|
||
|
||
import {
|
||
NsisUpdater,
|
||
MacUpdater,
|
||
AppImageUpdater,
|
||
Provider,
|
||
} from 'electron-updater';
|
||
import type { UpdateInfo } from 'builder-util-runtime';
|
||
|
||
import type { HeiXiuProvider } from './provider';
|
||
|
||
// ---------- Windows NSIS ----------
|
||
|
||
export class HeiXiuNsisUpdater extends NsisUpdater {
|
||
private heiXiuProvider: HeiXiuProvider;
|
||
|
||
constructor(heiXiuProvider: HeiXiuProvider) {
|
||
// 传 undefined 跳过内置 Provider 创建,由我们自己注入
|
||
super(undefined);
|
||
this.heiXiuProvider = heiXiuProvider;
|
||
this.autoDownload = false; // 由我们手动控制流程,保持 IPC 兼容
|
||
this.autoInstallOnAppQuit = false;
|
||
this.forceDevUpdateConfig = true; // 绕过 electron-updater 的 dev 模式检查
|
||
}
|
||
|
||
/** @internal — 注入自定义 Provider */
|
||
protected override async getUpdateInfoAndProvider(): Promise<{
|
||
info: UpdateInfo;
|
||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||
provider: Provider<any>;
|
||
}> {
|
||
const info = await this.heiXiuProvider.getLatestVersion();
|
||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||
return { info, provider: this.heiXiuProvider as Provider<any> };
|
||
}
|
||
}
|
||
|
||
// ---------- macOS ----------
|
||
|
||
export class HeiXiuMacUpdater extends MacUpdater {
|
||
private heiXiuProvider: HeiXiuProvider;
|
||
|
||
constructor(heiXiuProvider: HeiXiuProvider) {
|
||
super(undefined);
|
||
this.heiXiuProvider = heiXiuProvider;
|
||
this.autoDownload = false;
|
||
this.autoInstallOnAppQuit = false;
|
||
}
|
||
|
||
protected override async getUpdateInfoAndProvider(): Promise<{
|
||
info: UpdateInfo;
|
||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||
provider: Provider<any>;
|
||
}> {
|
||
const info = await this.heiXiuProvider.getLatestVersion();
|
||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||
return { info, provider: this.heiXiuProvider as Provider<any> };
|
||
}
|
||
}
|
||
|
||
// ---------- Linux AppImage ----------
|
||
|
||
export class HeiXiuAppImageUpdater extends AppImageUpdater {
|
||
private heiXiuProvider: HeiXiuProvider;
|
||
|
||
constructor(heiXiuProvider: HeiXiuProvider) {
|
||
super(null);
|
||
this.heiXiuProvider = heiXiuProvider;
|
||
this.autoDownload = false;
|
||
this.autoInstallOnAppQuit = false;
|
||
}
|
||
|
||
protected override async getUpdateInfoAndProvider(): Promise<{
|
||
info: UpdateInfo;
|
||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||
provider: Provider<any>;
|
||
}> {
|
||
const info = await this.heiXiuProvider.getLatestVersion();
|
||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||
return { info, provider: this.heiXiuProvider as Provider<any> };
|
||
}
|
||
}
|
||
|
||
// ---------- 工厂函数 ----------
|
||
|
||
/** 工厂:按平台创建对应的 Updater 实例 */
|
||
export function createPlatformUpdater(provider: HeiXiuProvider) {
|
||
switch (process.platform) {
|
||
case 'win32':
|
||
return new HeiXiuNsisUpdater(provider);
|
||
case 'darwin':
|
||
return new HeiXiuMacUpdater(provider);
|
||
default:
|
||
return new HeiXiuAppImageUpdater(provider);
|
||
}
|
||
}
|