更新日志
Ting Reader 持续迭代中,以下是详细的更新记录。
[1.3.8] - 2026-05-15
🛠️ 修复与优化
- 修复 lint 错误:清理所有前端未使用变量和循环引用警告(Web、桌面客户端、Android)。
- 修复 Android 后台播放进度丢失:将 WebSocket 实时同步迁移至 Android 原生层,后台播放时进度由前台服务直接同步,不再依赖 JS 层。
- 修复 Android 章节切换时进度标记错误:原生层在章节切换后用旧章节时长(100%)保存进度,修复已播完章节被错误标记为 6%-7% 的问题。
- 修复 Android 应用恢复时进度覆盖:从后台恢复时自动从原生播放器同步当前章节和位置。
[1.3.7] - 2026-05-14
✨ 新功能
- WebSocket 实时进度同步:新增 WS 模块,播放进度每 2 秒实时同步到服务器,防止页面关闭导致进度丢失。
- Android 端静默转码重试:播放遇到不兼容的音频格式时,自动切换为 MP3 转码流重试(最多 3 次),全程静默不弹窗。
🛠️ 修复与优化
- 修复已播完章节点击行为:点击进度 ≥95% 的已播完章节,自动清除播放记录并从头开始播放,不再从末尾瞬间跳到下一章。
- 暂停时自动保存进度:暂停播放时立即通过 WS + HTTP 双通道保存进度,防止关闭标签页导致进度丢失。
- 后端模块重构:将大型单文件模块拆分为目录模块(audio_streamer、event_bus、plugin、nfo_manager 等),提升代码可维护性。
[1.3.6] - 2026-04-22
🛠️ 修复与优化
- 修复部分webdav不允许预测根目录的问题,测试连接时带上地址参数
[1.3.5] - 2026-04-19
🛠️ 修复与优化
- 安全性修复
- 增加JWT密钥自动配置,不再需要手动配置
[1.3.4] - 2026-04-18
🛠️ 修复与优化
- 优化 WebDAV 和 strm 文件的扫描与播放
[1.3.3] - 2026-04-17
🛠️ 修复与优化
- 优化 WebDAV 和 strm 文件的扫描与播放
[1.3.2] - 2026-04-15
🛠️ 修复与优化
- 优化 WebDAV 音频时长获取机制,降低网盘风控风险,提升扫描效率。:
1. 智能音频时长获取
- MP3 文件:优先使用 ID3 标签(TLEN),避免 FFprobe 调用
- 其他格式:ID3 时长与文件大小估算比对,差距 >15% 时才使用 FFprobe
2. 网盘风控优化
- User-Agent 统一:所有 WebDAV 请求使用真实浏览器 UA
- 请求频率控制
3. 新增 WebDavClient 模块
- 统一的 WebDAV 请求管理
- 内置频率限制和并发控制
- 自动重试和错误处理
4. STRM 文件优化
- 添加 FFprobe 调用延迟(200ms)
- 改进错误处理和日志输出
- strm文件可以优先读取metadata.json文件中的时长等信息,如果网盘风控严格可准备好metadata.json元数据文件,避免刮削风控。
[1.3.1] - 2026-04-12
🛠️ 修复与优化
- 调整封面大小比例
- 增加年份元数据,书架增加按年份排序
- 修复普通用户搜索筛选的标签越权问题
✨ 新功能
- 增加插件源缓存功能
[1.3.0] - 2026-04-11
🛠️ 修复与优化
- 修复webdav库增量同步问题和封面提取问题
[1.2.9] - 2026-04-10
🛠️ 修复与优化
- 修复js插件加载导致的崩溃
- 修复strm时长获取错误
[1.2.8] - 2026-04-08
🛠️ 修复与优化
- 修复js插件加载导致的崩溃
- 修复strm无法播放
[1.2.7] - 2026-04-07
🛠️ 修复与优化
- 优化日志系统
- 普通用户权限问题:解决普通用户系列书籍权限边界问题。
[1.2.6] - 2026-04-04
🛠️ 修复与优化
- 增加对旧浏览器内核支持ES5:将现代 JS 语法(如可选链 ?. 、箭头函数等)降级为老浏览器能看懂的 ES5 语法,防止页面白屏崩溃。
- “隐私模式”或“受限 Webview”的环境中兼容性问题:创建了安全的 Storage 包装器,拦截所有的 LocalStorage 操作,将原生 localStorage 替换为 safeStorage 。
[1.2.5] - 2026-04-03
- 增加对刮削插件的支持:WASM插件支持自定义HTTP请求。
- 新增刮削插件
[1.2.4] - 2026-04-01
- 增加对刮削插件的支持
- 新增刮削插件
[1.2.3] - 2026-03-31
- 修复苹果平台兼容性问题:ios和mac下safari内核web端播放无法开始的现象修复。
[1.2.2] - 2026-03-31
- 修复一些问题
[1.2.1] - 2026-03-30
🛠️ 修复与优化
- 存储库扫描修复:修复了开启「自动检测变更」功能后,在特定场景下可能导致扫描任务陷入死循环的问题,提升了同步机制的稳定性。
- 主题色适配优化:修复了封面图片过白时,提取的主题色(如背景、按钮)过浅导致界面文字看不清的问题,优化了对比度算法,确保文字清晰可读。
- iOS PWA 计时器修复:修复了在 iOS 设备上以 PWA 模式运行时,睡眠定时器不准确的问题,确保倒计时功能与真实时间同步。
✨ 新功能
- 全新日志系统:重做了后端日志记录与前端展示模块。现在,用户可在前端界面查看详细的运行日志,包括登录记录、播放行为等关键操作,方便排查问题和了解系统状态。
[1.2.0] - 2026-03-20
🛠️ 修复与优化
- 播放进度修复:修复播放结束后无法正确记录播放进度的问题。
✨ 新功能
- 播放小窗折叠:新增播放小窗的折叠功能。
[1.1.10] - 2026-03-18
✨ 新功能
- 媒体库自动检测:新增本地媒体库自动检测功能。开启后,系统将实时监控媒体库目录的文件变化,并在文件修改完成(防抖 10 秒)后自动触发后台扫描任务,无需手动刷新。
- .strm 文件支持:全面支持
.strm流媒体文件。系统可自动识别.strm文件,在客户端请求播放时,直接通过 HTTP 302 重定向到文件内包含的真实播放地址,实现外部流媒体的无缝接入。 - WebDAV 连接测试:在添加或编辑 WebDAV 存储库时,新增「测试连接」按钮,支持在保存前一键验证服务器地址、用户名及密码的连通性。
- 封面比例选择:新增封面形状选择功能,用户可在书架页面选择封面的显示比例(3:4 或 1:1 方形)。
🛠️ 修复与优化
- 刮削器优化:优化了搜索词清洗逻辑,支持智能解析
作者 - 书名格式的目录,显著提高了自动刮削的命中率。 - 元数据写入修复:修复了在增量扫描时,如果音频文件未修改,会导致刮削结果无法更新到数据库,且 NFO/JSON 文件不会被写入的问题。
- 章节排序修复:移除了默认的章节数字提取逻辑,强制使用自然排序(文件名排序),解决了部分文件名数字导致的排序混乱问题。
- 书架显示修复:修复了删除存储库后书架页面仍尝试加载旧存储库导致请求失败的问题,增加了自动重置无效存储库 ID 的机制。
- 系列功能增强:
- 支持解析和写入
metadata.json中的系列序号(格式:系列名 #序号)。 - 优化系列排序逻辑,未指定序号时默认按书名自然排序。
- 支持解析和写入
- 元数据同步增强:
- 优先级修复:修复了本地元数据(封面、NFO)优先级逻辑,确保本地文件优先于网络刮削结果。
- 增量同步:优化了增量扫描逻辑,自动检测并移除已删除的音频章节,同时同步更新
metadata.json。 - 文件恢复:增强了文件恢复机制,扫描时若发现 NFO/JSON 文件缺失会自动从数据库恢复。
- 强制同步:无论是否开启手动锁定,编辑元数据时只要开启写入配置,均会强制同步更新本地文件。
- 系列排重修复:重构了存储库扫描时系列匹配的底层数据库查询,加入
LOWER和TRIM处理,并且跨所有存储库进行全局排重匹配,引入了原子事务find_or_create,彻底解决了因并发同步或跨库同步导致的“重复创建同名系列”问题。
[1.1.9] - 2026-03-15
🚀 重大更新
✨ 新功能
- 多格式元数据读取:支持读取非 MP3 格式的音频元数据。
- 元数据写入:新增音频元数据写入功能(非 MP3 格式需安装插件支持)。
- 服务端转码播放:支持将客户端无法直接播放的格式(如 WMA)在服务端转码后输出(需安装插件支持)。
- Audiobookshelf 适配:支持解析 Audiobookshelf 的 JSON 元数据格式。
🛠️ 修复
- 倍速播放修复:修复了播放器倍速设置无效的问题。
- 增量/减量扫描:优化了存储库扫描机制,支持增量与减量扫描,大幅提升了变更检测效率。
- 章节名正则提取被截断问题修复:取消默认正则规则,每本书可以单独配置正则提取规则。
🔌 新插件
- Native Audio Support:通过 FFmpeg 提供原生音频格式支持(含元数据提取/写入与流式传输)。
- FFmpeg Provider:为其他插件提供 FFmpeg 二进制文件。
[1.1.8] - 2026-03-07
🛠️ 修复与优化
- 书架页面前端优化。
- 修改了自动合并逻辑:在后台自动合并任务中,增加了路径检查,避免合并错误的文件。
- 优化ID3标签提取:修复了一些ID3标签提取的问题,确保元数据的准确性。
[1.1.7] - 2026-03-07
🛠️ 优化
- 优化插件刮削流程。
✨ 新功能
- 增加系列书籍,可以手动添加系列书籍。
[1.1.6] - 2026-03-05
🛠️ 修复与优化
- MP3播放与ID3标签提取优化。
[1.1.5] - 2026-03-04
🛠️ 修复与优化
- fpk安装修复:修复fpk安装修改端口无法启动应用。
[1.1.4] - 2026-03-04
🛠️ 修复与优化
- 前端修复:修复设置界面无法打开。
[1.1.3] - 2026-03-04
🛠️ 修复与优化
- 其他问题修复:修复了若干已知的小问题,优化了整体使用体验。
[1.1.2] - 2026-03-04
🛠️ 修复与优化
- 内存泄漏修复:修复了在特定场景下(如长时间扫描或处理大文件)可能导致的内存泄漏问题,进一步提升了系统的稳定性。
- 刮削功能修复:修复了元数据刮削过程中可能出现的解析错误,提高了刮削的成功率和准确性。
- 其他问题修复:修复了若干已知的小问题,优化了整体使用体验。
[1.1.1] - 2026-03-02
🛠️ 修复与优化
- 内存泄漏修复:修复了在特定场景下(如长时间扫描或处理大文件)可能导致的内存泄漏问题,进一步提升了系统的稳定性。
- 刮削功能修复:修复了元数据刮削过程中可能出现的解析错误,提高了刮削的成功率和准确性。
- 其他问题修复:修复了若干已知的小问题,优化了整体使用体验。
[1.1.0] - 2026-03-01
🏗️ 架构重构 (Rust Edition)
- 后端完全重写:核心后端服务已从 Node.js 迁移至 Rust,带来极致的性能提升和内存优化。
- 内存占用降低 90%:得益于 Rust 的零成本抽象和无 GC 特性,空闲内存占用仅需约 20MB。
- 扫描速度提升 10x:利用 Rust 的并发能力,大规模音频库的元数据扫描和文件处理速度实现了质的飞跃。
- 单体可执行文件:后端编译为单一二进制文件,部署更加轻量便捷。
- SPA 静态托管:Rust 后端内置了对 React 前端的静态文件托管支持,现在只需部署一个容器即可运行完整的全栈应用。
🔌 插件系统 (New)
- 多语言插件支持:引入了全新的插件架构,支持多种类型的插件开发,满足不同场景需求:
- JavaScript 插件:基于内置轻量级 JS 运行时,开发简单,适合快速编写元数据刮削逻辑。
- WASM 插件:支持加载 WebAssembly 模块,兼顾性能与安全,适合复杂的计算任务。
- Native 插件:支持加载动态链接库 (.dll/.so),拥有底层系统访问权限,适合处理高性能解码或加密文件。
- 热插拔管理:支持在运行时动态加载、卸载和更新插件,无需重启服务。
- 安全沙箱:JS 和 WASM 插件运行在受限沙箱环境中,确保系统安全。
✨ 新特性与优化
- 全格式支持升级:借助 Rust 的
symphonia和ffmpeg绑定,音频解码能力进一步增强,原生支持 MP3, M4A, M4B, FLAC, OGG, OPUS, WAV 等主流格式。 - 配置系统重构:引入了层级化的配置系统(
config.toml),支持通过环境变量覆盖任意配置项,更符合 Docker 和云原生部署习惯。 - Docker 镜像优化:
- 采用多阶段构建,镜像体积大幅减小。
- 基础镜像切换至
debian-slim,确保运行环境精简且安全。 - 重新规划了容器目录结构(
/app/data,/app/storage,/app/plugins),映射更加直观。
🛠️ 破坏性变更
- 数据迁移:由于数据库结构微调,旧版本(Node.js 版)的
ting-reader.db可能需要手动迁移或重新扫描媒体库。 - 配置路径:配置文件统一移动至容器内的
/app/config.toml,旧的环境变量名称可能有变化,请参考最新的README.md。
[1.0.10] - 2026-02-16
🚀 性能与刮削优化
- 特殊格式扫描性能大幅提升:重构了加密等特殊格式文件的扫描逻辑,实现了文件头按需读取(Partial Read),不再将整个大文件加载到内存中。对于 50MB+ 的音频文件,扫描时的内存占用降低了 95% 以上,显著提高了大批量扫描的稳定性。
- 智能文件名刮削:新增了文件名元数据提取功能。当音频文件(如
.m4a)缺失内置标签且文件夹名称为 "Unknown Book" 时,系统会自动分析文件名(支持作者 - 书名 - 章节等多种格式),精准提取书名和作者,解决了格式转换后书籍无法识别的问题。 - 章节名称清洗增强:优化了章节标题的清洗算法,能够智能识别并去除文件名中的冗余信息(如重复的书名、作者名),仅保留核心章节名称,让章节列表更加清爽易读。
🎨 前端体验优化
- 操作逻辑改进:优化了前端交互逻辑,提升了用户操作的流畅度。
[1.0.9] - 2026-02-15
🚀 优化与改进
- 缓存逻辑优化:优化了服务端缓存处理逻辑。
- 界面优化:同步优化了 Web 前端书架和收藏页面的空状态显示。
[1.0.8] - 2026-02-11
🚀 性能与内存优化
- 智能内存管理:大幅优化了解密和扫描过程中的内存占用。
- WASM 按需加载:重构了解密核心,从全局单例改为按需实例化,彻底解决了处理大文件后内存无法回落的问题(内存泄漏修复)。
- 主动垃圾回收:在扫描和播放流程中引入了激进的内存释放策略,处理完文件后立即释放缓冲区,显著降低了并发峰值。
- 扫描精准度提升:将全量读取的阈值从 10MB 提升至 20MB,确保部分非标准编码的 MP3/M4A 文件能被准确读取时长和元数据。
[1.0.7] - 2026-02-10
📱 Android 客户端适配
- 网络权限修复:修复了 Android 9.0+ 设备默认禁止明文 HTTP 流量导致无法连接局域网服务器的问题(已在 App 侧添加
usesCleartextTraffic配置)。
🛠️ 扫描器稳定性与逻辑升级
- 无缝路径迁移:支持**“智能身份找回”**功能。当您修改存储库的根目录(例如从
/改为/Book)或移动书籍位置时,系统会自动识别同名书籍,保留所有阅读进度和收藏记录,无需重新刮削。 - 并发控制修复:
- 彻底解决了“双重任务”问题,确保每次配置修改只触发一个扫描任务。
- 引入了
AbortController深度中断机制,旧任务会在毫秒级内被新任务终止,杜绝数据库冲突。
- 容错增强:修复了
FOREIGN KEY constraint failed数据库崩溃问题,优化了删除逻辑的顺序,确保在清理无效数据时系统依然稳定。
[1.0.6] - 2026-02-08
🛠️ 修复与优化
- 前端路由修复:修复了在非根路径下刷新页面导致白屏(
MIME type error)的问题,将前端构建base路径调整为绝对路径/。
[1.0.5] - 2026-02-06
- 架构升级:完全分离桌面端代码到独立项目
ting-reader-client,主项目专注于服务端和 Web 前端。 - 桌面端支持:为新的纯客户端桌面应用提供 API 支持(包括 302 重定向解析、跨域头优化等)。
- 清理:移除了主项目中遗留的 Electron 相关构建脚本和依赖。
[1.0.4] - 2026-02-05
🎵 音频兼容性增强
- 全格式支持:除了基础的 MP3/M4A,现在完美支持 WMA, FLAC, OGG, OPUS, AAC, M4B 等格式。
- 实时转码:引入 FFmpeg 实时转码引擎。当检测到浏览器不支持的音频格式(如 WMA/FLAC)时,后端会自动将其转码为 MP3 流进行播放,无需预先处理文件。
- 环境升级:Docker 镜像现已预装 FFmpeg,开箱即用,无需额外配置。
✨ 新特性
- 书架筛选:书架页面新增了媒体库选择器,支持按来源库快速筛选展示书籍,管理多库资源更便捷。
- 高级筛选:重构了搜索页面的筛选体验,引入聚合筛选面板,支持按媒体库、标签、作者及演播者进行多维度组合筛选,并优化了移动端/桌面端的交互体验。
🛠️ 修复与优化
- 扫描器升级:优化了文件扫描逻辑,将 .m4b, .ogg, .opus, .wma 等格式加入白名单,支持元数据解析。
[1.0.3] - 2026-02-05
✨ 外挂组件 (Widget)
- 多模式嵌入:新增外挂播放器组件,支持“私有模式”(带 Token 免登录)和“公开模式”(需登录)。
- 灵活布局:
- 标准嵌入:随文档流展示。
- 吸底模式:固定在屏幕底部。
- 悬浮模式:右下角胶囊悬浮,支持响应式垂直布局(手机端自动适配)。
- 沉浸式体验:
- 支持点击 Widget 封面进入全屏沉浸式播放界面。
- 优化了全屏/小窗切换动画及状态同步。
- 高度定制:
- 支持在设置页面一键复制包含定位样式的完整 HTML 代码。
- 支持注入自定义 CSS 以修改 Widget 内部样式(如透明背景、隐藏按钮等)。
🛠️ 体验优化
- 播放器逻辑:重构了播放器响应式布局逻辑,移除了不稳定的 JS 监听,改用纯 CSS 媒体查询,彻底解决了白屏和布局挤压问题。
- 文档更新:新增了 Widget 集成指南。
[1.0.2] - 2026-02-03
✨ 播放器功能优化
- 自定义睡眠定时:支持设置任意分钟数的倒计时,并优化了 UI 布局,解决了按钮挤压问题。
- 定时器智能同步:倒计时现在会随播放状态自动暂停/恢复。
- 输入安全性:限制自定义定时输入为正整数,禁止负数输入。
🚀 UI/UX 修复
- 沉浸式进度条:修复了进度指示器(时间药丸)固定不移动的问题,现在会随播放进度平滑滑动。
- 播放状态同步:通过监听底层音频事件,确保图标状态(播放/暂停)与实际播放情况实时同步,修复了中断后图标不更新的问题。
[1.0.1] - 2026-02-03
✨ 新特性
- 媒体库同步清理:同步时自动检测并清理磁盘上已不存在的书籍和章节记录。
- 单本书籍管理:
- 支持从书架手动删除书籍。
- 本地源支持在删除时同步物理删除源文件。
- 删除书籍时自动清理关联的所有缓存(
.bin)和预加载文件。
- 智能合并去重:扫描时支持根据音频标签(Album)跨文件夹合并同一专辑,避免重复创建书籍。
- 自动初始化扫描:首次添加媒体库后自动触发一次同步任务,无需手动点击。
🚀 优化与改进
- 缓存机制优化:本地存储源(非加密文件)改为直接流式传输,不再占用额外的缓存空间。
- 刮削逻辑增强:优化了刮削器,支持更精准的描述清理和元数据提取。
- UI 改进:
- 后台管理菜单顺序调整:任务日志移动至库管理之后,方便查看同步状态。
- 增加删除书籍确认弹窗及危险操作提示。
- 版本管理:项目整体版本更新至 1.0.1。
[1.0.0] - 2026-02-03
- 初始版本发布。
查看更多历史版本或提交 Issue,请前往 GitHub。
前往 GitHub Releases