Skip to content

Releases: MuZiCul/XDownload

XDownload v2.10.2

Choose a tag to compare

@github-actions github-actions released this 23 Sep 08:17
b2c1976

Changed

  • perf: 降低下载时的渲染压力(进度节流 + 订阅切片)(v2.10.2)

Other

  • chore: 移除前端测试文件并同步 CI(不再跑 vitest)

XDownload v2.10.1

Choose a tag to compare

@github-actions github-actions released this 22 Sep 06:12
c0e5b29

Fixed

  • fix: 重新下载改为历史信息直接回填,去掉 4 秒解析等待(v2.10.1)

XDownload v2.10.0

Choose a tag to compare

@github-actions github-actions released this 22 Sep 05:45
68d6c92

🚀 v2.10.0 带来两项修复:下载历史去重(同一条视频只保留一条最新记录,重下自动替换旧记录)与 ffmpeg 更新检测修复(不再"更新完还反复提示",也不会白下约 195MB)。


🐛 关键修复

下载历史出现「失败 + 成功」两条记录

  • 现象:某条视频下载失败后重新下载成功,下载历史里却同时留下两条卡片(一条失败、一条成功),失败那条怎么也去不掉。
  • 根因:历史记录的唯一键 video_id 有两个来源——批量下载 / 深链 / 书签同步写入的是 URL 里的推文 status id,而单链下载 / 历史页重新下载写入的是 yt-dlp 解析出的媒体 id。两者多数情况相同,但偶尔指向不同 id,于是同一条视频被写成两条记录,重新下载自然覆盖不掉另一条键上的旧记录。
  • 修复:全链路统一历史键为推文 status id(新增 utils::url::history_key 作为唯一规则):
    • 入队时归一化任务 video_id;
    • 解析视频信息时,回传给前端的 id 也归一化,保证「已下载」判断、打开文件位置、重新下载都落在同一个键上;
    • 写历史时再次兜底归一化,任何入口都不会再产生第二个键。
  • 效果:重新下载成功 → 旧的失败记录被替换;重新下载仍失败 → 只保留最新那次失败记录。

ffmpeg「更新后仍提示更新」,怎么点都消不掉

  • 现象:更新 ffmpeg 之后仍持续提示有 ffmpeg 更新;再点一次更新会重新下载约 195MB,提示依旧。

  • 根因:旧逻辑把两个语义不同的时间直接比较——

    • 远端基准 = BtbN release 的 published_at(发布完成时刻);
    • 本地基准 = bin/ffmpeg.exe 的 mtime,而解压代码刻意把它恢复成 zip 内文件时间(构建打包时刻)。

    构建产物要打包上传完(一次构建 49 个资产、2GB+)release 才发布,published_at 恒晚于 zip 内文件时间(实测差 49 分钟)。于是只要装的是当时的最新版,就永远判定"有更新"。

  • 修复:判定改为两级指纹比对:

    1. 资产 ETag 优先:向远端资产发一次请求只读响应头(不下载 body),ETag 与"上次安装时记录的 ETag"比对,不同即内容变过;
    2. 资产上传时刻保底:取不到 ETag 时,用该资产在 GitHub API 里的 updated_at 与"本地安装时刻"比较;老版本升级上来、没有安装记录时用 ffmpeg.exe mtime +6 小时容差兜底(覆盖发布延迟)。
  • 安装 ffmpeg 成功后会写入安装时刻 + 资产 ETag(存在 config/data.db),所以"刚装完还提示有更新"不会再出现。

🔧 内部改进

历史记录一次性合并迁移

  • 启动时执行一次幂等迁移(写 config 表的 marker,只跑一次):把已有记录的键统一为推文 status id,同一条视频的多条记录只保留最新的一条,其余删除并写入日志。
  • 迁移失败只告警、不阻塞启动;重跑安全(marker 未写入时会重新执行)。

