Releases: chanhuan1/CHzip
Release list
v4.0 品牌图标全套更换 + 目录树体验优化
CHzip v4.0
品牌图标全套更换
全新设计(极光暗夜深蓝渐变底 + 智能归档文件夹 + 水晶毛玻璃 + 露出提取文件 + 金色拉链),覆盖根目录与 fnOS 桌面/应用中心全部 10 个尺寸档位;品牌图标缓存键纳入版本同步门禁(不再固定 1.0.0)。
目录树体验优化
- 多类型文件专属彩色图标(代码 / 图片 / 视频 / 音频 / 压缩包 / 文档 / PDF)
- 层级缩进对齐虚线(深浅主题自适应)
- 双击目录行展开 / 折叠;单击行高亮
- 新增「全部展开 / 折叠」快捷按钮;展开的文件夹切换为打开态图标
顶栏控件对齐
历史 / 主题切换 / 状态徽章统一 34px 高度、13px 字号与胶囊圆角,hover 蓝底高光。
测试:413 → 416。版本号升至 4.0(五处同步)。
安装
在飞牛应用中心手动安装对应架构的 .fpk:
- x86_64:
CHzip_4.0_x86_64.fpk - arm64:
CHzip_4.0_arm64.fpk
校验值见 SHA256SUMS.txt。
v3.9
v3.9 更新记录
修复:文件树实时高亮在真机上完全不亮
三个真机根因逐一排查定位(靠新增的 ?debugHighlight=1 调试开关在飞牛上抓日志):
.gz单文件流的文件计数被误当文件名:解压.gz等单文件流时,7-Zip-bsp1输出的「当前文件」是1、2… 这样的已处理文件计数而非文件名,engine.js原样传给前端,文件树拿"1"/"2"匹配路径(永远 NONE)。已过滤纯数字序号。\b退格控制符与-/+动作标记未剥:真机 7-Zip 用\b(退格)+ 空格做原地刷新,文件名前带一串\b与-标记(如\b\b\b- dir/x.mp4),前端未剥导致匹配失败。后端extractProgressName与前端normalizeHighlightPath现都剥除控制字符与动作前缀。- DOM 重建后高亮不恢复:文件树分批异步渲染、且展开/折叠/搜索会
replaceChildren()重建,高亮一旦随 DOM 消失便不再恢复。renderTree末尾现按记住的当前文件补挂高亮。
其它变更
- 顶栏版本号与真实版本实时同步:原硬编码
v3.7漂移。现从 CSS 资源?v=缓存键实时推导,发版只改?v=一处,顶栏自动跟随。 - 移除解压「续跑」功能:取消解压后保留已解压文件,想继续可重新解压并选「跳过已存在文件」冲突策略达到同等效果。
- 高亮样式沿用整行发光(背景呼吸 + 左侧蓝竖条 + 文件名加粗)。
测试:413。版本号升至 3.9。
安装
在飞牛应用中心手动安装对应架构的 .fpk(x86_64 / arm64)。校验值见 SHA256SUMS.txt。
🤖 Generated with Claude Code
v3.8
v3.8 更新记录
- 修复:解压冲突策略四选一(重命名/覆盖/跳过/保留较新,F1)。
- 新增:解压完成智能拍平同名一层目录(F2)。
- 新增:完整性体检(7z t)异步任务 + 坏文件归因(F6)。
- 新增:失败保留部分成果 + 续跑重试(F8,续跑后于 v3.9 移除)。
- 新增:并发上限从硬拒绝 429 改排队等待(F7)。
- 新增:文件树展示压缩率 + 加密锁标(F13)。
- 新增:乱码检测一键换代码页 + 分卷缺失引导卡(F12)。
- 新增:包内图片缩略图墙 + PDF 免解压预览(F11)。
本版本仅作记录,未单独发布安装包;请使用 v3.9 安装包。
v3.7
CHzip 3.6
CHzip 3.6 —— 8 大新功能
解压更强
- F1 解压冲突策略四选一:自动重命名 / 覆盖 / 跳过 / 保留较新
- F2 解压完成智能拍平「同名一层目录」,不再多套一层壳
- F6 完整性体检:先跑 7z t 流式 CRC 校验,坏文件给「疑似」归因
- F7 并发上限从硬拒绝改为排队等待,显示「排队中,前面还有 N 个」
- F8 失败保留部分成果 + 一键续跑(已存在文件自动跳过)
体验更好
- F11 包内图片缩略图墙 + PDF 免解压预览
- F12 乱码检测一键换代码页 + 分卷缺失引导卡(明确告诉你右键哪一卷)
- F13 文件树展示压缩率 + 加密锁标
支持 x86_64 与 arm64,安装包与校验和见下方资产。
CHzip 3.5
CHzip 3.5 —— 死代码清理 + 两个运行时 bug 修复
修复
- 两个会在运行时崩溃的引用错误(全盘死代码扫描发现):
- 嵌套 tar 解压的清理失败路径调用了未导入的函数(
safeDiagnosticWrite),会抛ReferenceError并吞掉正常结果。 - 压缩包打开失败、目录授权弹窗两条错误路径调用了未导出的诊断函数(
uiDialogs.recordDiagnosticError),会抛TypeError。
- 嵌套 tar 解压的清理失败路径调用了未导入的函数(
工程
- 死代码清理:逐项验证零引用后删除后端与前端一批死函数、死导出、死字段与失效 CSS(含 v2.4 起就接不进 CGI 的
isAllowedOrigin、废弃的 taskMini 样式等)。 - 新增「前端调用与导出对象对账」测试,防止下一次漏导出。
- 测试:292 → 297。
安装
在飞牛应用中心手动安装对应架构的 .fpk(x86_64 / arm64)。校验和见 SHA256SUMS.txt。
CHzip 3.3
v3.3(2026-09-16)— 修复固实压缩包预览把 CPU 跑满
修复
- 预览固实压缩包里的文件会把 CPU 跑满:固实(solid)压缩把包内所有文件当成一条连续的流来压,取出其中任意一个文件都必须从流的开头解压到目标位置 —— 代价由压缩包体积决定,与目标文件大小无关:1GB+ 的固实 RAR 分卷,预览一个几 KB 的 txt 也会让一个核 100% 跑满到解压完为止。而
preview-file是唯一一处绕过统一封装、直接调用 7-Zip 的代码,把超时一起漏掉了,于是这个代价完全没有上界。现在补上 45 秒超时(超时会真的杀掉 7z 子进程)、改走统一封装以继承超时与错误分类,并在预览固实包时提前说明原因。
新增
preview返回solid标记(从已有的7z l -slt属性段零成本读出),前端在预览固实包前提示「需先解压整个包,可能耗时较久」,不再让用户面对一次没有解释的长时间等待。
工程
runSevenZipSync新增encoding选项(默认 utf8,既有调用点行为不变),二进制预览(图片)不再需要绕过统一封装- 前端预览改为可取消,连点不会再同时跑起多个 7z
- 测试 258 → 269
说明
固实压缩包取出单个文件的耗时由算法决定,无法消除;本次改动把它从「无上界」变为「最多 45 秒 + 一句明确提示」。
CHzip 3.2
v3.2(2026-09-15)— 正确性 / 安全修复 + 工程加固
修复
- 进度条下方堆着一串百分比:7-Zip 在管道(非 TTY)下会把文件名行与进度行挤在同一行且没有
\r分隔,而百分比正则只在行首匹配 —— 于是解析器退化到「取行内第一个%」,把第一个0%之后的内容全当成了文件名。现在按「前后都是空白」识别进度百分比,并从扣掉百分比后的残余文本里取文件名;前端另加一道兜底。已在飞牛真机验证通过 - 任务永久卡在「排队中」:worker 启动阶段(读任务、打开源文件)抛错时进程以 0 退出,父进程无法感知失败,任务状态永远停在
queued。现在会落终态并以非 0 退出 - 分卷识别可被普通文件名打挂:
backup.20260915这类合法备份名会被当成 2000 万号分卷,info/preview需要分配近 2000 万元素的数组(实测峰值内存约 900 MiB;10 位数字直接 OOM)。分卷号与缺失枚举现在都有上界 - 诊断报告的授权目录被误脱敏:
authorizedRoots因敏感词子串匹配(authorized含auth)恒被替换成[REDACTED],导致诊断报告无法用于排查目录授权问题。顺带修掉含-p的路径被误伤 - 清理步骤相互干扰:解压收尾时若临时目录删除失败(权限异常),密码文件覆写与选择文件删除会被整体跳过;过期清理与 worker 并发删除时也可能让
extract/jobs请求报内部错误
工程
- 补齐
source/selection/diagnostics三个安全模块的单测(此前零直连测试) - 新增版本号一致性门禁:
manifest/package.json/index.html的?v=/ README 徽章与安装命令,漏改任一处npm test就会失败 - 新增 GitHub Actions CI(push / PR 跑
node --check+npm test) - 清理死代码(
parse-worker.js、不可达的configureVariant),constants.js成为常量的唯一来源 - 文档与实现对齐:
API.md删掉从未实现的verify端点,补上comment与preview-file
测试:172 → 258(+86)
安装
下载对应架构的 .fpk,在飞牛应用中心手动安装;校验和见 SHA256SUMS.txt。
CHzip 3.1
v3.1(2026-09-14)— 性能优化 + 清理
后端 — 解压吞吐
- 进度回写节流:由「每个 7z chunk 都落盘」改为「≥200ms 或百分比跳变 ≥1 才落盘」,热路径 payload 从 ~64KB 降到 <1KB
- 增量进度解析:createProgressTracker(StringDecoder + 增量解析),多字节字符不再乱码
- 列表校验进程内化:删掉 listing-validator.js 独立子进程,worker 直接 spawn 7z 流式校验
- 陈旧锁回收:worker 被 SIGKILL 后任务不再永久卡死(30s staleMs)
- 节流清理:cleanup.stamp 跨请求节流(≥60s),只在用户主动动作接口触发
- listAndTrimHistory:一次目录遍历同时完成溢出修剪与列出
- toJobView 投影:status 轮询不再回传 log/passwordFile 等内部字段
- api.js:--worker 分支惰性加载 worker 模块
前端 — 轮询与渲染
- 统一轮询器 createPoller:递归 setTimeout + in-flight 守卫 + 页面隐藏降频 + 空闲退避
- requestJson 超时 + AbortController
- 密码库读缓存:勾选不再触发全量 AES-GCM 解密
- 大文本预览截断:渲染 20000 行、高亮 3000 行(复制仍复制全文);escapeHtml 纯字符串替换
- 文件树:O(节点数) 预聚合、分批渲染、事件委托、勾选定向刷新
- 任务流按 job.id 复用行;任务中心渲染签名短路
- 12 个 script 加 defer
清理
- 删除 watcher.js、listing-validator.js、watcher.test.js 及多个死函数
- lib/ 模块数 20→18
测试:98→172(+74)
Bug fixes
- cleanupExpiredIfDue minIntervalMs:0 误触发节流
- ui-tree 分批渲染选中一致性测试断言
CHzip v3.0
优化ui界面圆角化;加入历史记录日期显示;加入历史记录主动清除按钮;修复进度条下方显示整串百分比(7-Zip 非 TTY 管道下多进度挤同行导致停在 0%);版本升至 3.0。含此前 v2.5–v2.9 全部改进。