Skip to content

Releases: luckwalter/JavSP-fork

JavSP-fork v0.4.8

Choose a tag to compare

@luckwalter luckwalter released this 28 Oct 23:52

JavSP-fork v0.4.8 — 五大翻译通道全量加固

一次性把 Google / 百度 / Bing / Claude / OpenAI 兼容(含本地 Ollama、LM Studio)五个通道
各自的历史缺陷集中修掉,并把散落各处的「是否走代理」收敛成一个用户可手动选择的开关。
随后又跑了一轮安全与性能审查,把查出的 7 项缺陷(B-014 ~ B-020)一并修完。

⚠️ 测试状态(务必先读)

本版本改动面较大,维护者没有能力对所有通道做端到端实机验证 —— 百度 / Bing / Claude
等通道需要付费账号或额度,目前暂时测不了。已完成的是离线验证:

  • 回归测试 108 项全部通过(原 66 项 + 新增 42 项),全部 mock、不联网;
  • 仅 Google 通道做过真实连通性验证。

也就是说:除 Google 外的四个通道,修复效果是「按官方文档与代码缺陷推导」的结果,
还没有真机跑通记录。

📮 欢迎反馈各通道实测结果(最好带 log)

无论成功失败,都欢迎开 issue 反馈,这直接决定后续修复优先级。请带上:

要提供什么 说明
引擎 + 关键配置 如 baidu、bing(region=eastasia)、claude(model=...)、openai(url=局域网 Ollama)
目标语种 / 是否勾选「使用统一代理」 这两项决定走哪条分支
界面报错原文 设置页「测试」按钮的返回结果即可
日志片段 桌面版:运行目录 JavSP.log;Docker:docker logs javsp。logger 名 javsp.web.translate

脱敏提醒:贴配置和 log 前请先自行替换 app_id / api_key / 代理地址 / 局域网 IP。

各通道要点

  • Google:429 退避不再全局累加(旧实现一次限流后所有后续请求都被拖长);
    错误码不再 KeyError;非 JSON 响应(拦截页)转为可读报错。
  • 百度:错误码汉化(54003: Invalid Access Limit → 「访问频率受限(QPS 超限)…」);
    QPS 节流改为锁内预约时间槽(旧实现多线程下形同虚设),新增 qps 配置;
    无 trans_result 时不再静默产出空译文。
  • Bing:女优名用动态词典保护 + XML 属性转义;新增 region 配置(单服务资源必填,
    否则 401001 无从排查);空响应不再 IndexError;NFO 原文断句不再被词典标记污染。
  • Claude / OpenAI:Claude 默认模型从已被官方硬退役的 claude-3-haiku-20240307
    换成 claude-haiku-4-5-20251001,model 可自行指定;OpenAI 兼容端 api_key 可留空
    (本地 Ollama / LM Studio 不需要鉴权)。
  • 共性:长文本按引擎上限自动分段再拼接;新增 sqlite 翻译缓存(key 含引擎+模型+语种+
    prompt+文本,换模型/改提示词自动失效,只缓存成功结果);「使用统一代理」开关通用化,
    对所有引擎一视同仁。
  • 设置页:新增「测试」按钮 —— 用尚未保存的界面配置真实跑一次翻译,保存前即可
    确认引擎/密钥/端点/代理是否配对。

第二轮加固(B-014 ~ B-020)

编号 问题 修法
B-014 「测试」端点可被当作回显型 SSRF 与配额消耗器;pydantic 报错会回显含 api_key 的输入 URL 只允许 http(s)、屏蔽云元数据地址、同客户端 3 秒最小间隔、报错只回显字段位置与原因
B-015 Bing 女优名标记互为子串时嵌套,产出畸形 XML 按长度降序 + 一次性正则替换
B-016 Google 成功路径固定 sleep(4) 且按段计;429 退避无总预算 改引擎级 2 秒节流(线程共享);退避加 120 秒累计预算
B-017 Google 单段 6000 字节 → URL 膨胀到约 18K 字符 上限收紧到 1800 字节
B-018 异常信息里带出完整 URL(百度 appid/sign 在查询串上) 统一抹掉 URL 查询串并截断
B-019 翻译缓存无条数上限;清理后不 VACUUM,占用字节纹丝不动 上限 20000 + 淘汰最旧;清理后 VACUUM
B-020 分段拼接丢换行,百度段落语义丢失 百度按换行拼接,Google / Bing 保持空串