附带收益

  • 书签页的「已下载」标记、书签目录的下载状态、下载页的「已下载」提示不再因键不一致而漏判。
  • ffmpeg 判定结果新增 up_to_date 字段,区分"确认已是最新"与"检查没成功"。

✨ 改进

下载前二次校验,不再白下 195MB

  • 设置页点「更新」时会先强制刷新一次检查:后端确认"已是最新"则直接提示已是最新并跳过下载;只有确实有新构建才会开始下载。(用户主动"重新下载"仍照常执行。)

📦 安装

从 GitHub Releases 下载:

  • Windows: XDownload_v2.10.0_x64-setup.exe (NSIS) / .msi

首次启动会自动下载 yt-dlp + ffmpeg,也可以手动放入 bin/ 目录。

🙏 致谢

  • yt-dlp — 下载与解析引擎
  • Tauri — 桌面应用框架
  • ffmpeg — 音视频合并

XDownload v2.9.9

Choose a tag to compare

@github-actions github-actions released this 18 Aug 16:41
01ce599

🚀 v2.9.9 聚焦应用内统计与日志:新增苹果风格的下载统计面板(ECharts 图表);日志查看器移入应用内(深色主题、ANSI 着色、内容可复制);隐私模式补全书签标题遮挡;并清理浏览器版日志服务死代码。


✨ 新功能

📊 下载统计

  • 统计面板:设置页「统计」打开苹果风格统计页——大标题 + 数字卡片(累计下载 / 累计存储 / 成功率 / 使用天数 / 平均时长)
  • ECharts 图表:每日下载趋势(渐变折线)、来源分布(环形图)、Top 作者(横向柱状)、Top 账号(南丁格尔玫瑰图)
  • 离线可用:ECharts 以本地文件打包(不再依赖网络 CDN),图表首次打开自动修复 WebView2 白屏时序

📜 日志查看器(应用内)

  • 移入应用内:设置页「软件日志」直接在应用内打开深色日志页,不再跳转浏览器(移除本地 HTTP 服务,少一个端口暴露面)
  • ANSI 着色:时间戳半透明、等级彩色(INFO 绿 / WARN 黄 / ERROR 红),重构为 React 原生渲染确保 WebView2 下颜色生效
  • 日志内容可复制:日志行可选中复制,界面其他元素仍禁止选中
  • 轮询静默:2 秒自动刷新不再产生「get_logs」噪音日志

🔖 隐私模式补全

  • 书签标题遮挡:隐私开关开启时,「查看书签」弹窗标题与「书签同步」预览文本同步显示 ***(此前仅下载页/历史页生效)

🛠 开发体验

  • 清理死代码:移除已被应用内页面替代的浏览器版日志查看器(log_web HTTP 服务、open_logs_dir 命令、前端 openLogsDir 绑定),代码净减约 400 行
  • 移除多余依赖:echarts 不再作为 npm 依赖安装(改用本地 vendor 文件),package.json / lock 清理
  • 日志页优化:ANSI 色表与解析函数提升为模块级常量,2 秒刷新不再重复分配

📦 安装

从 GitHub Releases 下载:

  • Windows: XDownload_v2.9.9_x64-setup.exe (NSIS) / .msi

首次启动会自动下载 yt-dlp + ffmpeg,也可以手动放入 bin/ 目录。


⚠️ 升级说明

  • 本版无数据库结构变化,升级后历史 / 书签数据原样保留
  • 若此前通过浏览器使用过日志查看器,浏览器标签页可关闭(功能已移入应用内)

🙏 致谢

XDownload v2.9.8

Choose a tag to compare

@github-actions github-actions released this 18 Aug 07:21
fed5195

🚀 v2.9.8 聚焦设置体验重构与账号识别:彻底移除「配置保存/应用/导入/导出」体系,所有设置更改即自动保存;代理能力增强(系统代理重开恢复、输入校验、开关自动联动);书签管理新增登录用户名识别(Cookie 指纹缓存)与「获取/重载用户」按钮。


