XDownload v2.9.0
🚀 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_pathsJSON、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 推送)