字体:find_font_rec/resolve_font 从 reader.c 抽到 app/font_resolve.c 并加进程内记忆化。 只缓存成功路径;命中后仍做一次 access() 校验(字库被删即重扫);没找到不缓存, 用户之后拷入的字库下次开书即可找到。顶栏「刷新」额外调 font_cache_invalidate(), 给「新拷入字库、旧字库仍在」一条显式失效路径。宿主实测:35 目录树 walk 0.026~0.54ms (=300+ 次系统调用)vs 命中 0.001ms(1 次 access);开书路径每次省一次完整 walk。 徽标:副题格式化抽成 shelf_fmt_sub()(扫描与「刚读完置顶」共用一份实现), promote_just_read() 改 ts 后立即重算这本的 sub/sub_folder,「· 读」不再等下次全量刷新。 回归:test_reader_core 6846、shelf_group_smoke 63(+8)、font_resolve_smoke 14 全绿; build_reader.sh 0 warning;扫描缓存/进度语义未改。app.json 0.1.3/code4 → 0.1.4/code5。
16 lines
858 B
C
16 lines
858 B
C
/* app/font_resolve.h — 在 MeowOS/fonts 里找字体文件(进程内记忆化)。 */
|
|
#ifndef FONT_RESOLVE_H
|
|
#define FONT_RESOLVE_H
|
|
|
|
/* 递归(深度 ≤ 3)扫 root,返回第一个 .otf/.ttf 的完整路径;没找到返回 NULL。
|
|
* 返回值指向模块内部静态缓冲,调用方不得 free,下次调用前一直有效。
|
|
* 语义:只缓存成功路径;命中时做一次 access() 校验,字库被删即重新扫描;
|
|
* 失败不缓存,用户之后拷入字库仍能立刻找到。 */
|
|
const char *font_resolve(const char *root);
|
|
|
|
/* 丢弃缓存(下次 font_resolve 强制重扫)。书架顶栏「刷新」时调用:
|
|
* 命中路径仍在时不会自动发现「用户新拷入、路序更靠前」的字库,手动刷新给一条显式失效路径。 */
|
|
void font_cache_invalidate(void);
|
|
|
|
#endif /* FONT_RESOLVE_H */
|