✨ 新功能 / 改进

⚙️ 设置

  • 设置即自动保存:移除配置保存 / 应用 / 导入 / 导出 / 恢复默认体系,所有设置项(下载目录、代理、Cookies、多任务、HLS、语言)改动即时保存并生效,不再有保存/应用按钮
  • 保存竞态修复:新增全局串行「读-改-写」机制,快速连续改动多个设置不再互相覆盖
  • 设置标签精简:并发数 / 重试次数 / 持久化 / 防休眠 / 限速 / 使用代理,完整说明移入问号提示
  • 问号提示统一:提示弹窗统一为「总述 + 条目前缀 + 悬挂缩进」风格

🌐 代理

  • 系统代理重开恢复:修复系统代理关闭后再打开无法恢复的问题(此前开关会一直禁用)
  • 手动代理强制应用:系统 → 手动切换即时生效
  • 输入校验:端口仅允许 1-65535(超限/非数字直接拒输),主机地址仅允许合法字符
  • 开关自动联动:「使用代理」开关随代理状态实时同步(代理关闭自动关开关)

🔖 书签管理

  • 登录用户名识别:标题显示当前 x.com 登录用户(● 已登录用户: @xxx),基于 Cookie 指纹缓存,重启后浏览器来源不变则不重复探测
  • 获取 / 重载用户:按钮手动刷新;未获取到用户时显示红色状态提示,同步/查看书签自动禁用
  • 未登录保护:无法识别用户时禁用同步与查看,避免无效操作

🛠 其他

  • 日志查看器:浏览器标签页补上应用图标(favicon)
  • 日志增强:ffmpeg 缓存命中、代理开关变更、队列持久化/防休眠开关变更均有日志记录

📦 安装

从 GitHub Releases 下载:

  • Windows: XDownload_v2.9.8_x64-setup.exe (NSIS) / .msi

首次启动会自动下载 yt-dlp + ffmpeg,也可以手动放入 bin/ 目录。


🙏 致谢

XDownload v2.9.7

Choose a tag to compare

@github-actions github-actions released this 17 Aug 19:12
5e184c9

🚀 v2.9.7 聚焦工具下载体验与 ffmpeg 更新检测:下载 yt-dlp / ffmpeg 时实时显示直连 / 代理模式、可一键切换「代理下载」,ffmpeg 彻底弃用 gyan.dev 改为 GitHub BtbN 统一检测(24 小时缓存不再频繁联网),并全链路补齐排查日志。


🐛 关键修复

  • 取消下载不再误弹失败:修复取消后 download_with_fallback 把"用户取消"当"直连失败"继续走代理、错误信息被 with_context 覆盖导致前端误判——现在取消即透传,静默关闭无弹窗,也不再发多余代理请求
  • ffmpeg 更新检测不再持续误报:本地基准改用解压时恢复的 zip 内构建时间戳(此前是下载时刻,BtbN 高频构建导致一直提示有更新);远端发布时间解析失败不再污染 24h 缓存
  • 下载失败残留临时文件清理:超时 / 读错 / 写错等所有失败路径统一删除 .tmp 半成品(此前仅取消分支清理)
  • 工具下载失败展示真实原因:错误串保留 cause 链,前端能区分超时 / 连接拒绝 / DNS 等并展示

✨ 新功能 / 改进

工具下载(设置 → Tools)

  • 实时显示网络模式:下载时提示「正在通过直连下载 / 正在通过代理下载」,直连失败自动切代理时提示实时更新
  • 「代理下载」开关:开启后工具下载直接走代理(不再先试直连);未配置代理时开关自动禁用并提示;开关即时保存(无需点「保存」)
  • 慢速下载提醒:超过 3 分钟无进度时提示,提供「继续等待 / 前往网页下载」入口(GitHub BtbN 页面)
  • 取消下载静默:识别"下载已取消",不再弹失败弹窗

