launcher: 进设置页不再同步跑串行网络 popen 与逐套字体 sha256(点设置卡≥5s 修复)
- 设置页入口 s_net_sync_from_sys() 改为 toggle 同步(快)+异步 s_net_refresh_kick(); wifi/bt 状态与列表由 run_settings_page 主循环逐步骤 s_net_refresh_pump() 填充 (每步一个带超时 popen、~150ms 一步),draw 用 g_net_* 缓存,数据变化即 need_paint → 入口不再被 wpa_cli/bluetoothctl/hcitool 5 条串行 popen(各 1.2~2.5s 有界超时)拖住。 - 进设置页字体重扫 meow_font_scan_presets(0) 跳过逐套 sha256(gbk/full 套数 MB, 逐套双 sha256 真机耗数秒,入口卡顿主因之一);完整性校验保留给启动/热插拔全量(verify=1)。 - s_net_refresh() 保留同步语义(kick+drain) 供通知中心等调用方;WiFi/BT 子页返回、 网络下拉后改 kick(由主循环承担异步填充)。 - 设置入口加毫秒级分段日志(font rescan / net toggle-sync+kick / page shown)供真机取证。 - 交叉 -Wall -Wextra 0 warning;launcher 宿主测试全 PASS。launcher md5 fbc78c62
This commit is contained in:
1 parent
0294553096
commit
41427fdcb3
6 files changed
+102
-46
No files matched your search
@@ -474,7 +474,7 @@ static void font_tier_marker(const char *charset, int glyph_count, char *out, in
|
||||
* 输出:label=显示名 `<name> <Weight>(common≈4k)`(如 `MiSans Regular(common≈4k)`);
|
||||
* charset/glyph_count=档位信息;wtout=weight slug(缺省 "regular")。 */
|
||||
static int meow_font_probe_weight(const char *dirpath, const char *family, const char *weight,
|
||||
const char *tier_dir,
|
||||
const char *tier_dir, int verify_sha,
|
||||
char *label, int llen,
|
||||
char *charset, int clen, int *glyph_count,
|
||||
char *wtout, int wtlen, char *nameout, int namelen)
|
||||
@@ -506,16 +506,20 @@ static int meow_font_probe_weight(const char *dirpath, const char *family, const
|
||||
snprintf(label, llen, "%s %s(%s)", name[0] ? name : family, wd, marker);
|
||||
if (charset) snprintf(charset, clen, "%s", tier);
|
||||
if (glyph_count) *glyph_count = gc;
|
||||
/* 完整性校验:仅 WARN,不硬失败;该套仍标记可选。 */
|
||||
char apng[80] = "", aidx[80] = "";
|
||||
if (font_sha256_file(ppath, apng, sizeof apng) != 0)
|
||||
logmsg("fonts: '%s/%s%s%s' sha256(png) 不可用,跳过校验", family, wt, tsep, tiernm);
|
||||
else if (jsha_png[0] && !font_sha_eq(apng, jsha_png))
|
||||
logmsg("fonts: '%s/%s%s%s' WARN sha256_png 不匹配(仍可选)", family, wt, tsep, tiernm);
|
||||
if (font_sha256_file(ipath, aidx, sizeof aidx) != 0)
|
||||
logmsg("fonts: '%s/%s%s%s' sha256(idx) 不可用,跳过校验", family, wt, tsep, tiernm);
|
||||
else if (jsha_idx[0] && !font_sha_eq(aidx, jsha_idx))
|
||||
logmsg("fonts: '%s/%s%s%s' WARN sha256_idx 不匹配(仍可选)", family, wt, tsep, tiernm);
|
||||
/* 完整性校验:仅 WARN,不硬失败;该套仍标记可选。
|
||||
* M3:verify_sha=0(进设置页重扫)跳过逐套 sha256sum(gbk/full 套数 MB,逐套双 sha256
|
||||
* 真机耗数秒,入口卡顿主因之一);完整性校验保留给启动全量扫描(verify_sha=1)。 */
|
||||
if (verify_sha) {
|
||||
char apng[80] = "", aidx[80] = "";
|
||||
if (font_sha256_file(ppath, apng, sizeof apng) != 0)
|
||||
logmsg("fonts: '%s/%s%s%s' sha256(png) 不可用,跳过校验", family, wt, tsep, tiernm);
|
||||
else if (jsha_png[0] && !font_sha_eq(apng, jsha_png))
|
||||
logmsg("fonts: '%s/%s%s%s' WARN sha256_png 不匹配(仍可选)", family, wt, tsep, tiernm);
|
||||
if (font_sha256_file(ipath, aidx, sizeof aidx) != 0)
|
||||
logmsg("fonts: '%s/%s%s%s' sha256(idx) 不可用,跳过校验", family, wt, tsep, tiernm);
|
||||
else if (jsha_idx[0] && !font_sha_eq(aidx, jsha_idx))
|
||||
logmsg("fonts: '%s/%s%s%s' WARN sha256_idx 不匹配(仍可选)", family, wt, tsep, tiernm);
|
||||
}
|
||||
logmsg("fonts: add '%s/%s%s%s' (%s) tier=%s glyph_count=%d", family, wt, tsep, tiernm, label, tier, gc);
|
||||
return 1;
|
||||
}
|
||||
@@ -637,7 +641,7 @@ static int font_presets_add(const char *family, const char *weight, const char *
|
||||
* 选库)与 meow_font_reload_multifont 在运行期持续读 font_presets_n,清空会造成大字库
|
||||
* 档位退化(red line「保持档位/多字体行为」)。如需「零驻留」,须把这几个核心路径改为
|
||||
* 直接读 index(较大重构,超出本批边界,留待后续)。 */
|
||||
void meow_font_scan_presets_root(const char *card_root)
|
||||
void meow_font_scan_presets_root(const char *card_root, int verify_sha)
|
||||
{
|
||||
font_presets_n = 0;
|
||||
font_presets[0] = "MeowOS/fonts/default/regular/font.png"; /* 默认字库 = MeowOS/fonts/default/regular */
|
||||
@@ -684,7 +688,7 @@ void meow_font_scan_presets_root(const char *card_root)
|
||||
char label[96] = "", cs[8] = ""; int gc = 0; char wt[32] = "", nm[64] = "";
|
||||
if (access(pngcheck, R_OK) == 0) {
|
||||
/* 两级(旧结构向后兼容):<family>/<weight>/font.png,tier 读 font.json charset。 */
|
||||
if (meow_font_probe_weight(dirpath, de->d_name, we->d_name, NULL,
|
||||
if (meow_font_probe_weight(dirpath, de->d_name, we->d_name, NULL, verify_sha,
|
||||
label, sizeof label, cs, sizeof cs, &gc,
|
||||
wt, sizeof wt, nm, sizeof nm) == 0)
|
||||
continue; /* 缺组件/损坏 → 跳过该套 */
|
||||
@@ -702,7 +706,7 @@ void meow_font_scan_presets_root(const char *card_root)
|
||||
strcmp(te->d_name, "full")) continue;
|
||||
char tpath[420];
|
||||
snprintf(tpath, sizeof tpath, "%s/%s", dirpath, te->d_name);
|
||||
if (meow_font_probe_weight(tpath, de->d_name, we->d_name, te->d_name,
|
||||
if (meow_font_probe_weight(tpath, de->d_name, we->d_name, te->d_name, verify_sha,
|
||||
label, sizeof label, cs, sizeof cs, &gc,
|
||||
wt, sizeof wt, nm, sizeof nm) == 0)
|
||||
continue; /* 缺组件/损坏 → 跳过该 tier 套 */
|
||||
@@ -728,10 +732,12 @@ void meow_font_scan_presets_root(const char *card_root)
|
||||
}
|
||||
|
||||
|
||||
/* 设备默认卡根扫描(等价现状:无卡时 opendir 失败 → 仅默认字体)。 */
|
||||
void meow_font_scan_presets(void)
|
||||
/* 设备默认卡根扫描(等价现状:无卡时 opendir 失败 → 仅默认字体)。
|
||||
* verify_sha=1:启动/热插拔全量扫描(含逐套 sha256 完整性校验)。
|
||||
* verify_sha=0:进设置页重扫(只枚举+读 font.json+落 index,跳过 sha256 —— 入口不许卡数秒)。 */
|
||||
void meow_font_scan_presets(int verify_sha)
|
||||
{
|
||||
meow_font_scan_presets_root("/usr/data/mnt/sd_0");
|
||||
meow_font_scan_presets_root("/usr/data/mnt/sd_0", verify_sha);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user