refactor: 提取文件、下载和音乐文件服务以重构 IPC 模块 - 将文件操作、下载和音乐元数据处理逻辑提取到独立的服务类中 - 重构 ipc-file.ts 以使用新服务,减少代码重复并提高可维护性 - 在 SongCard 组件中使用 formatFileSize 格式化文件大小显示 - 公开 LocalMusicService 的 paths getter 和错误常量ipc 01 by kazukokawagawa · Pull Request #855 · imsyy/SPlayer

added 6 commits

February 9, 2026 21:50
- 将文件操作、下载和音乐元数据处理逻辑提取到独立的服务类中
- 重构 ipc-file.ts 以使用新服务,减少代码重复并提高可维护性
- 在 SongCard 组件中使用 formatFileSize 格式化文件大小显示
- 公开 LocalMusicService 的 paths getter 和错误常量
- 将音乐库同步的扫描、封面处理与分块发送逻辑封装到 LocalMusicService.syncLibrary 方法
- 重构 MusicFileService 的元数据解析为分批处理以避免内存压力
- 将 DownloadService 的下载流程拆分为准备、执行、后处理等独立方法
- 简化 IPC 处理程序,移除重复的封面处理与分块逻辑
- 将 DownloadService 改为 EventEmitter 以支持进度事件
- 在 IPC 层添加下载映射,将进度事件转发给对应的渲染进程
- 重构下载流程,分离原始下载与元数据处理逻辑
- 使用 Electron net 模块下载专辑封面并临时存储
- 提供默认下载选项,增强代码健壮性
- 提取网络下载功能到独立的 network.ts 工具模块
- 提取艺术家格式化功能到独立的 artist.ts 工具模块
- 重构 DownloadService,分离下载逻辑与后处理逻辑
- 简化 ipc-file.ts 中的下载进度广播逻辑,移除 WebContents 映射
- 统一下载入口为 downloadMusic 方法,增强参数处理
使用展开运算符合并默认值时,如果传入的选项包含显式的 undefined,会错误地覆盖默认值。改为使用空值合并运算符(??)确保默认值只在选项为 null 或 undefined 时生效。

同时优化封面下载的文件名生成,通过 URL 解析去除查询参数,避免生成非法文件名。
优化媒体会话封面处理逻辑,在更新播放歌曲时传递已获取的封面数据给媒体会话管理器,避免对 blob URL 封面进行重复的网络请求。同时将 blob URL 的获取方式从 axios 统一为 fetch 以保持一致性。

gemini-code-assist[bot]

@kazukokawagawa