ffmpeg 更新检测

  • 彻底移除 gyan.dev:首次下载(GitHub BtbN)与更新检测(GitHub API 发布时间)统一数据源
  • 24 小时跨进程缓存:远端发布时间存 data.db,启动 / 重复检查不联网(毫秒级本地对比),解决 GitHub API 未认证限流(60 次/h)
  • 手动检查强制刷新:点「检查更新」绕过缓存立即请求 GitHub 并更新记录
  • API 限流后备:GitHub API 403 时自动走 Web 页面解析(<relative-time>),全程日志可查

下载历史

  • 新增 handle 字段:从 URL 提取用户 id(如 yung_dimsum)写入历史记录,老库自动迁移 + 存量回填

移动中状态

  • 下载完成后进入合并阶段显示「移动中」徽标与循环条,与下载 / 合并阶段明确区分

🎨 UI 优化

  • 退出弹窗:点击遮罩(弹窗外空白处)取消退出(此前会误触发最小化)
  • 书签查看弹窗:打开时自动实时刷新下载状态(监听 download-finished)
  • 版本显示:ffmpeg 底部版本号解析兼容 BtbN master(N-<git号>),更新后不再显示问号

🛠 日志补全(排查不再黑盒)

  • 代理测试:入口 / 结果 / 耗时 / 失败原因全记录
  • cookie 验证:浏览器选择、auth_token 提取、x.com 验证状态码
  • 网络检测:直连 / 代理可达性、GitHub / Google / x.com 预检
  • 命令执行:spawn 失败、超时被杀、非零退出码(含 stderr 摘要)
  • 数据库:连接池借用失败、初始化失败
  • Web fallback:403 后自动降级执行过程全程留痕

📦 安装

从 GitHub Releases 下载:

  • Windows: XDownload_2.9.7_x64-setup.exe (NSIS) / .msi
  • 浏览器扩展: 沿用已发布版本即可(本版未改扩展)

⚠️ 升级说明

  • 本次发版同时包含 v2.9.6 的改动:「下载时防休眠」开关(Windows SetThreadExecutionState,队列有活跃任务时阻止系统休眠,任务结束 / 暂停 / 清空 / 主动退出自动恢复)、视频保存位置卡片改版、设置页下载目录显示绝对路径
  • ffmpeg 更新检测逻辑变更:旧版数字版本(如 7.1)与新版 N- 构建统一走 GitHub 检测,无需迁移
  • 升级无需迁移配置,历史与书签数据保留

🙏 致谢

XDownload v2.9.5

Choose a tag to compare

@github-actions github-actions released this 16 Aug 18:00
b4db86a

🚀 v2.9.5 聚焦下载可靠性:彻底移除断点续传(所有下载一律从头,杜绝碎文件导致的 ffmpeg 合并异常),重做退出确认弹窗(最小化到托盘 / 真正退出由你决定),并修复多个队列与查重 bug。


🐛 关键修复

  • 断点续传彻底移除:删除 resume_support 开关;每次下载前清空缓存目录 + 强制从头下载(暂停→开始、失败重试、重启恢复均从头)
  • 碎文件不再积累:暂停 / 取消任务后立即清理该任务的暂存缓存目录,残分片与 .part 不会残留
  • 退出不误报失败:保存进度退出后重启,正在下载的任务不再被记录为"下载失败"(kill 的 worker 静默收尾)
  • 删除任务队列停滞:删除正在下载的任务后,等待中的任务立即开始(此前会卡住)
  • 深链查重:扩展发送的链接若已下载过,弹出确认框(重新下载 / 取消),不再重复入队
  • 历史来源显示错误:修复 list_download_history 漏传 source 字段导致全部显示「单链」

✨ 新功能 / 改进

