anarlog 1.0.4 版本解析:撤销删除、时区设置与转录迁移的工程实现
2026/9/16 20:44:43 网站建设 项目流程

anarlog 1.0.4 版本解析:撤销删除、时区设置与转录迁移的工程实现

【免费下载链接】anarlogOpen source Granola AI Alternative项目地址: https://gitcode.com/GitHub_Trending/hy/anarlog

导读

本文以 anarlog(开源 Granola AI 替代品)1.0.4 版本发布说明 为骨架,逐项拆解本次迭代在笔记管理、设置、日历、AI 转录、稳定性和系统依赖六个方向上的改进。通过对照桌面端源码(apps/desktop/src)与 Rust 工作区配置,你将掌握撤销删除的"软删除 + 倒计时墓碑"机制、手动时区覆盖的实现原理、转录多段聚合计数的修复思路,以及本次关键依赖升级(Tauri 2.10.1、cpal 0.17 等)的实际影响。

版本概览

1.0.4 发布于 2026-02-04,官方摘要将其定位为一次"体验与健壮性"迭代:撤销删除、时区设置、重复性日历事件、自动增强(auto-enhance)、下拉组件与转录迁移均得到改进。全部变更按七个领域组织:笔记管理、设置、日历、AI 与转录、UI 与体验、稳定性与性能、系统依赖。

笔记管理:面向误删场景的 5 秒撤销机制

软删除与倒计时墓碑

1.0.4 为笔记删除引入"撤销删除"能力:删除后弹出提示条,附 5 秒倒计时,超时前可通过Restore(撤销)按钮Cmd+Z恢复,倒计时剩余时间以"溶解动画"直观呈现。

源码层面这套机制由三层构成:

  1. 状态层store/zustand/undo-delete.ts定义UNDO_TIMEOUT_MS = 5000,删除请求进入pendingDeletions后,setTimeout在 5 秒后自动触发confirmDeletion完成最终删除;若同一会话重复删除,会先清除旧计时器(clearTimeout(existing.timeoutId))再重建,避免计时器堆积。confirmAllPendingDeletions()还保证应用退出时不会遗留"已软删除但共享链接仍存活"的笔记。
  2. 数据层session/queries/deletion.tssoftDeleteSession()先将sessionssession_documentstranscriptssession_participantssession_tagsaction_itemssession_attachmentsentity_mentions七类关联数据统一打上deleted_at时间戳(墓碑),而非物理删除;restoreDeletedSession()则把deleted_at置回NULL,并处理"删除写入尚未提交"的竞态(先等待挂起的软删除落盘,失败最多重试 10 次)。
  3. 呈现层sidebar/toast/undo-delete-toast.tsx负责把pendingDeletions聚合成 Toast 分组——单条删除与批量删除(batchId分组)分别渲染,底部进度条通过 CSS 变量--undo-delete-progress展示剩余时长;点击 Undo 采用乐观更新:先关闭 Toast 并重新打开标签页,再异步执行恢复写操作,失败时回滚并重新登记待删除项。

Cmd+Z 与标签页恢复

Cmd+Z 走的是另一条链路:标签页存储中间件store/zustand/tabs/restore.ts维护closedTabs栈(上限MAX_CLOSED_TABS = 10),任何关闭标签页操作都会自动记录,restoreLastClosedTab()弹出最近关闭的标签重新打开,其中shared_note_preview类型会被过滤掉不进入恢复栈。

配套交互细节

  • Space 快捷键:控制音频播放器的播放/暂停,方便在听录音时快速暂停。
  • Recent 区域:最近打开的笔记会出现在 Open Note 对话框(Cmd+O)顶部的 "Recent" 区,减少翻找成本。

设置:手动时区覆盖与可搜索下拉

侧边栏时间线的时区语义

1.0.4 新增"手动时区配置":默认跟随系统时区,但可针对"会议时间在侧边栏时间线中的展示"单独覆盖。实现位于settings/general/timezone.tsx

  • 通过useConfigValue("timezone")读取配置、useSetSettingValue("timezone")写入;
  • 若用户选择的值与Intl.DateTimeFormat().resolvedOptions().timeZone得到的系统时区一致,则存空字符串(""),表示回退到系统时区;
  • 选择器不显示当前值时会回落到系统时区作为展示值,保证设置界面的直观性。

常用时区预设

发布说明记载为 18 个常用时区预设;当前源码中COMMON_TIMEZONES已扩展为 22 项,覆盖 UTC-10 至 UTC+13,含夏令时标注,例如:

值(IANA 名称)显示名UTC 偏移
Pacific/HonoluluHawaiiUTC-10
America/Los_AngelesPacific TimeUTC-8
America/New_YorkEastern TimeUTC-5
Europe/LondonLondonUTC+0/+1
Europe/ParisParisUTC+1/+2
Asia/KolkataIndiaUTC+5:30
Asia/ShanghaiChinaUTC+8
Asia/TokyoTokyoUTC+9
Australia/SydneySydneyUTC+10/+11
Pacific/AucklandAucklandUTC+12/+13

