← 返回文章选择

文章读完了,我还想让它留在列表里

新到、候选与项目各管一件事,已读不必等于离开工作台。

默认只看未读时,点开一篇文章,回来它就不见了。清空收件箱时这很合理;但我有时刚读完,正想和另一篇比较,又得切到别处找它。工作台继续这样组织,就会催着人把列表清掉。

已读只是一个筛选条件

这次整理沿用了前面改过的 all 默认入口,未读留作筛选条件。读完只改变阅读状态,文章还能在全部列表里找到。

它在默认排序里的位置仍受来源质量档影响,顺序和纯按时间不完全一样;要严格按时间,就选显式的“最新”。六月初的 articles/service.ts(b75f1a9 版本)保留了这个区别。

代码里这条默认写得很明白:列表接口不带 module 参数就按 all 返回,要看未读得显式带 module=unread。取数时 all 向 Miniflux 要的是 status=all,根本没按已读过滤,所以读完的文章还在,不是界面缓存的效果。

默认排序和“按最新”差在哪,也是一条具体的线:来源质量分低于 45 的降一档,档内再按发布时间排;选了“按最新”才纯按发布时间。

三个入口,不是三道工序

侧栏分成两组:信息流里是最新、新到、已读、稍后读,线索流里是候选和已立项。新到、候选和已立项是主要入口,但我不想把它们做成只能往前走的三个格子。一篇想用于项目的文章,可以先收藏,读完标已读,再加入项目。进了项目,收藏还在,也没理由把它重新标成未读。

这些状态可以同时存在,各自回答一个问题,没有先后顺序。读完的文章可以还带着星标,也可以已经在某个项目里;先立项再回头标已读也一样。

同一篇文章的已读、星标与项目关系可以同时存在

每个操作实际写到哪里:

操作 实际写到哪里
读完 Miniflux 改成 read,本地再记一笔 last_read_at
留作候选 只调 Miniflux 的收藏接口
稍后读 只写本地的 read_later
加入项目 本地 entry_project_queue,状态 queued,来源 manual
隐藏来源 本地 reader_feed_preferences.hidden

读完那一步如果本地写失败,接口返回 207,带一个 reader_state_update_failed 警告,上游状态照样改了。本地表里没有已读、星标这类列,不复制上游已有的东西。

“先收藏、再加入项目”其实是代码强制的:文章没收藏就加项目,接口直接回 409 article_not_candidate。候选是进项目的前置,所以进了项目,收藏还得在。

项目表保存文章和用途的关系,星标继续负责候选;Miniflux API 已有基础状态读写,没必要为这个工作流去改它的内部模型。Miniflux 的条目状态只有 read、unread、removed 三种,status 和 starred 是两个独立条件,更新条目时可以给其中一个或两个一起给。状态能同时存在,在上游模型里本来就成立,只有 removed 才是删除。要回看已经选中的资料,就进相应视图,不必指望它恰好还排在信息流前面。

读完就归档,是同类产品的常见默认

“读完就离开列表”确实有产品这么做。Readwise Reader 的文档把位置(Inbox、Later、Shortlist、Archive)和有没有打开过分开管,但读完的动作写的是挪进 Archive 永久保存。我这里是有意偏离这个默认:已读只改一个状态,位置不动。

偏离也有代价。Miniflux 默认会清理已读条目:配置文档里的 CLEANUP_ARCHIVE_READ_DAYS 默认 60 天,到期把已读条目标成 removed,设成 -1 才全留。只靠“已读”这一个状态,材料会被时间清掉。星标和立项承担的就是长期留存。

信息流可以少显示,选过的材料不能丢

来源隐藏另记在本地的 reader_feed_preferences 里,思路相同:默认信息流可以少显示,但候选、项目和稍后读视图保留各自的已选条目。信息流里少显示几篇没关系,费心留下的材料始终有一个稳定的入口。

这在代码里是一条显式规则:候选、已立项、稍后读三个模块保留被隐藏来源的文章,其他模块,包括默认列表,把它们滤掉。隐藏标记取自本地偏好表。界面上的说明也把两件事分开写:低质量源在默认列表自动降权,手动隐藏后不再出现在默认信息流;每个来源的按钮就是“隐藏/恢复”。

Miniflux 自己其实也有隐藏开关。它从 2.0.33 起支持在来源编辑表单里勾 hide_globally,让一个源不出现在全局未读列表,API 后来也有 globally_visible 过滤。但那是一刀切的“从未读列表消失”,没法按视图区分,所以我这边的隐藏放在本地这一层。评分维度、来源管理这些工具单独放在侧栏,打开页面不用先过一轮管理。

现在读一篇文章,可以停在几个位置:看过就算了,先收藏,或者加入某个项目。我喜欢让这些决定发生在阅读之后:先把正文留在眼前,读完再决定它有没有下一步用途。

留下几句话 读者来信

读到这里,有什么想法?欢迎留下你的看法。