B-014 取舍:没有禁掉私有 / 回环网段 —— 禁掉会直接废掉本地与局域网 Ollama 这个核心
场景,只挡云元数据地址。要真正防「别人用你的额度」,请设置 JAVSP_AUTH_PASSWORD 开启认证。

升级说明

  • 旧配置无需改动即可升级:所有新字段都有兼容默认值。
  • Docker:docker load 镜像 tar.gz 后重建容器即可(配置在挂载卷,不受影响)。
  • Windows:下载 zip 覆盖安装目录(config.yml 与会话不会被覆盖)。
  • ⚠️ v0.4.5 之前的版本内置升级助手有缺陷,从那些版本点「立即升级」会失败,
    需手动下载 zip 覆盖一次,之后即可正常一键升级。

资产

文件 说明
JavSP-0.4.8-windows.zip Windows 桌面版(便携,解压即用)
javsp-fork-0.4.8-image.tar.gz Docker 镜像(docker load 后使用)
javsp-fork-0.4.8.sha256 上面两个资产的 SHA-256 校验值

JavSP-fork v0.4.7

Choose a tag to compare

@luckwalter luckwalter released this 26 Oct 09:40

JavSP-fork v0.4.7 发布说明

派生自 Yuukiy/JavSP 的带 WEBUI 刮削器。本版本是一个纯修复版本:
修复「立即升级」失败后旧版本被藏进子目录、主目录看起来像文件全被删的问题。
无新增功能,Windows 桌面版可平滑升级。

本次要点

修复:升级失败后,文件"消失"实则被藏起来了

现象

在网络驱动器上点「立即升级」后,主目录里 JavSP.exe、config.yml、update/ 全部消失,只剩一个空的 _internal。数据其实完好,被移到了下一层目录:Downloads/JavSP/JavSP.bak/。

根因(两个缺陷叠加)

① 网络驱动器上整目录改名不可靠
QNAP 的 Downloads 共享(/share/Downloads 是符号链接 → CACHEDEV2_DATA/Downloads)拒绝枚举深层目录,Move-Item 改名运行目录时报「对路径 …\_internal 的访问被拒绝」,10 次重试全部失败。
(旁证:NAS 服务端 getfacl 显示权限完全正常,但 SMB 客户端一列该目录即被拒;单文件读取却正常 —— 纯 SMB 目录枚举问题,与权限无关。)

② 回滚逻辑写错了
Move-Item -Path $bak -Destination $exeDir 缺 -Force。此时目标目录已被复制步骤重建,于是该命令不是"替换",而是把备份移进该目录 → 变成 JavSP/JavSP.bak/,主目录因此"空无一物"。

修复

  • 枚举预检(动数据之前):先用一次目录枚举探路。若"目录里有 exe 却列不出任何条目",说明该路径不支持改名,立即中止升级,一个字节都不动,并明确提示改用本地磁盘运行或手动下载 zip 覆盖。
  • 回滚不再嵌套:先把不完整的新目录挪到 <运行目录>.failed,再把备份带 -Force 移回原位。
  • 失败必留路径:无论成败,catch 块末尾都输出「运行目录 / 旧版备份 / 不完整副本」三个路径,并提示"若主目录里找不到 exe,请到旧版备份路径取回"。

安装 / 升级

Docker(推荐,NAS / 服务器)

docker load -i javsp-fork-0.4.7-image.tar.gz
docker restart javsp

容器内版本以 /api/health 返回的 version 为准;界面右下角显示版本号。

Windows 桌面版

  1. 下载 JavSP-0.4.7-windows.zip,解压到任意目录(便携,exe 同级即数据目录)。
  2. 升级已有安装:启动旧版 → 设置页「软件更新」→「立即升级」会自动完成下载、替换并保留 config.yml / .sessions.json / JavSP.log;或直接把新 zip 内容覆盖到旧目录(保留旧 config.yml)。
  3. 首次使用请把自己的 config.yml 放到 exe 同级。

