31 lines
1.3 KiB
TypeScript
31 lines
1.3 KiB
TypeScript
/**
|
|
* 桌面版桥(preload 注入的 window.huobaoDesktop)类型声明与安全取值。
|
|
* 非桌面环境(浏览器/服务器部署)返回 null,UI 据此隐藏桌面专属功能。
|
|
*/
|
|
|
|
export interface UpdateState {
|
|
status: 'idle' | 'checking' | 'up-to-date' | 'available' | 'downloading' | 'downloaded' | 'error'
|
|
currentVersion: string
|
|
latestVersion?: string
|
|
notes?: string
|
|
error?: string
|
|
downloadProgress?: number
|
|
downloadedFile?: string
|
|
}
|
|
|
|
export interface HuobaoDesktopBridge {
|
|
pickDirectory: () => Promise<{ ok: boolean, path?: string, freeBytes?: number | null, error?: string, canceled?: boolean }>
|
|
startMigration: (opts: { targetDir: string, migrateFiles: boolean }) => Promise<{ ok: boolean }>
|
|
onMigrateProgress: (cb: (progress: { phase: string, message?: string, copiedBytes?: number, totalBytes?: number }) => void) => () => void
|
|
getUpdateState: () => Promise<UpdateState>
|
|
checkUpdate: () => Promise<UpdateState>
|
|
downloadUpdate: () => Promise<UpdateState>
|
|
applyUpdate: () => Promise<void>
|
|
onUpdateProgress: (cb: (percent: number) => void) => () => void
|
|
}
|
|
|
|
export function useDesktopBridge(): HuobaoDesktopBridge | null {
|
|
if (typeof window === 'undefined') return null
|
|
return (window as unknown as { huobaoDesktop?: HuobaoDesktopBridge }).huobaoDesktop ?? null
|
|
}
|