// ============================================================ // 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; }> { const info = await this.heiXiuProvider.getLatestVersion(); // eslint-disable-next-line @typescript-eslint/no-explicit-any return { info, provider: this.heiXiuProvider as Provider }; } } // ---------- 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; }> { const info = await this.heiXiuProvider.getLatestVersion(); // eslint-disable-next-line @typescript-eslint/no-explicit-any return { info, provider: this.heiXiuProvider as Provider }; } } // ---------- 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; }> { const info = await this.heiXiuProvider.getLatestVersion(); // eslint-disable-next-line @typescript-eslint/no-explicit-any return { info, provider: this.heiXiuProvider as Provider }; } } // ---------- 工厂函数 ---------- /** 工厂:按平台创建对应的 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); } }