强烈建议:桌面版装在本地磁盘(如 C:\JavSP)运行。
网络驱动器上的"整目录改名"类操作不可靠,升级必然失败。
NAS 上请用 Docker 形态。v0.4.7 起,升级助手会在动数据之前自行检测并中止,
不会再出现"文件看起来全没了"的情况,但升级仍需手动覆盖。

校验

下载后可用发布资产 javsp-fork-0.4.7.sha256 核对(含 windows.zip 与 image.tar.gz 两个值):

sha256sum -c javsp-fork-0.4.7.sha256

回归验证

  • 6 个指定回归用例文件 + 缩略图用例 + 本次新增 3 项,共 60/60 通过。
  • Windows 桌面版 exe 实跑:/api/health 返回 version=0.4.7、status=ok;
    生成的升级助手脚本确认含枚举预检(Get-ChildItem)与不嵌套回滚(.failed)。
  • NAS 部署后 /api/health 返回 version=0.4.7、container=true;前端资产名与构建一致;
    容器内 update.py 确认含预检与 .failed 回滚逻辑;挂载卷 config.yml 未被改动。

附注

  • 本版本 Docker 端仅同步源码(含本次修复),无容器运行时行为变化。
  • 历史 CHANGELOG 中保留的早期部署位置描述(如本机安装目录、网盘共享名)属已发布记录,本次未做破坏性清洗。
  • 完整变更见仓库 CHANGELOG_FORK.md 的 v0.4.7 段。

JavSP-fork v0.4.6

Choose a tag to compare

@luckwalter luckwalter released this 26 Oct 09:01

JavSP-fork v0.4.6 发布说明

派生自 Yuukiy/JavSP 的带 WEBUI 刮削器。本版本为功能增强版:
「结果审阅」页新增各渠道封面缩略图,让不同来源的封面能并排比对,
不用等整理落盘后才发现选错了图;并配套一套可管理的本地缓存。
无破坏性变更,Docker 与 Windows 桌面版均可平滑升级。

本次要点

审阅页渠道封面缩略图

原审阅页只列出各渠道的标题与贡献字段,无法判断"哪个源给的封面更好看" —— 往往要等到整理落盘后才发现选错了图。

现在每个有贡献的渠道前面会显示一张该站自己的封面小图,并排比对哪个源更清晰、构图更好。

  • 懒加载:页面滚动到哪才拉哪,不拖慢审阅页打开速度
  • 本地缓存:原图缩到 120px 宽存为 jpg —— 实测 35KB 原图 → 4.3KB 缩略图,同一张图只下载一次
  • 零新增依赖:缩放用的是项目本就有的 Pillow
  • 取不到也不影响:某个源取图失败只显示占位块,刮削与审阅流程照常

缓存管理(设置 → 软件更新 页底部新增「封面缓存」区)

能力 说明
缓存统计 已缓存张数 / 占用空间 / 最早缓存时间 / 目录路径
立即清除 一键清空全部缩略图缓存
自动清理 开关 + 保留天数(默认 7 天,启动时清理超期文件)
缓存目录 可显式指定,留空则自动判定

缓存位置

形态 默认目录
容器(Docker / NAS) /data/.javsp_cache/thumbs
Windows 桌面版 exe 同级 cache/thumbs

容器侧刻意用点开头的隐藏目录 —— /data 是媒体库挂载点,隐藏目录可确保 Jellyfin / Emby / Kodi 默认跳过,不会把缓存混进媒体库索引;该目录随共享持久化,容器重建后缓存仍在。

⚠️ 清理只删缩略图缓存目录内的文件,绝不会删除已整理到媒体库的封面。

新增配置项

写入 config.yml(新增 cache 组):

cache:
  thumbs_dir: ''      # 留空 = 自动判定
  auto_clean: true
  retention_days: 7

顺带修复

站点数据透传原先只给前端 has_cover 布尔标记,各站封面 URL 根本没传出去 —— 现补上 cover 字段(仅在该站确实有封面时给出)。

安装 / 升级

