继续学习
侧边栏中的 继续学习 卡片会自动定位你最近一次的学习会话,一键回到上次的播放位置。它只在存在 EchoSession 记录且播放器当前为空闲状态时显示。
卡片展示的内容
针对最近一次活跃会话,卡片会显示:
- 缩略图 — 媒体的封面图;若源文件没有封面则使用生成的占位图
- 标题 — 视频或音频的名称
- 语言 — 两字母语言代码,已转为大写
- 最近活动 — 相对时间(例如 "2 小时前")
- 进度条 — 当前播放位置占总时长的百分比
- 继续按钮 — 标签文字与卡片标题一致
何时出现
只有当以下条件全部满足时,卡片才会显示:
- 播放器处于 空闲状态 — 播放器 store 中没有当前会话
- 当前登录用户至少存在一条 活跃的 echo 会话
- 该会话对应的媒体(视频或音频)仍然存在于你的媒体库中
任意一条不满足时,卡片会自动隐藏,避免指向失效会话或与播放器当前状态重复。
如何定位最近会话
卡片使用两步查找逻辑:
- 首先调用
getMostRecentActiveEchoSession()拿到最新的活跃会话 - 如果该会话对应的媒体已被删除,则退回到扫描所有活跃会话(按
lastActiveAt倒序),返回第一个媒体仍存在的会话
这一设计保证:即便最近观看的视频已经从媒体库移除,卡片仍能指向其他可继续学习的会话。
如何继续学习
点击 继续 按钮,卡片会调用全应用统一的 useLoadMedia 钩子来恢复播放,加载后会自动还原:
- 正确的媒体(视频或音频)
- 会话中保存的播放位置
- 与该媒体绑定的字幕、词汇表等状态
加载失败时错误会被静默处理(已记录日志但不向用户展示),保证卡片不打扰正常的浏览操作。
数据来源
卡片直接读取本地 IndexedDB 存储(EchoSession 表),通过 Dexie 访问。挂载时不会发起网络请求:会话查询缓存 30 秒,媒体查询缓存 60 秒。
可翻译字符串
卡片标题与按钮文本均读取 home 命名空间下的 continueLearning 键。在对应语言的 home.json 中新增或覆盖该键即可完成本地化:
json
{
"continueLearning": "继续学习"
}