Repository navigation
Releases
Releases · ColinYYCC/ImageAutoInserter---Public
v1.5.8
更新内容
进度管道内部整理:进度条"报数"在屏幕侧与 Python 侧的收发各自收拢为单一出口,删除三处重复节流和一处"睡 0.12 秒"的土办法补丁,散落各处的阶段百分比收成一张进度时间表。进度条的外在表现与之前完全一样(测试逐条锁定);新增约 20 个测试,Python 与 TypeScript 测试全绿。同期把 800 行的文件处理器拆成三个专门文件并删掉一份逐行重复的压缩包验证,6 条对外通道与界面行为一字不变;界面状态机也做了同样的收敛——"选完文件才能开始"的判定归一处、处理结果改为单一写入通道,迟到或重复的完成/报错在内部统一挡掉;"检查更新"的触发也从窗口管理模块上移到启动编排层,窗口模块不再反向知道更新模块的存在;"Python 怎么被找到并启动"同样归了堆——脚本查找、嵌入式解释器探测、首次启动的运行时解压收进一个专门文件,路径配置文件回归只管纯路径。
📝 更新日志 (Changelog)
🚀 优化改进 (Improvements)
进度接收端收拢为一处(屏幕侧):进度消息显示到界面前要经过的"翻译字段、掐节奏(100 毫秒一条)、防卡死闹钟、收尾清场"四件事原先散在三个文件里,排查任何进度显示问题都要翻三处;现全部收进一个专门文件(progress-relay.ts),并配接口测试逐条锁定原有行为。"进程结束后清掉残留定时器,防止完成页闪现旧进度"这层保护原先只靠回归测试间接看住,现成为该模块写明的职责
进度发送端收拢为一处(Python 侧):干活进程发出的每段进度原先要过三道各自为政的"节奏器",其中一道靠"发完睡 0.12 秒"的土办法防止 1%、2% 这类阶段值被下一条消息吞掉;现收拢为唯一出口(progress_emitter):统一掐节奏、保证进度数字只增不减(处理多个工作表时第二个表的行进度从 25% 重新爬,也不会让进度条倒退)、保证阶段值逐个送达不丢。删掉睡眠补丁后,启动阶段约 0.24 秒的人为等待也随之消失
百分比数字收成一张对照表:散落在代码各处的 9 个阶段百分比(2 / 5 / 14 / 15 / 20 / 72 / 92 及行进度区间的 25→70)统一收进编排器顶部的一张进度时间表,想核对或调整进度节奏只看这一处;数值原样,界面表现不变
进度消息的线上格式加了"防改动"锁:后台与界面之间传的进度消息字段集合原先没有测试看住,字段名一旦改动界面会静默拿到空值(1.5.7 修过一次这类字段名不一致);现补了字段集合锁定测试,同时把"Rust 迁移计划"文档里与现状不符的三处描述改正
800 行文件处理器拆成三块(目录浏览 / 盘符卷枚举 / 来源验证):这份代码原先把三件不相干的事挤在一个文件里:浏览文件夹的缓存与过滤、Windows/macOS 两套"找 U 盘"的探测逻辑、图片来源检查,改哪件都要在 800 行里找位置;现拆成三个专门文件,对外 6 条通道的名字与行为一字不变,35 个既有界面行为测试原样通过
删掉一份逐行重复的压缩包验证:检查 RAR 和检查 ZIP/7Z 的代码原先各写一份,连"没有找到支持的图片文件"的提示文案都抄了两遍,改一处很容易漏另一处;现归一为"两个压缩包列举器 + 一套计数与文案",提示文案从此只有一份,并用测试逐字锁定
文件选择相关补上测试:盘符列表的 CSV 解析、盘符条目构建、文件夹图片扫描计数、各类验证失败提示原先都没有测试;现补 13 个测试盖住这些纯逻辑与文案
界面状态机的判定规则收成一处:"两个文件都选好才能开始处理"的判定,原先在四个界面动作里各抄一遍、写法还两两不一样(选 Excel 只看图片那半边验证过没有,选图片只看 Excel 那半边);现收敛为状态库内两个纯函数判定,各入口的历史差异逐字保留(界面表现不变),以后调整规则只动一处
处理结果改为单一写入通道:"处理完成"会经两条路送到界面(后台主动推送 + 操作返回值),原先两条路各自抄一遍"别重复显示"的判断、规则还不一致;现在两条路都走状态库的同一个写入口,防重复守卫只写一遍(取消/重置后迟到的结果、双通道重复的完成或报错都在里面挡掉),顺带删掉了不再需要的独立会话写入接口
"检查更新"的触发点归位到启动编排:窗口管理模块原先要反过来知道更新模块(加载完成后 3 秒替它触发检查、把窗口递给它发通知),层级倒挂;现两处接线都上移到启动编排层,窗口模块彻底不知道更新模块的存在,6 条更新通知通道与触发时机一字不变;版本号比较同步抽成可独立测试的纯函数(补 4 个边界测试)
Python 运行环境引导归堆:"Python 怎么被找到并启动"原先散在四个文件里,一段 150 行的首次启动解压流程还寄居在"路径配置"文件里;现收进一个专门文件(python-runtime.ts):脚本三级查找、嵌入式解释器探测、运行时解压(含防重复触发与 2 分钟超时)都在一处,路径配置文件回归只管纯路径解析。依赖方向单向(运行时引导 → 路径配置),所有查找候选顺序、解压条件、探测优先级逐字保留
验证通过的对勾加淡入动画:两个文件都选好的一瞬间,对勾原先"啪"地弹出,与按钮亮起叠在一起显得界面闪了一下;现对勾以 0.25 秒淡入缩放呈现,并遵循系统"减弱动态效果"偏好
🐞 修复问题 (Bug Fixes)
结果页统计不再把表尾落款行当成货物:装箱单底部的公司落款/签字行(写了公司名但没有商品编码)原先被当成一行货计入"总计":找不到图、不算成功也不算失败,但占着总数名额,导致"总计 49、成功加失败只有 47"这种对不上账的困惑。现在编码格真正为空的行不计入总数,同时在处理日志里明说"第几行没有商品编码,未计入统计",真漏填编码的货不会被悄悄吞掉;商品编码是公式(如 VLOOKUP 查表)的行不受影响,照常识别
📥 下载地址 (Downloads)
| 🖥 Platform | 📦 Download |
|---|---|
| ImageAutoInserter-1.5.8-arm64.dmg | |
| ImageAutoInserter-Setup-1.5.8.exe |
Full Changelog: ColinYYCC/ImageAutoInserter@v1.5.7...v1.5.8
v1.5.7
更新内容
打包提速与界面专项治理:Windows 运行时压缩包加入复用缓存,内容没变时打包直接复用;对全部界面做一次审查后集中修复 13 项体验缺陷(超长文件名压住验证图标、日志窗口自动刷新拽人回底部、指引焦点环不可见等),清理一批界面死代码,补齐读屏播报,并为正式版启用内容安全策略。
📝 更新日志 (Changelog)
✨ 改进与优化 (Improvements)
打包提速:Windows 运行时压缩包可复用:每次打包都会从头重建内含 Python 环境的
python-win.7z(约 2 分钟),哪怕相关内容一个字没改。现构建完成后把成品存入.cache/复用缓存(该目录不会被打包前的清理删除),下次打包时只要依赖清单和构建脚本都没改过,直接从缓存恢复(实测 0.2 秒);任何一方有改动都会自动触发重建,不会误用过期缓存。缓存写入采用"先写临时文件再改名",构建中途被强行中断也不会留下半个坏缓存被后续打包误用全量死代码清理(约 3300 行):对全部代码做"有没有人用它"逐项核查后删除:整条本地发版脚本(已被 GitHub 自动打包取代,且一半功能早已失效)、4 条界面上没有任何按钮会调用的后台通道("打开输出文件"走的是另一条路、"另存为"是旧方案遗留、"打开发布页"下载按钮用的是别的通道、"读取/修改日志级别"日志窗口从不用)、一套只被自己测试引用的"自动恢复/熔断"组件、平台配置层里只在启动时空耗时间探测 Python 却无人读结果的整层结构、Python 端从未接入的图片字节缓存与图片验证链、一批一次性诊断脚本和指向不存在文件的配置。程序行为完全不变,仅删除确认无任何调用方的代码
修正配套引用:README 移除已删发版命令的说明、测试中针对已删接口的用例同步移除、依赖清单移除唯一消费者已删除的 ts-node
合并重复代码(9 处归一,净 -137 行):杀后台进程的命令原先在三个文件各写一份、两个构建脚本各自养一套工具函数(拷目录/清目录/字节格式化等)、"拷 Python 源码"写了两遍且打包流程里那次是白干的、检查更新下载逻辑约 150 行复制粘贴、找 Python 的探测同一函数内抄两遍、文件类型清单抄了三四份、文件大小格式化两份、界面两个一模一样的错误回调、文件浏览器里"加载列目录"写了三份——各自合并为一份,公共行为取各份实现的并集。附带两处可见的小统一:日志/更新里的文件大小显示统一为带空格的"1.5 MB"样式;杀进程超时统一为 5 秒
拆除"为以后准备"的空架子(9 项,净 -165 行):零行为差异的文件"5 档自适应"分档(没有任何一档行为不同,相关预留参数 6 处检查永不触发)、只有一个使用者的验证注册框架(改为普通函数,并把名不副实的旧测试文件重写成 16 个真测试)、进度条 4 个从没人传的参数、列宽钩子的空壳配置、构建脚本里注释自认"不需要"却每次打包空转的函数、选文件组件里永远走不到的系统对话框分支、更新通知里只写不读的状态字段、系统信息模块里永远走不到的 Linux 分支;同时按平台约定清理约 19 处注释里的"Linux"字样(保留两处刻意设计:防止 Linux 版压缩工具混进安装包的排除规则、比实际平台更宽的路径脱敏兜底)
🐞 修复问题 (Bug Fixes)
日志窗口搜索每个按键都查一次:搜索框的"防抖"是个空壳:延迟回调里什么都没做,输入更新是即时的,结果每敲一个键就向后查一次日志,输入长关键词时产生大量无效查询。现已实现真实防抖:停止输入 300 毫秒后才发起一次查询,并新增回归测试锁定该行为
进度数据字段名前后不一致:后台发给界面的进度数据里"当前行号"字段用的是驼峰命名,界面侧的类型声明却写成下划线命名(该字段当前没有任何界面使用,用户无感知);已统一命名,避免将来使用时拿到空值
超长文件名与验证图标叠在一起:文件选择框在验证通过后本应给右侧的绿色图标留出 32 像素空位,但这条"留空位"规则写在了基础样式前面,被后面的整体内边距声明覆盖,从未生效过——文件名一长,文字就一直画到图标底下(用户实测截图确认)。现调整规则顺序让空位真正生效,超长文件名截断显示省略号
日志窗口三个体验问题集中修:① ✕ 关闭按钮悬在窗口正中央:标题、关闭按钮、工具栏三个元素用"两端分散"布局,中间项被挤到水平居中,现 ✕ 移到工具栏末尾,窗口同时改为全屏面板并支持 Esc 关闭;② 翻看历史日志时被强行拽回底部:每 3 秒自动刷新后无条件滚到最新一条,正在往上翻的用户根本没法看,现只在停留在底部附近时才自动跟随;③ 清空/导出/加载失败全部无声无息:失败只写程序内部日志,界面毫无反应,现显示可关闭的红色错误横幅,"清空"也改为两段式确认(点一次变成"确认清空?",再点才执行)
处理中点"取消"失败没有任何反应:取消请求失败只写程序内部日志,界面停在"处理中"一动不动,用户不知道发生了什么;现在会显示"取消失败,请稍后重试"
文件路径框看起来能点其实不能点:路径框鼠标悬停变色、光标变手型,但点击毫无反应,必须点右边的"浏览"按钮;现在点击输入框直接弹出文件浏览窗口,行为与光标暗示一致
文件浏览窗口重新打开显示过期列表:浏览窗口只初始化一次,关闭再打开不会刷新,外部新增或删除的文件要等最多 5 秒轮询才出现;现在每次打开立即刷新
Excel 浏览与验证规则打架:浏览窗口允许选 .xls / .csv 文件,选完验证却按"只支持 .xlsx"拒绝,能选不能过;现两边规则对齐
操作指引三处问题:① ✕ 关闭按钮的键盘焦点环是棕色描边叠在棕色标题条上,键盘用户完全看不见焦点在哪,改用反白描边;② 窗口缩放或页面滚动后,棕色高亮框留在原地指向已移走的位置,现跟随窗口缩放与页面滚动重新定位;③ 欢迎弹窗没有焦点管理,Tab 会穿透到被遮住的底层界面、Esc 也收不到,现焦点锁在弹窗内
错误页"返回重试"名不副实:这个按钮实际会清空全部已选文件(要重新选、重新验证),文案却暗示"重试一次";文案改为"返回"
界面文字与配色统一:主界面副标题是英文长句其余全是中文(改中文);作者署名一处"Colin"一处"Colin Ruan"(统一为前者);启动画面的转圈是蓝色、与整体暖棕色系脱节(统一主题色)
文件选择状态机保护不一致:更换文件的两个入口会无条件改写处理阶段,另外两个入口却有"处理中不受影响"的保护,写法不统一埋着隐患(目前靠按钮禁用挡住);已统一补上保护
引导状态写入不规范:引导翻页把"写存储"塞进了界面状态的计算函数里,开发模式下该函数会跑两遍、写入也跟着双跑(写入值相同所以无实际损害);重构为规范写法,行为不变
✨ 改进与优化 (Improvements)
进度条动画到站即停:动画循环在进度到位后仍每帧空转、持续占用渲染进程算力;现到达目标即停止,有新目标再启动
UI 死代码清理:删除永远不会触发的窄窗口适配样式(程序窗口最小宽度锁在 900 像素,375/479/639px 的手机断点永远不会生效)、从未被引用的样式块与设计变量、两份完全相同的图标(错误图标与叉圈图标一模一样,合并为一份)、样式表里先写后覆盖的重复声明、从未被使用的处理阶段定义
♿ 无障碍 (Accessibility)
处理成功与更新通知现在会被读屏软件自动播报:此前只有错误提示会播报,成功页和顶部滑入的更新通知对屏幕阅读器完全静默;现已对称补齐
补齐读屏名称:验证失败时的"清空重选"小图标按钮此前只有悬停提示(读屏软件读不到用途)、日志搜索框没有关联标签,均已补上
禁用输入框光标改为"禁止"样式:与不可点击的行为保持一致,不再误导
🔒 安全 (Security)
正式版启用内容安全策略(CSP):限制页面只能加载应用自身的资源,为将来可能的注入类风险加一道闸(开发模式因热更新依赖内联脚本暂不启用)
外部链接一律用系统浏览器打开:更新说明里若包含外部链接,此前点击可能在应用窗口内跳转导致整个界面白屏;现应用内导航被拦截,外链交给系统浏览器
📥 下载地址 (Downloads)
| 🖥 Platform | 📦 Download |
|---|---|
| ImageAutoInserter-1.5.7-arm64.dmg | |
| ImageAutoInserter-Setup-1.5.7.exe |