AI 设置快捷键与可搜索下拉

  • AI 设置快捷键调整为Cmd+Shift+Comma,与系统设置快捷键(Cmd+,)区分开;
  • 语言与时区选择统一迁移到新的可搜索下拉组件(SearchableSelect,位于apps/desktop/src/settings/general/目录),支持输入过滤,替代原先的普通下拉框。

日历:重复事件调整后的去重修复

此前,调整(reschedule)某个重复日历事件的单个实例后,侧边栏会同时出现旧时间与新时间的两个条目。1.0.4 修复了该问题——调整实例后不再残留旧发生时间。该修复位于日历相关查询与事件展示链路(如calendar/queries.tscalendar/hooks.ts),确保按originalStartTime关联的实例在被移动后正确更新而不再复制。

AI 与转录:自动增强计数与 LM Studio 报错引导

多段转录的自动增强阈值

自动增强(auto-enhance)功能此前按"单段转录字数"判断是否触发增强,导致较短分段永远达不到触发阈值。本次修复改为跨多个转录分段(transcript segments)累计统计字数,短分段也能在总量达标时正常触发。这也与后续 1.0.4 中"转录迁移需支持单会话多转录"的修复同源——增强逻辑必须建立在完整的转录集合之上。

LM Studio 上下文长度报错引导

当 LM Studio 后端返回上下文长度(context length)超限错误时,界面现在会显示"Learn how to fix this"链接,指向带逐步操作说明的官方文档,用户无需自行搜索解决方案。

UI 与体验:键盘可达性打磨

  • 侧边栏折叠按钮新增悬浮提示(tooltip),并附键盘快捷键提示;
  • 聆听(listening)进行中隐藏"重新转录"按钮,减少视觉干扰;
  • 下拉组件支持Tab 键键盘导航,并显示当前选中项的可视指示器;
  • 下拉选项自动滚动,保证被选中的条目始终可见(配合可搜索下拉,长列表场景体验明显改善)。

稳定性与性能:泄漏、观察器与迁移

内存泄漏修复

修复了两类资源未释放问题:

  • actor 订阅与计时器累积未清理——对应store/zustand/undo-delete.tsaddDeletion对旧timeoutIdclearTimeout,以及删除确认后clearDeletion的定时器清理逻辑;
  • 全局监听整棵 DOM 树的 MutationObserver 造成高 CPU 占用,已改为针对性的ResizeObserver,只观察需要感知尺寸变化的节点。

转录数据迁移

修复了转录迁移逻辑,保证迁移后保留说话人标记(speaker hints),并支持"单会话包含多条转录"的数据结构——这与上述buildSessionTombstoneStatements中对transcripts表的按会话批量处理方式一致,迁移不会丢段或丢失说话人归属。

系统:Tauri 与核心依赖升级

依赖版本变化说明
Tauri2.10.1桌面壳升级,位于apps/desktop/src-tauri的 Cargo 配置中锁定版本
cpal0.17音频采集库,改用上游版本,不再依赖项目内 patch 分支
reqwest0.13HTTP 客户端大版本升级
cidre0.14macOS 系统绑定升级
tokio-tungstenite0.28WebSocket 客户端升级

这些依赖由仓库根目录 Cargo.toml 的 workspace 统一管理,升级后需保证各 crate(尤其crates/下的音频、转录相关模块)编译一致。

如何验证与跟进

  • 变更记录的渲染逻辑位于packages/changelog/srcprocess.ts负责解析 frontmatter 与正文、renderer.tsx/components.tsx负责展示),1.0.4 的正文与摘要可直接在 content/1.0.4.md 查看;
  • 撤销删除与恢复行为可通过删除一条笔记后观察 5 秒倒计时 Toast、按 Cmd+Z 或点击 Undo 验证;
  • 时区覆盖可在设置中改选非系统时区,回到侧边栏时间线确认会议时间展示偏移。

小结

1.0.4 是一次典型的"防误删 + 配置灵活性 + 资源健康"迭代:撤销删除机制在"软删除墓碑"与"5 秒乐观恢复"之间取得平衡,时区设置把时间展示语义从系统绑定中解放出来,而 MutationObserver 换 ResizeObserver、actor 订阅与计时器清理则直击桌面应用长时运行时的 CPU 与内存问题。对于关心应用健壮性的开发者,undo-delete状态机与buildSessionTombstoneStatements的多表事务式墓碑处理,是值得直接阅读的参考实现。

【免费下载链接】anarlogOpen source Granola AI Alternative项目地址: https://gitcode.com/GitHub_Trending/hy/anarlog

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询