Back to Stranslate

配置、存储与历史数据

src/docs/config-storage-history.md

2.0.63.8 KB
Original Source

配置、存储与历史数据

模块职责

  • 维护全局设置模型与服务配置模型。
  • 提供统一 JSON 存储抽象(应用配置与插件配置)。
  • 统一便携模式/漫游模式路径策略。
  • 负责翻译历史 SQLite 存储模型与读写逻辑。

关键入口

  • STranslate/Core/Settings.cs
    • 主配置模型,属性变更自动保存并触发行为应用。
  • STranslate/Core/ServiceSettings.cs
    • 服务实例列表与特殊服务 ID(替换翻译、图片翻译)。
  • STranslate/Core/StorageBase.cs
    • 通用存储抽象:加载、保存、备份恢复、原子写入。
  • STranslate/Core/AppStorage.cs
    • 应用级配置存储:SettingsDirectory/{TypeName}.json
  • STranslate/Core/PluginStorage.cs
    • 插件级配置存储:PluginSettingsDirectory/{serviceId}.json
  • STranslate/Core/DataLocation.cs
    • 便携/漫游目录与缓存/日志/数据库路径决策。
  • STranslate/Core/SqlService.cs
    • 历史表初始化、读写、分页、游标与相邻记录查询。

核心流程

从入口到结果:配置加载、行为应用与自动保存

  1. 启动阶段由 AppStorage<T>.Load() 读取:SettingsHotkeySettingsServiceSettings
  2. SetStorage() 后,Settings.PropertyChanged 会自动触发:
    • 行为应用(语言、主题、字体、开机启动、外部调用、日志级别等)。
    • 配置落盘(部分高频字段使用 500ms 防抖保存)。
  3. StorageBase.Save() 采用临时文件 + 原子替换,降低写入中断导致损坏的风险。
  4. StorageBase.Load() 遇到 JSON 异常时回退 .bak,再失败则使用默认对象。

从入口到结果:便携/漫游路径策略

  1. DataLocation.PortableDataLocationInUse() 判断程序目录下是否存在便携目录。
  2. 若存在:配置、缓存、日志、插件目录全部落在 PortableDataPath
  3. 若不存在:落在 RoamingDataPath%AppData%/STranslate)。
  4. 数据库连接串固定指向 CacheDirectory/history.db

从入口到结果:历史数据写入与缓存命中

  1. 首次启动执行 SqlService.InitializeDB() 创建 History 表。
  2. 翻译完成后调用 InsertOrUpdateDataAsync(history, count)
    • 超上限时先删除最旧记录。
    • (SourceText, SourceLang, TargetLang) 命中则更新,否则插入。
  3. HistoryModel.RawData 负责将 List<HistoryData> 与 JSON 字段互转。
  4. 查询路径包括:精准命中、模糊检索、分页、上一条/下一条导航。

关键数据结构/配置

  • Settings
    • UI/主题/语言/窗口位置/自动翻译/网络/插件市场/OCR版面分析/外部调用/自动检查更新等全局配置。
  • ServiceSettings
    • TranSvcDatas/OcrSvcDatas/TtsSvcDatas/VocabularySvcDatas
    • ReplaceSvcID/ImageTranslateSvcID/ImageTranslateOcrSvcID
  • ProxySettingsBackupSettings
    • 网络代理与备份目标配置。
  • HistoryModel / HistoryData
    • 历史记录主表模型与每服务结果载体。

关键文件

  • STranslate/Core/Settings.cs
  • STranslate/Core/ServiceSettings.cs
  • STranslate/Core/StorageBase.cs
  • STranslate/Core/AppStorage.cs
  • STranslate/Core/PluginStorage.cs
  • STranslate/Core/DataLocation.cs
  • STranslate/Core/SqlService.cs
  • STranslate/Core/ProxySettings.cs
  • STranslate/Core/BackupSettings.cs

常见改动任务

  • 新增设置项:
    1. SettingsServiceSettings 增加属性。
    2. 需要即时行为时补充 HandlePropertyChanged 分支。
    3. 在对应 UI 页面绑定并验证序列化兼容。
  • 调整存储可靠性:优先改 StorageBase,避免在业务层重复实现备份恢复。
  • 修改便携策略:改 DataLocation,并验证升级流程中的 TmpConfigDirectory 回迁逻辑。
  • 历史结构演进:修改 HistoryData 时需确认 RawData 兼容旧版本 JSON。