Docker(推荐,NAS / 服务器)

docker load -i javsp-fork-0.4.6-image.tar.gz
docker restart javsp

容器内版本以 /api/health 返回的 version 为准;界面右下角显示版本号。

Windows 桌面版

  1. 下载 JavSP-0.4.6-windows.zip,解压到任意目录(便携,exe 同级即数据目录)。
  2. 升级已有安装:启动旧版 → 设置页「软件更新」→「立即升级」会自动完成下载、替换并保留 config.yml / .sessions.json / JavSP.log;或直接把新 zip 内容覆盖到旧目录(保留旧 config.yml)。
  3. 首次使用请把自己的 config.yml 放到 exe 同级。

v0.4.5 及更早版本请直接下载本版 zip 手动覆盖一次 —— 那些版本自带的升级助手有缺陷,
从它们点「立即升级」会失败。v0.4.5 起一键升级才真正可用。

校验

下载后可用发布资产 javsp-fork-0.4.6.sha256 核对(含 windows.zip 与 image.tar.gz 两个值):

sha256sum -c javsp-fork-0.4.6.sha256

回归验证

  • 6 个指定回归用例文件 + 新增缩略图用例共 57/57 通过。
  • 端到端走真实 HTTP 链路:640×960 原图 → 120×180 JPEG(430 字节)、缓存命中不重复下载、
    非法协议返回 404、DELETE 清空后计数归零,全部通过。
  • 真实外网拉取验证:35KB 原图 → 120px 宽 / 4.3KB 缩略图。
  • Windows 桌面版 exe 实跑:/api/health 返回 version=0.4.6、status=ok;
    /api/cache/thumbs 返回 auto_clean=true、retention_days=7、目录落在 exe 同级 cache/thumbs。
  • NAS 部署后 /api/health 返回 version=0.4.6、container=true;前端资产名与构建一致;
    挂载卷 config.yml 未被改动。

附注

  • 本版本 Docker 端仅同步源码(含本次功能),无容器运行时行为变化。
  • 历史 CHANGELOG 中保留的早期部署位置描述(如本机安装目录、网盘共享名)属已发布记录,本次未做破坏性清洗。
  • 完整变更见仓库 CHANGELOG_FORK.md 的 v0.4.6 段。

JavSP-fork v0.4.5

Choose a tag to compare

@luckwalter luckwalter released this 26 Oct 03:55

JavSP-fork v0.4.5 发布说明

派生自 Yuukiy/JavSP 的带 WEBUI 刮削器。本版本修复一个影响所有使用场景的缺陷:
桌面版「立即升级」此前在任何路径下都必然失败(本地盘与网络驱动器同样中招)。
无新增功能,Docker 与 Windows 桌面版均可平滑升级。

本次要点

修复:桌面版「立即升级」必然失败

现象

  • 本地盘(C:\JavSP):无法移动项,因为"C:\JavSP"处的项正在使用中 —— 连续 3 次升级全部失败。
  • 网络驱动器(\\HOMENAS\Downloads\JavSP):另一个进程正在使用此文件 —— 上一版引入的 10 次重试全部失败。

真正根因(与网络驱动器、WebView2 进程都无关)

升级流程第一步要把整个运行目录改名备份以完成替换,而升级助手却把自己的脚本、日志、安装包全部生成在这个目录内部:

  • 写日志时 运行目录/update/apply_update.log 处于打开状态;
  • 助手进程的工作目录继承自主进程(未显式设置 cwd),可能落在运行目录内。

Windows 上,只要待移动目录子树内存在未共享删除权限的打开句柄,或进程工作目录指向该目录,
该目录自身即处于"使用中",重命名必然失败 —— 与网络驱动器无关,本地盘同样中招。

(此前把根因归为「SMB 锁更粘」和「WebView2 孤儿进程」是误判:重试从不可能恢复。)

证据链(最小复现实验)

实验 条件 结果
C 干净目录 改名成功(基线)
B 目录内有打开的文件句柄 失败 拒绝访问;关闭句柄后成功
A 子进程工作目录指向待移动目录 失败 另一个程序正在使用此文件
D 目录内有正在执行的 .ps1 成功(排除此项)

