Skip to content

继续学习

侧边栏中的 继续学习 卡片会自动定位你最近一次的学习会话,一键回到上次的播放位置。它只在存在 EchoSession 记录且播放器当前为空闲状态时显示。

卡片展示的内容

针对最近一次活跃会话,卡片会显示:

  • 缩略图 — 媒体的封面图;若源文件没有封面则使用生成的占位图
  • 标题 — 视频或音频的名称
  • 语言 — 两字母语言代码,已转为大写
  • 最近活动 — 相对时间(例如 "2 小时前")
  • 进度条 — 当前播放位置占总时长的百分比
  • 继续按钮 — 标签文字与卡片标题一致

何时出现

只有当以下条件全部满足时,卡片才会显示:

  1. 播放器处于 空闲状态 — 播放器 store 中没有当前会话
  2. 当前登录用户至少存在一条 活跃的 echo 会话
  3. 该会话对应的媒体(视频或音频)仍然存在于你的媒体库中

任意一条不满足时,卡片会自动隐藏,避免指向失效会话或与播放器当前状态重复。

如何定位最近会话

卡片使用两步查找逻辑:

  1. 首先调用 getMostRecentActiveEchoSession() 拿到最新的活跃会话
  2. 如果该会话对应的媒体已被删除,则退回到扫描所有活跃会话(按 lastActiveAt 倒序),返回第一个媒体仍存在的会话

这一设计保证:即便最近观看的视频已经从媒体库移除,卡片仍能指向其他可继续学习的会话。

如何继续学习

点击 继续 按钮,卡片会调用全应用统一的 useLoadMedia 钩子来恢复播放,加载后会自动还原:

  • 正确的媒体(视频或音频)
  • 会话中保存的播放位置
  • 与该媒体绑定的字幕、词汇表等状态

加载失败时错误会被静默处理(已记录日志但不向用户展示),保证卡片不打扰正常的浏览操作。

数据来源

卡片直接读取本地 IndexedDB 存储(EchoSession 表),通过 Dexie 访问。挂载时不会发起网络请求:会话查询缓存 30 秒,媒体查询缓存 60 秒。

可翻译字符串

卡片标题与按钮文本均读取 home 命名空间下的 continueLearning 键。在对应语言的 home.json 中新增或覆盖该键即可完成本地化:

json
{
  "continueLearning": "继续学习"
}

相关文档

  • 跟读学习 — 负责创建与更新本卡片所读取的 EchoSession 记录
  • 媒体库管理 — 卡片指向的视频和音频所在的位置