Repository navigation
v1.8.0 · 截图历史 · 滚动捕获 · 测试名英文化
新增
-
截图历史。截图一直在往
shots/里存(单帧与长图都存),但在这一版之前
没人能看见它们 —— 存了个寂寞。现在命令面板里有「截图历史」:网格缩略图、
按时间倒序、可删。图片通过deskbase://localhost/shot/<文件名>提供。那个图片入口做了路径穿越拦截:只认纯文件名,带
/、\、..一律 404。
URL 是能被构造的,不拦的话shot/../../main.dkb就能读到任意文件。 -
滚动捕获:能截外部应用的长图(浏览器、资源管理器、任何窗口)。
与站内「长截图」的分工:站内那套由界面驱动滚动,只能截 DeskBase 自己;
这一套你自己滚,所以能截任何窗口。为什么不让程序帮你滚:
capture.rs的设计底线是「不合成输入」——
模拟滚轮(SendInput)会把事件注入到用户的其它应用里,而那时焦点在哪、
用户正在做什么,程序都不知道。截外部应用不需要跨那条线:你滚,我们抓。抓帧由 Rust 后台线程定时做(约 5.5 帧/秒),不是 WebView 的定时器 ——
用户点走外部窗口后,WebView 的定时器会被节流甚至暂停。去重是这一套的关键:站内是"滚一屏抓一帧",每帧必有位移;
而录屏式抓帧大部分时候用户是停手的,抓到的帧完全一样。
把重复帧拼进去,长图里就会出现大段重复内容 —— 所以拼接前逐对估位移,
位移为 0 的帧直接丢掉,并且和上一张保留的帧比(而不是相邻帧比)。
重构
-
259 个中文测试函数名全部改成英文(
app/src下递归扫描,剩余 0 个)。为什么要改:
cargo test <filter>想筛某个测试时,中文名在这台机器上根本打不出来
(命令行中文编码是坑,findstr搜中文直接无输出);而且这是公开仓库,英文名更通用。命名沿用原语义,保持"读名字就知道测什么",比如:
原名 新名 备份_创建后可独立读回且表数一致backup_read_back_standalone_with_matching_table_count位移为零时不重复追加zero_shift_does_not_append_twice前导零的工号必须判成文本leading_zero_employee_id_is_text注释、文档、界面文案仍然是中文 —— 改的只是标识符。
修复(改名踩到的两个坑,都值得记)
-
测试名被字符串引用时,改名不是零风险。
import_pipeline.rs里有个常量CRASH_TEST存着测试名,子进程靠它筛测试 ——
改名后子进程匹配不到任何测试,于是"正常退出",断言报"子进程本该被强杀,却正常退出了"。
我事先说"零风险"是说漏了这种情况。改完必须真跑测试,不能只靠推理。 -
说"全部改完"之前,扫描范围要真的覆盖全部。
前四批我只扫了app/src/*.rs,漏了model/与store/两个子目录(33 个)。
一层 glob 不等于全部。
验证
| 项 | 结果 |
|---|---|
| 单元测试 | 265 通过 / 0 失败(改名前后一致) |
| 界面烟测 | 112 / 112 |
| 门禁 | 五道全过 |
| 中文标识符 | 递归扫描:剩余 0 |