Files
MeowOS-For-R3P2/patch_v2/reader_app/reader_internal.h
T
AskaEth 409fd1edf7 feat(reader): M27 书架按目录分组(ui.shelf_group=folder|format,默认 format 不变)
- 新增 shelf_model.c/.h:扫描/行序列从 shelf.c 拆出(纯 C,宿主可测);shelf_book 加 group[96](相对 Books/ 的目录路径,根下空串),path 语义/内容完全不变(进度键仍为 rdprog_hash(path))
- folder 模式:目录段头(根下=未分类),未分类置顶、其余按目录名排序;组内沿用最近阅读优先/其次书名;空目录不产生段头
- format 模式逐行保持旧行为;新增 reader.conf ui.shelf_group,缺键默认 format
- 上限 256→2048(SHELF_MAX_ROWS=2N=4096,段头≤书数),超限置可读提示,不再静默截断
- 顶栏加「目录/格式」切换,设置页加「书架分组」;UTF-8 安全截断长中文目录名
- 单测 test/shelf_group_smoke.c(38 断言)+ 计时 test/shelf_scan_bench.c
- build_reader.sh:链 meow_ui.a 解析冒烟 stbi_*;无 qemu 时跳过执行而非失败
2026-11-09 21:55:33 +08:00

58 lines
2.6 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* reader_internal.h — os.meow.reader 应用内部共享声明(视图 + 装配)。
*
* 层级(仿 hello_app):app.c 只做 init/建页/事件分发;shelf(书架)、reader(阅读页)各一个
* meow_view(ACTIVITY)。阅读页用 W_CUSTOM 画布 + App 自绘 back_buf(翻页 blit 局部脏区)。
*/
#ifndef READER_INTERNAL_H
#define READER_INTERNAL_H
#include "meow_ui.h"
#include "meow_ui_view.h"
#define ACT_SHELF 0
#define ACT_READER 1
#define ACT_SETTINGS 2
/* ---- 书架(app/shelf.c)---- */
meow_view *shelf_view_create(void);
int shelf_is_active(void);
int shelf_on_tap(int x, int y);
void shelf_on_swipe(int dir, int dx, int dy);
void shelf_redraw(void);
void shelf_set_view(int grid); /* 1=grid 0=list;读 reader.conf ui.shelf_layout(A) */
void shelf_set_group(int folder); /* 1=folder 0=format;写 ui.shelf_group(M27) */
/* ---- 阅读页(app/reader.c)---- */
meow_view *reader_view_create(void);
int reader_is_active(void);
void reader_on_tap(int x, int y);
void reader_on_swipe(int dir, int dx, int dy);
void reader_on_tick(uint64_t now);
void reader_on_touch_down(int x, int y); /* R3 段刮擦:右缘拖动快速定位 */
void reader_on_touch_move(int x, int y);
/* 打开一本书(书架调;成功后由书架 push ACT_READER 进入阅读页)。path=TXT 完整路径。
* 返回 0=成功(书已打开、页位图已备、可 push);非 0=失败(未能打开,调用方不 push)。 */
int reader_open(const char *path);
/* R3.4 章节重解析(app/settings.c 调用):是否打开了支持章节解析的书(TXT+seg 模式)。
* reader_reparse_chapters 返回 n=章节数 / 0=无章节(成功)/ -1=不可用 / -2=扫描失败(未落盘)。 */
int reader_has_chapter_book(void);
int reader_reparse_chapters(void);
/* ---- 全局设置页(app/settings.c,C)---- */
meow_view *settings_view_create(void);
int settings_is_active(void);
int settings_on_tap(int x, int y);
void settings_reload(void); /* 改配置后让设置页/其它页重读 reader.conf */
/* 系统翻页信号(app/reader_ipc.c 后台线程收到 MSG_KEY_PAGEUP/PAGEDOWN 后调;
* 仅置 pending 计数,UI 线程 reader_on_tick 消费转 reader_turn_animated,E)。 */
void reader_page_key(int dir); /* dir=+1 下一页;-1 上一页 */
/* 返回可执行文件所在包根(用于定位 /usr/data/mnt/sd_0)——由 app.c 注入与否;
* R1 用固定 TF 根 /usr/data/mnt/sd_0。 */
#define READER_SD_ROOT "/usr/data/mnt/sd_0"
#endif /* READER_INTERNAL_H */