Skip to content

📝 更新日志 - 2025年6月

🎉 v2.7.3 (配置系统革新与文件名处理增强)

日期:2025年6月16日

概述

本次更新带来了配置系统的重大改进,实现了完全基于数据库的配置管理和热重载功能,同时大幅增强了文件名处理能力,彻底解决了特殊字符问题。

✨ 主要亮点

  1. 配置系统全面升级

    • 配置完全迁移到数据库存储,不再依赖 config.toml 文件
    • 支持配置热重载,无需重启程序即可生效
    • 通过任务队列保存配置,彻底解决数据库锁定问题
  2. 文件名处理革新

    • 增强的 filenamify 函数,支持所有 Windows 不允许的字符
    • 自动转换全角字符(如 -「」[]
    • 处理特殊符号、数学符号等各种字符
    • UTF-8 边界安全和长度限制
  3. 初始设置功能

    • 新增友好的初始设置向导界面
    • 简化 Cookie 和基本配置设置流程
    • 未设置凭证时以受限模式运行,不再强制退出

🐛 问题修复

1. 配置系统修复

  • 数据库存储:配置现在完全存储在数据库中,config.toml 仅作为初始配置
  • 热重载实现:使用 ArcSwap<ConfigBundle> 架构,实现高性能配置热更新
  • 凭证保存:修复 BiliClient::check_refresh() 中 credential 刷新后无法持久化的问题
  • 任务队列:配置保存通过专门的任务队列处理,避免并发冲突

2. 文件名处理修复

  • 特殊字符支持:修复了 "文件名、目录名或卷标语法不正确" 错误
  • 统一处理:所有文件路径生成都经过 filenamify 处理
  • 合集命名:修复了合集视频直接使用原始名称的问题

3. 内存管理优化

  • 内存泄漏修复:完全移除 Box::leak 导致的内存泄漏
  • 配置管理器:新增 get_config_manager() 函数提供安全的配置访问

🔧 技术细节

配置系统架构

rust
// 新的配置管理结构
pub struct ConfigBundle {
    pub config: Config,
    pub handlebars: Handlebars&lt;'static&gt;,
    pub rate_limiter: Arc&lt;RateLimiter&gt;,
}

// 使用 ArcSwap 实现热重载
static CONFIG_BUNDLE: Lazy&lt;ArcSwap&lt;ConfigBundle&gt;&gt; = ...

// 安全的配置访问
pub fn with_config&lt;F, R&gt;(f: F) -&gt; R 
where F: FnOnce(&ConfigBundle) -&gt; R

文件名处理增强

rust
// 支持的字符转换
- 全角冒号 `:` → `-`
- 日文引号 `「」` → `[]`
- 全角括号 `()` → `()`
- 书名号 `《》` → `_`
- 全角空格 ` ` → ` `
- 各种特殊符号 → `_`

🚀 升级建议

本版本包含重要的系统改进,强烈建议所有用户升级到 v2.7.3:

  • 配置系统更加稳定可靠
  • 文件名处理更加智能
  • 整体性能和用户体验提升

🎉 v2.7.0 (前端优化与配置修复)

日期:2025年6月6日

概述

本次更新重点解决了配置保存失败的问题,并对前端设置页面进行了全面优化,增加了完整的配置说明,将编解码器选项改为更符合逻辑的拖拽排序列表。

✨ 主要亮点

  1. 配置保存修复:彻底解决了新增配置项(如视频质量、弹幕、并发等)无法保存的问题。
  2. 前端UI大改版
    • 编解码器优先级排序:将原先的复选框改为可拖拽排序的列表,更直观地设置下载优先级。
    • 完整的配置说明:在设置页面集成了详细的官方文档说明,方便用户随时查阅。
  3. Aria2 进程优化:修复了会为每个视频源启动一个aria2进程的问题,现在所有下载任务共享同一个aria2实例,大幅降低了资源占用。

🐛 问题修复与功能增强

1. 核心配置系统修复

  • 后端
    • 同步更新了后端的 UpdateConfigRequest, ConfigResponse, UpdateConfigTask 等多个结构体,补全了约30个缺失的配置字段。
    • 修复了 VideoQuality, AudioQuality 等枚举类型缺少 FromStr 实现导致解析失败的问题。
    • 统一了 VideoCodecs 枚举的序列化/反序列化格式,解决了前后端格式不匹配的问题。
  • 前端
    • 修复了 a11y 可访问性警告,为图标按钮添加了 aria-label

2. 前端设置页面 (Settings) 体验优化

  • 新增配置说明
    • 在设置页面右侧增加了完整的配置项说明面板,内容同步自官方文档。
    • 包含了文件命名、视频质量过滤、弹幕、并发控制等所有模块的详细解释。
  • 编解码器优先级UI重构
    • 将原先的复选框(checkbox)修改为支持拖拽排序的列表(draggable list)。
    • 用户可以直观地拖拽 AVC, HEV, AV1 来调整其优先级顺序。
    • 支持动态添加和移除编解码器选项。

3. 下载进程优化

  • 问题:之前版本的程序会为收藏夹、合集、番剧等每个视频源都启动一个独立的 aria2c.exe 进程,造成资源浪费。
  • 修复:重构了下载器 (UnifiedDownloader) 的创建逻辑,改为在任务开始前创建单个共享实例,并将其传递给所有视频源处理函数。
  • 效果:无论有多少视频源,程序现在只启动一个 aria2 进程,显著降低了内存和CPU占用。

🔧 技术细节

  • 后端:涉及对 api/request.rs, api/response.rs, api/handler.rs, task/mod.rs, bilibili/analyzer.rs 等多个核心文件的修改,确保了配置数据流在整个后端的正确传递和处理。
  • 前端 (+page.svelte):大量使用 Svelte 的响应式绑定和事件处理,实现了拖拽排序逻辑和动态UI更新。

🚀 升级建议

强烈建议所有用户升级至此版本,以获得更稳定、更易用的配置体验和更高效的资源利用。


🎉 v2.6.2 版本发布

日期:2025年6月1日

概述

本次更新主要修复了番剧弹幕下载失败的问题,并大幅优化了番剧详情获取的性能,显著提升了下载体验。

🐛 问题修复

1. 修复番剧弹幕下载失败问题

问题描述

  • 番剧下载时弹幕文件获取失败,返回 304 错误
  • 下载接口缺少必要的 pid 参数导致请求无效

解决方案

  • ✅ 添加了缺失的 pid 参数(分P ID)
  • ✅ 支持番剧专用的 aid 参数(番剧使用特殊的 aid 而非 bvid)
  • ✅ 改进了错误处理机制,避免无效的弹幕下载尝试

技术细节

rust
// 修复前:缺少 pid 参数
let url = format!("https://api.bilibili.com/x/v1/dm/list.so?oid={}", cid);

// 修复后:添加 pid 参数
let params = vec![
    ("oid", cid.to_string()),
    ("pid", aid.to_string()),  // 新增的关键参数
];

⚡ 性能优化

1. 番剧详情获取性能大幅提升

优化前

  • 串行获取每集详情,速度极慢
  • 30 集番剧需要 50-60 秒
  • 1221 集柯南需要近 50 分钟

优化后

  • 改为并发获取,性能提升 25-30 倍
  • 30 集番剧仅需 2 秒
  • 1221 集柯南仅需 100 秒

性能对比

内容优化前优化后提升倍数
30集番剧50-60秒2秒25-30x
100集番剧约3分钟6-8秒22-30x
1221集柯南近50分钟100秒30x

实现方式

rust
// 优化前:串行处理
for ep in episodes {
    let detail = fetch_episode_detail(ep).await?;
    results.push(detail);
}

// 优化后:并发处理
let tasks: Vec&lt;_&gt; = episodes.into_iter()
    .map(|ep| fetch_episode_detail(ep))
    .collect();
let results = futures::future::try_join_all(tasks).await?;

🔧 其他改进

  1. 日志优化

    • 减少了不必要的警告日志
    • 让日志输出更加清晰
  2. 代码质量

    • 消除了编译警告
    • 优化了代码结构
  3. 错误处理

    • 改进了网络请求的错误处理
    • 提供更友好的错误提示

📊 实际测试结果

在实际测试中,性能提升效果显著:

  • 《工作细胞》(14集):2秒完成
  • 《某科学的超电磁炮》系列(74集):8秒完成
  • 《名侦探柯南》(1221集):100秒完成

🚀 升级建议

强烈建议所有用户升级到 v2.6.2 版本,特别是:

  • 需要下载番剧的用户
  • 下载大量剧集的用户
  • 之前遇到弹幕下载失败的用户

📝 技术总结

本次更新通过添加关键参数和改进并发策略,不仅解决了功能性问题,还带来了显著的性能提升。这展示了正确的API使用和合理的并发设计对程序性能的重要影响。


相关提交

  • fix: 修复番剧弹幕下载问题,添加缺失的pid参数
  • fix: 修复番剧弹幕下载,支持番剧的aid参数
  • feat: 优化番剧弹幕下载和详情获取性能
  • chore: 发布 bili-sync v2.6.2