对照实验:原版助手在副本上跑 → 复现上述日志原文;修复版 → 一次移动成功,落地新版本。

修复

  • 助手的脚本 + 日志 + 安装包 + 进程工作目录全部搬到系统临时目录下的独立工作区,
    与待升级目录彻底隔离 —— 待移动目录里不再留有任何助手正在使用的文件。
  • 安装包改为搬移(而非复制)进工作区,升级后原位置不留残余。
  • 助手收尾时清理旧目录遗留的 update/。
  • 新增 5 项回归用例锁死这些隔离不变量,防止再犯。

安装 / 升级

Docker(推荐,NAS / 服务器)

docker load -i javsp-fork-0.4.5-image.tar.gz
docker restart javsp

容器内版本以 /api/health 返回的 version 为准;界面右下角显示版本号。

Windows 桌面版

  1. 下载 JavSP-0.4.5-windows.zip,解压到任意目录(便携,exe 同级即数据目录)。
  2. 升级已有安装:启动旧版 → 设置页「软件更新」→「立即升级」会自动完成下载、替换并保留 config.yml / .sessions.json / JavSP.log;或直接把新 zip 内容覆盖到旧目录(保留旧 config.yml)。
  3. 首次使用请把自己的 config.yml 放到 exe 同级。

若旧版升级曾失败并留下残留目录,可先把旧目录整个改名备份(例如 JavSP → JavSP_old),
再解压新版到 JavSP,然后把旧目录里的 config.yml 复制回来。

校验

下载后可用发布资产 javsp-fork-0.4.5.sha256 核对(含 windows.zip 与 image.tar.gz 两个值):

sha256sum -c javsp-fork-0.4.5.sha256

回归验证

  • 6 个指定回归用例文件共 47/47 通过(新增 5 项针对本次缺陷)。
  • 端到端真实验证:在 C:\JavSP 的副本上走完整生产路径完成一次真实升级 ——
    0.4.2 → 0.4.4 升级成功,旧目录已改名备份,config.yml 完整保留,
    升级日志中无任何 Move-Item 重试。
  • Windows 桌面版 exe 实跑验证:/api/health 返回 version=0.4.5、status=ok。
  • NAS 部署后 /api/health 返回 version=0.4.5、container=true;前端资产名与构建一致;挂载卷 config.yml 未被改动。

附注

  • 本版本 Docker 端仅同步源码(含本次修复),无容器运行时行为变化。
  • 历史 CHANGELOG 中保留的早期部署位置描述(如本机安装目录、网盘共享名)属已发布记录,本次未做破坏性清洗。
  • 完整变更见仓库 CHANGELOG_FORK.md 的 v0.4.5 段。

JavSP-fork v0.4.4

Choose a tag to compare

@luckwalter luckwalter released this 26 Oct 03:21

JavSP-fork v0.4.4 发布说明

派生自 Yuukiy/JavSP 的带 WEBUI 刮削器。本版本是纯修复版本:把桌面版在**网络驱动器(网盘 / UNC 路径)**下
「立即升级必定失败」的问题修好并带入发布资产;无新增功能,Docker 与 Windows 桌面版均可平滑升级。

本次要点

修复:网盘 / UNC 路径下桌面版无法升级

现象

在网络驱动器上运行的桌面版点「立即升级」后:检查新版本正常、安装包正常下载、主程序也确实退出了,
但程序停在那里不回来、目录也没有被替换——点了升级等于没升。

根因(两个原因叠加,只在网络驱动器上暴露)

  1. 文件锁:桌面壳用的 pywebview 退出后经常残留 msedgewebview2.exe 孤儿进程,仍锁着 _internal/webview 下的文件。
    升级要把整个运行目录改名备份来完成替换,在本地磁盘上偶发失败还能靠等待重试蒙混过去,
    但在 SMB 网络路径上文件锁更"粘",目录改名几乎必然失败。
  2. 失败残留目录的权限异常:一旦某次升级中途失败遗留的 update/ 目录,其在 NAS 一侧的访问权限会变成异常状态,
    SMB 客户端对它直接"拒绝访问",导致后续每一次升级都卡在目录改名那一步。

