后端 update.rs: app_check_update(拉 latest.json+ed25519 签名校验) / app_download_install_update / prefs 读写 / mark_checked / mark_notified 五命令, lib.rs 注册;tauri.conf updater 段(endpoints=app.1216.top/download/devflow/latest.json + pubkey + createUpdaterArtifacts) + tauri-plugin-updater 依赖 + capabilities 权限。 前端 UpdateBadge.vue(顶栏徽章+下拉) / useUpdateCheck.ts(检查/下载/安装状态机) / AboutPanel.vue(设置页关于面板) + AppLayout 接线 + SettingsNav/searchIndex 索引 + i18n zh/en settings 键。 运维 scripts/publish-release.ps1(发版) + swap-install.ps1(换装校验) + 设计文档 版本更新与自动升级-设计-2026-10-09.md。 验收: cargo check -p devflow EXIT 0 + vue-tsc EXIT 0 + build EXIT 0。
90 lines
3.0 KiB
TypeScript
90 lines
3.0 KiB
TypeScript
//! 应用设置 KV API — IPC invoke 封装(localStorage → SQLite 迁移目标)
|
|
//!
|
|
//! 后端 4 个 command 读写 `app_settings` 表,value 在 SQLite 里永远是 JSON 字符串。
|
|
//! 本层只做透传(不解析 JSON),JSON.parse / JSON.stringify 由 store 层负责。
|
|
|
|
import { invoke } from '@tauri-apps/api/core'
|
|
|
|
export const settingsApi = {
|
|
/** 取单个 key 的原始值(JSON 字符串),不存在返回 null */
|
|
get(key: string): Promise<string | null> {
|
|
return invoke<string | null>('settings_get', { key })
|
|
},
|
|
|
|
/** 写 key/value(`INSERT OR REPLACE`),成功返回 true */
|
|
set(key: string, value: string): Promise<boolean> {
|
|
return invoke<boolean>('settings_set', { key, value })
|
|
},
|
|
|
|
/** 获取 DevFlow 数据目录路径(运行期确定,跨平台) */
|
|
getDataDir(): Promise<string> {
|
|
return invoke<string>('get_data_dir')
|
|
},
|
|
|
|
/** 获取应用版本信息(编译期注入:version/build_time/git_hash) */
|
|
getVersion(): Promise<{ version: string; build_time: string; git_hash: string }> {
|
|
return invoke<{ version: string; build_time: string; git_hash: string }>('app_get_version')
|
|
},
|
|
|
|
/** B2 检查更新:拉远端 latest.json,返回是否有新版(网络失败抛错,不谎报已是最新) */
|
|
checkUpdate(): Promise<{
|
|
has_update: boolean
|
|
version: string | null
|
|
notes: string | null
|
|
date: string | null
|
|
current_version: string
|
|
}> {
|
|
return invoke('app_check_update')
|
|
},
|
|
|
|
/** B2 读自动检查偏好 */
|
|
getUpdatePrefs(): Promise<{
|
|
auto_check: boolean
|
|
interval_minutes: number
|
|
last_check: string
|
|
notified_version: string
|
|
}> {
|
|
return invoke('app_update_get_prefs')
|
|
},
|
|
|
|
/** B2 写自动检查偏好 */
|
|
setUpdatePrefs(autoCheck: boolean, intervalMinutes: number): Promise<void> {
|
|
return invoke('app_update_set_prefs', { autoCheck, intervalMinutes })
|
|
},
|
|
|
|
/** B2 记录一次检查时间戳(节流用) */
|
|
markUpdateChecked(timestamp: string): Promise<void> {
|
|
return invoke('app_update_mark_checked', { timestamp })
|
|
},
|
|
|
|
/** B2 记录已提示版本号(同版本只提示一次) */
|
|
markUpdateNotified(version: string): Promise<void> {
|
|
return invoke('app_update_mark_notified', { version })
|
|
},
|
|
|
|
/** B3 下载并安装更新(进度经 app-update-progress 事件流;成功即自动重启) */
|
|
downloadAndInstallUpdate(): Promise<void> {
|
|
return invoke('app_download_install_update')
|
|
},
|
|
|
|
/** 取全部 key/value(启动时一次性拉回恢复偏好) */
|
|
getAll(): Promise<Record<string, string>> {
|
|
return invoke<Record<string, string>>('settings_get_all')
|
|
},
|
|
|
|
/** 删除单个 key,成功返回 true */
|
|
delete(key: string): Promise<boolean> {
|
|
return invoke<boolean>('settings_delete', { key })
|
|
},
|
|
|
|
/** 设置多 ReAct Plan 执行开关 */
|
|
setPlanExecution(enabled: boolean): Promise<void> {
|
|
return invoke<void>('set_plan_execution', { enabled })
|
|
},
|
|
|
|
/** 读取多 ReAct Plan 执行开关 */
|
|
getPlanExecution(): Promise<boolean> {
|
|
return invoke<boolean>('is_plan_execution_enabled')
|
|
},
|
|
}
|