退出确认弹窗

  • 关闭窗口(X)总是弹窗:最小化到托盘 / 真正退出(无任务也弹窗)
  • 托盘退出只显示「退出 + 取消」;设置页退出与 X 同逻辑
  • 有任务且未自动保存时提供「保存进度并退出 / 直接退出 / 最小化 / 取消」
  • 精简模式文案独立,不再误显示"有任务正在执行"

任务页动态分栏

  • 活跃任务 ≥ 2 个:上 50% / 下 50%
  • 0~1 个:上 30% / 下 70%(历史区获得更多空间)

来源徽标增强

  • 新增深链来源(独立于批量 / 书签),四种来源一眼可辨

设置页按钮配色

  • hover 配色重构:普通按钮中性灰、退出按钮淡红、隐私按钮琥珀,卡片光晕改中性(不再与 Tab 选中蓝色撞色)

📦 安装

从 GitHub Releases 下载:

  • Windows: XDownload_2.9.5_x64-setup.exe (NSIS) / .msi
  • 浏览器扩展: 沿用已发布版本即可(本版未改扩展)

⚠️ 升级说明

  • 设置中的「断点续传」开关已移除,旧配置自动忽略
  • 暂停 / 重新开始的下载将从头开始(不再从断点继续)——这是刻意设计,为保证合并完整性
  • 升级无需迁移配置,历史与书签数据保留

🙏 致谢

  • yt-dlp — 视频解析与下载引擎
  • Tauri — 轻量级桌面应用框架
  • ffmpeg — 音视频处理

XDownload v2.9.4

Choose a tag to compare

@github-actions github-actions released this 16 Aug 05:39
f3f9cb6

Fixed

  • fix: 历史记录显示修复 + 历史页 UI 优化

XDownload v2.9.3

Choose a tag to compare

@github-actions github-actions released this 15 Aug 19:00
fb5f94d

New

  • feat: 队列状态方法抽取重构 + 测试覆盖补齐
  • feat: 缓存清理去 hack + 历史页分栏虚拟化 - 缓存清理改为 mtime 保留 7 天:废弃残留自动回收,不再按日期含 4 全量清空破坏断点续传 - 移除日期 hack / marker / 死代码 ensure_download_cache_dir,新增缓存清理测试 - 历史页改为上下分栏(正在下载 30% / 下载完成 70%),两区独立滚动 - 历史列表接入 @tanstack/react-virtual 虚拟化(动态行高,失败展开自适应),几千条记录仍流畅 - 版本号 2.9.1 → 2.9.2
  • feat: 任务来源徽标 + 数据库读并发优化

Changed

  • docs: RELEASE 描述去掉版本号标题(约定:发版正文不写标题)

XDownload v2.9.0

Choose a tag to compare

@github-actions github-actions released this 13 Aug 11:31
6e1ac9c

🚀 v2.9.0 重点重构书签同步:从自动轮询改为手动触发 + 预览确认,引入下载历史即游标、书签目录持久化(SQLite)与全局同步模态。配套扩展升级 v1.3.0(自动捕获并推送 queryId)。


🔖 书签同步(重点)

手动触发 + 预览确认

  • 删除自动轮询,改为设置页「同步书签」按钮手动触发
  • 同步后弹出全局同步模态:显示真实步骤进度(读取 Cookies → 拉取书签 → 保存本地 → 比对历史),同步期间无法关闭,切换任意 Tab 仍置顶
  • 预览弹窗列出所有含视频书签(含已下载),用不同底色区分已下载/未下载,默认勾选未下载
  • 支持勾选批量入队 / 单个入队;已下载的书签也可勾选重新下载(复用批量下载逻辑,队列内判重仍生效)
  • queryId 失效时展示拟态窗错误与扩展引导步骤

下载历史即游标

  • 废除 bookmarks_state.json 游标:只有下载完成才视为"已处理"
  • 未下载的(含入队后被删除的)书签,下次同步会重新提示——不再出现"删除任务后书签消失"的问题