修复

  • 升级助手在移动旧目录之前,主动结束残留的 msedgewebview2 进程释放文件锁。
  • 目录改名包进最多 10 次的重试循环:每次失败都记录原因、再次清锁、等待 2 秒后重试;
    10 次仍失败才判定为"被其他程序占用"并中止,不再无声失败。
  • 启动新版本改为容错:网络路径下偶发启动失败不再触发"假回滚"(把已装好的新版本又换回旧版)。

建议

桌面版优先装在本地磁盘(如 C:\JavSP)运行,网络驱动器只作为例外。
本次修复让网盘路径下的升级"基本可靠",但本地盘才是治本方案——
网络驱动器自身的文件锁与权限行为不可控,升级只是被修复到不再必然失败。

安装 / 升级

Docker(推荐,NAS / 服务器)

docker load -i javsp-fork-0.4.4-image.tar.gz
docker restart javsp

容器内版本以 /api/health 返回的 version 为准;界面右下角显示版本号。

Windows 桌面版

  1. 下载 JavSP-0.4.4-windows.zip,解压到任意目录(便携,exe 同级即数据目录)。
  2. 升级已有安装:启动旧版 → 设置页「软件更新」→「立即升级」会自动完成下载、替换并保留 config.yml / .sessions.json / JavSP.log;或直接把新 zip 内容覆盖到旧目录(保留旧 config.yml)。
  3. 首次使用请把自己的 config.yml 放到 exe 同级。

校验

下载后可用发布资产 javsp-fork-0.4.4.sha256 核对(含 windows.zip 与 image.tar.gz 两个值):

sha256sum -c javsp-fork-0.4.4.sha256

回归验证

  • 6 个指定回归用例文件共 42/42 通过。
  • Windows 桌面版 exe 实跑验证:/api/health 返回 version=0.4.4、status=ok,更新端点 current=0.4.4。
  • NAS 部署后 /api/health 返回 version=0.4.4、container=true;前端资产名与构建一致;挂载卷 config.yml 未被改动。

附注

  • 本版本 Docker 端仅同步源码(含本次修复),无容器运行时行为变化。
  • 历史 CHANGELOG 中保留的早期部署位置描述(如本机安装目录、网盘共享名)属已发布记录,本次未做破坏性清洗。
  • 完整变更见仓库 CHANGELOG_FORK.md 的 v0.4.4 段。

JavSP-fork v0.4.3

Choose a tag to compare

@luckwalter luckwalter released this 26 Oct 00:18

JavSP-fork v0.4.3 发布说明

派生自 Yuukiy/JavSP 的带 WEBUI 刮削器。本版本聚焦安全 / 性能加固、全库去死代码与脱敏终扫,
无破坏性功能变更;Docker 与 Windows 桌面版均可平滑升级。

本次要点

安全 / 性能加固(B-001 ~ B-010,按批次)

  • 第一批:下载产物做 sha256 校验(失败拒绝落地);网络请求统一走 tls_verify() 不再默认关闭证书校验;路径白名单比较补齐大小写归一,避免大小写绕过。
  • 第二批:更新页版本号兜底(接口层级取错时回退到可用字段);封面引擎字段修正;高危更新端点(/api/update/download、/api/update/apply)强制会话校验,仅回环地址无条件放行以保证桌面版一键升级。
  • 第三批:命名预览由横向改为纵向堆叠(长命名规则不再被挤变形);解压流程加 zip slip 防护(禁止 ../ 越界写出);关机逻辑按平台分支处理并对取版本号增加容错;附带修正源码模式下 CLI 自动更新重命名自身解释器导致自毁的路径。

去死代码(22 项)

全库 vulture(min-confidence 60)+ pyflakes 扫描,移除上游遗留、从未被调用的空函数 / 废弃导入 / 无效分支共 22 处;无功能行为变化,仅清理。

脱敏终扫

测试文件中残留的本地内网地址示例改为 RFC 5737 文档保留段(198.51.100.0/24),避免真实内网信息随仓库发布。

安装 / 升级

Docker(推荐,NAS / 服务器)

