rebase 到 picbrowser(含 M7 条漫/续读、M11 CBZ 档案册)后的语义拼接: - 保留单层扫描重写:一次 opendir/readdir+lstat 只列当前层(目录 + 注入 archive_pages 时的 .cbz/.zip 档案文件),自然升序、隐藏项/符号链接跳过、2000 条截断标注; 系统目录/空目录/无图目录一律列出;彻底删除递归「子树含图」探测 - 保留并复用 M11 档案册分支:add_dir_entry / add_archive_entry / entry_subtitle / entry_badge / archive_pages_at / sibling_is_book / mr_library_scan_ex 注入; 档案册行同样先成行、页数由后台 probe(注入 zip 页数回调)懒算 - 保留 M7:mr_library_dir_has_images / mr_book_adjacent(_ex) 语义不变;为 adjacency 恢复 ignored_dir_name(仅册间衔接跳过系统/隐藏目录,浏览本身不隐藏); mr_library_format_subtitle 在补位后拼「· 续读 Pn」角标 - mr_library_probe_path 统一探测目录/档案册:mtime(秒+纳秒)+size 失效的 256 项 LRU + 互斥锁;评审 P2:只缓存「探测前后 stat 完全一致」的结果,期间变化则不写缓存 (消除「不完整结果绑定新 mtime」的假新鲜;下次调用重新探测) - UI:列表用 src2 每帧取行;后台线程探测优先于缩略图;档案册封面解压档内首图(M11); 行语义=书页数/缩略图、空目录「空目录」、无图/坏档「无图片」;可上溯至文件系统 /、 不可读目录提示并停留;TopAppBar「TF卡」回根;启动时根目录不可读也建空列表; 顶栏回根命中加 g_tb_home_idx>=0 防御 - tuku_internal.h:library_go_up 注释校正(0=到达文件系统 /,app.c 据此退出) - 测试:test_library 改单层语义;新增 browse_nav / browse_lazy / browse_perf / browse_ui_host(含评审 P2 的「探测期间变化不写缓存」用例);test_cont_adjacent A6 改两段式;test_cbz T8/T10 改两段式(坏档/无图档案列出但非书); run_tests.sh 保留双方全部条目(browse 4 套 + run_zip_tests/run_cbz_tests) - 复验:run_tests.sh 全 PASS(含 M11 zip/cbz)、run_webtoon_tests.sh 全 PASS; worktree 内 sdk/build_sdk.sh + build_tuku.sh 零警告静态 MIPS32r2 ELF
65 lines
2.8 KiB
C
65 lines
2.8 KiB
C
/* tuku_internal.h — 图库应用内部共享头(只 extern 声明,不定义)。
|
||
*
|
||
* 分层(照 examples/hello):
|
||
* - logic/ 纯 C(library 扫描/自然排序、reader 方向状态),不依赖 meow_ui.h,宿主可裸测;
|
||
* - ui/ 每页一个 view 文件(library/reader/settings/lock),只碰 SDK;
|
||
* - app.c main + 装配 + meow_ui_run 回调路由 + 主题监听。
|
||
*
|
||
* 页面:ACT_LIBRARY(0) 根页(保留状态栏)、ACT_READER(1) 全屏、ACT_SETTINGS(2)、ACT_LOCK(3)。
|
||
* 并行开发接缝(后续任务只填自己的文件,不改 app.c/internal.h):
|
||
* - M4 阅读器:ui/reader/reader.c 实现,方向状态用 logic/reader 的 mr_reader_get/set_direction;
|
||
* 书库点入含图目录经 mr_reader_open_dir(path) 进入本页。
|
||
* - M5 锁屏/PIN:ui/lock/lock.c 实现 lock_view_should_show();本批桩返回 0(不锁)。
|
||
*/
|
||
#ifndef TUKU_INTERNAL_H
|
||
#define TUKU_INTERNAL_H
|
||
|
||
#include <stdint.h>
|
||
|
||
#include "meow_ui.h"
|
||
#include "meow_ui_view.h"
|
||
#include "logic/library.h"
|
||
#include "logic/reader.h"
|
||
|
||
/* ---- Activity 归属(稳定 id,< MEOW_VIEW_BY_ID_MAX) ---- */
|
||
#define ACT_LIBRARY 0
|
||
#define ACT_READER 1
|
||
#define ACT_SETTINGS 2
|
||
#define ACT_LOCK 3
|
||
|
||
#define MR_ROOT_DIR "/usr/data/mnt/sd_0" /* 书库根 = TF 卡根 */
|
||
|
||
/* ---- 视图控制器(biz-UI 绑定点) ---- */
|
||
typedef struct mr_page_ctrl {
|
||
meow_view *view;
|
||
int active;
|
||
} mr_page_ctrl;
|
||
|
||
/* ---- 书库页(ui/library/library.c) ---- */
|
||
meow_view *library_view_create(void);
|
||
int library_at_root(void); /* 1=当前在 MR_ROOT_DIR */
|
||
int library_go_up(void); /* 上溯父目录:1=已上移/提示停留,0=已在文件系统 "/"(app.c 据此退出) */
|
||
void library_on_tap(int x, int y);
|
||
void library_on_swipe(int dir, int dist); /* dist=SDK on_swipe 的位移量(UP/DOWN 用) */
|
||
void library_on_touch_down(int x, int y);
|
||
void library_on_touch_move(int x, int y);
|
||
void library_on_tick(void); /* 收下后台缩略图结果并局部补位 */
|
||
|
||
/* ---- 阅读器页(ui/reader/reader.c,M4 填充) ---- */
|
||
meow_view *reader_view_create(void);
|
||
void reader_on_tap(int x, int y);
|
||
void mr_reader_open_dir(const char *path); /* 书库→阅读器的桩导航接口 */
|
||
const char *mr_reader_dir(void); /* 当前待打开目录(骨架显示用) */
|
||
|
||
/* ---- 设置页(ui/settings/settings.c) ---- */
|
||
meow_view *settings_view_create(void);
|
||
|
||
/* ---- 锁屏页(ui/lock/lock.c,M5 填充) ---- */
|
||
meow_view *lock_view_create(void);
|
||
int lock_view_should_show(void); /* 1=启动先显示锁屏;本批桩返回 0 */
|
||
|
||
/* ---- App 级(app.c) ---- */
|
||
void mr_nav_report(void); /* 向 launcher 上报当前页栈深/顶层 */
|
||
|
||
#endif /* TUKU_INTERNAL_H */
|