书签目录持久化

  • 同步发现的书签(含视频与无视频)持久化到 SQLite bookmarks 表(自增 id 主键 + video_id UNIQUE 去重,含 has_video / downloaded 字段)
  • 新增「查看书签」拟态窗:离线浏览历次同步的书签,每条显示下载状态,可单独下载 / 重新下载
  • 查看时实时核对文件是否仍存在并回写状态

queryId 自动捕获(扩展 v1.3.0)

  • 扩展 popup 新增「推送 queryId 到桌面端」:打开 x.com 书签页时自动捕获最新 queryId 并推送
  • 桌面端存入 SQLite config 表,同步时优先使用,未推送时退回内置常量

💾 存储架构

  • 下载历史迁移至 SQLite:config/data.db 的 downloads 表(video_id 主键、file_paths JSON、status 0/1),替换旧 downloads.json 读写
  • 旧 downloads.json 历史记录不导入(新库从空开始),旧文件保留作手动备份
  • settings.json / queue.json / 清理日期标记保持 JSON;日志保持文本文件(按本地日期轮转)
  • 修复 DB_LOCK 互斥锁死锁(书签持久化在持锁期间调用下载历史服务导致卡死,已改为锁外取快照)

🐛 Bug 修复

  • 下载时长丢失:HLS/多分片任务时长解析浮点截断,历史记录 duration=0 → 已修复(浮点解析 + 队列快照刷新)
  • 书签入队信息获取时机:入队任务改为"先排队、逐任务获取信息、再按并发启动下载",卡片始终有封面/标题/作者
  • 最近下载徽标不立即显示:慢刷新时钟把刚下载完成记录误判为"未来时间"而隐藏徽标 → 负数边界 clamp + 下载完成即刷新时钟
  • 同步后切换 Tab 卡死:bookmarks_store 持 DB_LOCK 时再次调用 is_downloaded 死锁 → 锁外构建快照

🎨 UI 优化

  • 设置页顶部按钮固定:保存/应用/目录/日志/隐私/退出 在滚动时固定于顶部,位置不再跳动
  • 8 个设置卡片标题问号徽标:点击弹出说明拟态窗(多行展示每个功能点)
  • 勾选框改滑动开关:多任务卡片的「队列持久化」「断点续传」改为滑动开关
  • 「书签同步」卡片改名「书签管理」

🛠 开发体验

  • 日志双写:同一份日志同时写入 logs/ 文件与 stdout(debug 控制台实时滚动);控制台启用 VT 处理正确显示 ANSI 颜色
  • debug_build.bat 自动部署:构建成功后自动终止旧进程、复制 xdownload.exe + xdownload_lib.dll 到 D:\XDownload、并自动启动新版本

📦 安装

下载预构建包

从 GitHub Releases 下载对应平台安装包:

  • Windows: XDownload_2.9.0_x64-setup.exe (NSIS) / .msi
  • 浏览器扩展: xdownload-extension-v1.3.0.zip(见「书签同步」章节)

从源码构建

# 环境要求:Rust (MSVC)、Node.js 18+、pnpm

pnpm dev            # 开发模式
.\build.bat         # Windows 打包
.\debug_build.bat   # 快速调试构建(不打包安装程序)

⚠️ 升级说明

  • 从 v2.8.x 升级无需迁移配置:下载历史自动迁移到 SQLite,downloads.json 保留不删除
  • 书签功能从 v2.9.0 起为手动触发(设置页「书签管理」→「同步书签」),旧的 bookmarks_state.json 已废弃可删除
  • 浏览器扩展请升级到 v1.3.0(新增 queryId 推送)

🙏 致谢

  • yt-dlp — 视频解析与下载引擎
  • Tauri — 轻量级桌面应用框架
  • ffmpeg — 音视频处理
  • gyan.dev — Windows ffmpeg 构建