docker load -i javsp-fork-0.4.3-image.tar.gz
docker restart javsp

容器内版本以 /api/health 返回的 version 为准;界面右下角显示版本号。

Windows 桌面版

  1. 下载 JavSP-0.4.3-windows.zip,解压到任意目录(便携,exe 同级即数据目录)。
  2. 升级已有安装:启动旧版 → 设置页「软件更新」→「立即升级」会自动完成下载、替换并保留 config.yml / .sessions.json / JavSP.log;或直接把新 zip 内容覆盖到旧目录(保留旧 config.yml)。
  3. 首次使用请把自己的 config.yml 放到 exe 同级。

校验

下载后可用发布资产 javsp-fork-0.4.3.sha256 核对(含 windows.zip 与 image.tar.gz 两个值):

sha256sum -c javsp-fork-0.4.3.sha256

回归验证

  • 6 个指定回归用例文件共 42/42 通过。
  • NAS 部署后 /api/health 返回 version=0.4.3、container=true;前端资产名与新构建一致;挂载卷 config.yml 未被改动。

附注

  • 历史 CHANGELOG 中保留的早期部署位置描述(如本机安装目录、网盘共享名)属已发布记录,本次未做破坏性清洗。
  • 完整变更见仓库 CHANGELOG_FORK.md 的 v0.4.3 段。

JavSP-fork v0.4.2

Choose a tag to compare

@luckwalter luckwalter released this 25 Oct 17:34

JavSP-fork v0.4.2

修复 v0.4.1 升级功能的两个缺陷(Windows 桌面版实测暴露)。
未使用 v0.4.1 升级功能的用户不受影响;已升级或正准备升级的,请直接用本版本。


🐛 修复一:更新提示条不显示版本号

现象:提示「发现新版本 v」,版本号是空的。

根因:前端取错了数据层级。更新接口把版本详情放在 info 里(版本号字段为 info.latest),而提示组件读的是顶层 latest —— 顶层只有 available / frozen / container 这类状态位,版本号根本不在那儿。

现在会正确显示成「发现新版本 v0.4.2(当前 v0.4.1)」。

🐛 修复二:点了「立即升级」并没有真正升级

现象(比较迷惑):安装包确实下载到了程序目录下的 update/,主程序也退出了,但目录里还是旧版本,手动再打开 exe 依然是老版本。

根因:启动升级助手进程时用了 DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP 这个组合。该组合下 PowerShell 进程能起来、脚本却不执行 —— 连它自己的第一行日志都不写,全程静默失败,所以表面上看不出任何异常。

实测了 6 组启动参数:

启动方式 结果
无特殊标志 正常执行
无特殊标志 + 隐藏窗口 正常执行
DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP 不执行
DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP + 隐藏窗口 不执行
CREATE_NO_WINDOW 正常执行
CREATE_NO_WINDOW + 隐藏窗口 正常执行

已改用 CREATE_NO_WINDOW —— 既隐藏控制台窗口,又能真正执行。

配套加固:

  • 新增「助手是否真的跑起来」的观察信号(以助手写入的第一行日志为准),便于区分"已启动但失败"和"压根没启动";
  • 主进程退出延时由 1.5 秒放宽到 3 秒,避免观察还没完成主进程就退了;
  • 升级助手的日志改为 UTF-8 写入(此前用 PowerShell 5.1 默认的 ANSI,中文日志是乱码,不利于排查)。

验证:用模拟旧目录 + 模拟升级包做了端到端演练,主进程硬退出后助手独立完成替换 —— 新版就位、config.yml 与 JavSP.log 原样保留、.bak 备份生成。


📦 下载与校验

资产 用途
JavSP-0.4.2-windows.zip Windows 桌面版,解压即用(exe 同级便携)
javsp-fork-0.4.2-image.tar.gz Docker 镜像,docker load -i 后重启容器
javsp-fork-0.4.2.sha256 上述两个文件的 SHA-256 校验值

⚠️ 升级说明

  • Windows:v0.4.0 及以上在界面顶部点「立即升级」即可自动完成(配置自动保留)。v0.4.1 用户若在上一版遇到"点了没反应",用本版本再点一次即可正常升级。
  • Docker:docker load -i javsp-fork-0.4.2-image.tar.gz 后 docker restart javsp;配置文件挂在容器外,不受影响。

