/* logic/reader.h — 阅读器纯逻辑接缝(M4 填充实现,M3 先落状态 API;M7 追加模式与每册续读状态)。 * * 阅读方向默认 RTL(日式漫画从右往左翻);设置页/阅读器可切 LTR。 * 阅读模式(翻页/条漫)与每册 last page 走 meow_config 持久化,键含册标识。 * 本模块保持纯 C(不 include meow_ui.h),宿主可直接测。 */ #ifndef MR_READER_H #define MR_READER_H #ifdef __cplusplus extern "C" { #endif #define MR_DIR_RTL 1 /* 默认:右到左(日漫) */ #define MR_DIR_LTR 0 /* 左到右 */ int mr_reader_get_direction(void); /* 只接受 MR_DIR_RTL / MR_DIR_LTR;其它值忽略(保持原方向)。 */ void mr_reader_set_direction(int dir); /* ============================================================ */ /* 阅读模式(M7):左右翻页 / 条漫竖向连续滚动 */ /* ============================================================ */ #define MR_MODE_PAGED 0 /* 左右翻页(默认) */ #define MR_MODE_WEBTOON 1 /* 条漫:垂直连续滚动 */ int mr_mode_valid(int mode); const char *mr_mode_name(int mode); /* "paged" / "webtoon"(配置值;非法按 paged) */ int mr_mode_parse(const char *s); /* -1=未知 */ /* ============================================================ */ /* 每册续读状态(last page + mode,meow_config 持久化) */ /* ------------------------------------------------------------ * 键 = reader..:同一册(同一目录)跨启动恢复, * 不同册互不影响;目录改名/移动视为新册。写失败只 WARN(best-effort,不阻断阅读)。 * 依赖:只 include 配置/日志两个模块头,宿主测试用 settings_reader_stub 顶替。 * ============================================================ */ #define MR_CONT_PATH_MAX 512 /* 册路径规范化的本地缓冲(同 MR_PATH_MAX 口径) */ #define MR_CONT_PAGE_MAX 1000000 /* 配置里 last page 的合理上限(防坏值) */ int mr_cont_key(const char *dir, const char *field, char *out, int outsz); int mr_cont_get_mode(const char *dir, int def); void mr_cont_set_mode(const char *dir, int mode); int mr_cont_get_page(const char *dir, int def); void mr_cont_set_page(const char *dir, int page); /* 一次写 page+mode(尽最大努力,两键分别尝试)。 */ void mr_cont_save(const char *dir, int page, int mode); /* 书库行续读角标:1=写入 "续读 P5"(page>0 才有记录);0=无。 */ int mr_cont_badge(const char *dir, char *out, int outsz); #ifdef __cplusplus } #endif #endif /* MR_READER_H */