常规更新
✨ Features
- 支持纯音频文件:优化判断逻辑,现在可以正确处理纯音频 strm 文件(如音乐、电台等)
- 完善媒体信息采集:新增文件大小、容器格式等信息的采集,使备份信息更加完整
- 添加最大并发控制:新增
CommonConfiguration.MaxConcurrency配置,默认值为 3 - 改进提取任务并发处理:使用
SemaphoreSlim控制提取任务的最大并发数,提升系统稳定性
🐛 Bug Fixes
- 修复 STRM 文件读取异常处理:为
StrmMediaInfoService.ReadStrmSourcePath()添加完整的异常处理,防止文件不存在、无权限等情况导致未捕获异常 - 修复资源泄漏:为
ItemAddedEventHandler实现IDisposable接口,正确释放SemaphoreSlim资源 - 修复命名冲突:使用
using别名解决与 Emby 内置LogHelper的命名冲突问题 - 修复命名空间引用问题:在
ItemAddedEventHandler中添加_jsonSerializer私有字段,使用构造函数注入的实例而非静态Plugin.JsonSerializer - 修复并发控制问题:将
Task.Delay()从获取SemaphoreSlim之后移到之前,确保事件按照添加顺序进入信号量 - 修复空引用异常:在
MediaInfoHelper.HasJsonFile()和ShouldRestoreFromJson()中添加mediaInfoManager空值检查 - 修复 LibraryOptions 空值问题:在
MediaInfoManager.ExportItemAsync()中添加libraryOptions空值检查并记录警告日志
🛠 Improvements
- 重构 MediaInfoManager:将
ExportItemAsync()和RestoreItemAsync()两个过长的方法拆分为多个职责单一的小方法,提升可维护性- 拆分为
PrepareMediaSourcesForExportAsync()、SanitizeMediaSourceInfo()、RestoreMediaStreams()等 10+ 个小方法
- 拆分为
- 优化服务实例复用:在
ItemAddedEventHandler中复用StrmFileProcessor实例,避免每次事件触发都创建新实例 - 优化依赖注入链:在
Plugin级别预先创建并传递依赖实例,提升性能 - 统一日志记录:所有日志现在都通过
LogHelper类,确保前缀一致 - 移除冗余代码:移除多余的 null 检查,依赖注入保证参数非空
- 代码质量优化:改进资源管理模式,防止内存泄漏
- 性能优化:优化处理判断逻辑,提升整体处理效率
- 代码重构:优化
MediaInfoHelper、MediaInfoManager、StrmFileProcessor等核心类的实现 - 增强线程安全性:为
Plugin.Instance和Plugin.JsonSerializer添加线程安全的访问控制 - 优化代码注释:统一代码注释格式,移除多余的全角空格
- 改进任务执行:使用
_丢弃未使用的 Task 返回值,消除编译器警告
📝 Documentation
- 从本次开始,使用三段式版本号:2.1.1