JavSP-fork v0.4.1

Choose a tag to compare

@luckwalter luckwalter released this 25 Oct 16:43

JavSP-fork v0.4.1

大版本:新增软件更新检查与一键升级。
版本号由 v0.3.17 直接进到 v0.4.1 —— v0.4.0 仅作内部联调构建,未对外发布。
本次同时合并 v0.3.16 与 v0.3.17 的修复(前者已发 Release,后者此前只打了 tag)。


✨ 软件更新:启动时告知,Windows 一键升级

以前要升级只能手工去发布页下载、解压、覆盖。现在程序自己会告诉你有新版本,Windows 桌面版还能一键完成替换。

启动时后台检查(不打扰、不等待)

  • 服务启动后延迟 5 秒,在后台线程查询最新 Release;3 秒超时,网络不可达时静默失败 —— 绝不拖慢启动,也不弹任何报错。
  • 结果缓存 6 小时,不会每次刷新都去问一次。
  • 设置页「软件更新」可手动检查,也能关掉启动检查(沿用 other.check_update 开关)。

Windows 桌面版:一键升级

点提示条上的「立即升级」后:

  1. 下载最新 Windows 安装包(带进度条)
  2. 启动独立的升级助手进程,主程序退出后由助手接管(Windows 不允许替换正在运行的 exe,所以必须分步)
  3. 旧程序目录整体改名备份 —— 旧版本遗留的无用组件随旧目录一并清除,不留残余
  4. 解压新版落地
  5. 原样保留 config.yml、.sessions.json、JavSP.log(你的配置与历史不会丢)
  6. 启动新版本;任一步失败自动回滚到旧目录

Docker 部署:给出更新指引

容器无法替换自身镜像,因此提示条直接给出可复制的命令与发布页链接:

docker load -i javsp-fork-0.4.1-image.tar.gz
docker restart javsp

为什么不用上游那套

上游 func.py 里的 check_update / download_update 查的是上游仓库的 releases(对本 fork 无效),且是 CLI 打印式、没接 WebUI;其自动更新靠"重命名运行中的 exe",在 Windows 上实际必然失败。本次重写为 javsp/update.py。


🔧 修复(v0.3.16 / v0.3.17,随本次一并发布)

  • 多分片(CD)影片只移动了第一个分片(issue #6):原实现是"一错全停",任一分片抛异常即中断整个循环,表现为只移动了 CD1 且原因不可见。现改为逐分片容错 + 移动前预检目标冲突 + 失败明细逐条列出。
  • NFO 简繁混用:genre 字段此前从未走翻译,映射表本身也简繁混杂,同一份 NFO 会出现「出轨 / 出軌」并存。现新增零依赖繁简归一化,按目标语种原地统一。
  • 同语言跳过翻译:原文已是目标语种时直接采用,不调用翻译引擎。
  • 整理后源空目录未删:rmdir 重试 3 次,仍失败则在结果区列出待手动删除的目录。
  • 翻译引擎接入本地大模型(issue #5):OpenAI 引擎支持自定义端点 / 模型 / 代理开关,本地 Ollama、LM Studio 与云端兼容源零改接入。

📦 下载与校验

资产 用途
JavSP-0.4.1-windows.zip Windows 桌面版,解压即用(exe 同级便携)
javsp-fork-0.4.1-image.tar.gz Docker 镜像,docker load -i 后重启容器
javsp-fork-0.4.1.sha256 上述两个文件的 SHA-256 校验值

Windows 版校验示例:

Get-FileHash JavSP-0.4.1-windows.zip -Algorithm SHA256

⚠️ 升级说明

  • Windows:已在使用 v0.4.0 桌面版的用户,可直接点界面顶部的「立即升级」自动完成(配置自动保留);更早版本请手动下载 zip 覆盖,注意保留 exe 同级的 config.yml。
  • Docker:下载镜像 tar.gz 后 docker load -i 并 docker restart javsp;配置文件挂在容器外,不受影响。