feat(reader): M33 目录模式逐级下钻 — 子目录/书分层显示(416 本不再平铺)

- folder 模式从「按第一级目录分段」改为当前目录视图:子目录在前(带子树书数),
  直接书在后;进入/返回只过滤已扫平的 g_books,不 readdir、不重扫(M32 索引不动)。
- 纯函数 shelf_build_rows_at(books,n,folder,cwd,...) + nav 工具(enter/up/breadcrumb/
  count)全部宿主可测;format 模式行序列/副题逐字不变,path 仍是完整路径(进度键不变)。
- 交互:点目录进入;顶栏返回箭头/左缘返回手势回上一级,根层再返回退出 App;顶栏标题=
  当前目录名(按像素宽截断),副题行=面包屑全路径+当前层书数;list/grid 均支持导航。
- 状态:folder↔format、list↔grid 切换保留 cwd;刷新重扫后 cwd 失效则收缩到有书的祖先。
- 边界:空目录不显示(导航只读 g_books,不额外 readdir);深层目录逐级进入;真实名为
  「未分类」的目录按普通目录处理,不与根层书合并。
- 测试:shelf_group_smoke 63→99 断言;M27 的按第一级分组断言改写为「逐级进入后可见该书」
  (同等强度),新增进入/返回/面包屑/计数/空目录/纯内存/rowcap/UTF-8 截断断言。
- 交付 0.1.7/code8(M32 已占用任务书里的 0.1.6/code7);真机 0.1.4 未被覆盖。
This commit is contained in:
AskaEth committed 2026-11-10 19:26:44 +08:00
1 parent 190041cd67
commit 2881ce908a
7 files changed
+609 -141

No files matched your search

+8 -2
View File
@@ -30,8 +30,14 @@ static void app_on_swipe(int dir, int dx, int dy)
if (settings_is_active()) { return; } /* 设置页滑动不翻页 */
if (reader_is_active()) { reader_on_swipe(dir, dx, dy); return; }
if (shelf_is_active()) {
/* 书架根页左缘右滑(返回手势)→ 退出 App(镜像 hello_app/files_app 的 LEFT→返回)。 */
if (dir == MEOW_SWIPE_LEFT) { meow_ui_request_exit(); return; }
/* 书架根页左缘右滑(返回手势):
* folder 模式且不在 Books 根 → 回上一级目录(M33);
* 已在根 / format 模式 → 退出 App(与既有行为一致)。 */
if (dir == MEOW_SWIPE_LEFT) {
if (shelf_back()) return;
meow_ui_request_exit();
return;
}
shelf_on_swipe(dir, dx, dy); return;
}
if (dir == MEOW_SWIPE_LEFT) { meow_ui_request_exit(); }