Skip to content

feat: 新增音乐流派(Genre)解析与 UI 显示支持 - #307

Open
MasterZack69 wants to merge 1 commit into
SPlayer-Dev:devfrom
MasterZack69:feat/genre-pr
Open

MasterZack69 wants to merge 1 commit into
SPlayer-Dev:devfrom
MasterZack69:feat/genre-pr

Conversation

@MasterZack69

@MasterZack69 MasterZack69 commented Sep 22, 2026 •

Copy link
Copy Markdown

改动类型

  • 新功能(feat)
  • 缺陷修复(fix)
  • 重构 / 优化(不改变对外行为)
  • 文档(docs)
  • 其他(请在「改动说明」中注明)

是否包含破坏性变更

  • 是(请在「改动说明」中详细描述)
  • 否

改动说明

简介

为本地音乐库新增完整的「流派」支持:涵盖元数据解析、持久化入库、查询检索,并在侧边栏、库页面、歌曲列表、播放器与统计页中提供完整展示与交互。

原 PR 中「封面悬停播放按钮无法点击」的修复已拆分为独立 PR,本 PR 仅包含流派功能。

主要改动

1. 元数据与原生层

  • native/audio-engine:扫描与播放元数据新增 genre 字段(读取 genre / TCON / style 标签),同步更新 index.d.ts。
  • electron/main/utils/metadata.ts:新增 parseGenres 与 formatGenres:
    • 支持 ,、;、、、,、|、//、/、& 以及 NUL 等多种分隔符;
    • 智能保留复合名称内部的斜杠与 &(如 Singer/Songwriter、R&B),空格永不拆分(如 Pop Rock);
    • 内置常见复合流派白名单(如 Rock & Roll、Drum & Bass、Hip Hop/Rap 等);
    • 清洗外层引号与 ID3v1 数字编码(如 (17)),过滤 Unknown / Other,并进行大小写不敏感去重。
  • CUE 解析:补充对 REM GENRE 指令的支持。

2. 数据库

  • tracks 表新增可空 genres 列,并配套提供 v4 → v5、v5 → v6 迁移脚本。
  • 新增 getGenreList、getGenreTracks 与 hasTracksMissingGenres 查询;库统计数据新增 genreCount。
  • 扫描机制:旧库若检测到流派缺失,扫描器会自动降级为全量扫描以补齐数据。

3. IPC 与类型定义

  • 新增通道:library:getGenres、library:getGenreTracks。
  • 类型同步:Track 与 MediaInfo 增加 genres 字段。

4. 界面与交互

  • 导航与路由:侧边栏新增「流派」入口(位于「专辑」下方,含一次性排序迁移逻辑,不影响用户已有的自定义排序);新增 /genres/local 列表页与 /collection/local/genre/:name 详情页(复用现有列表组件)。
  • 视图展示:歌曲列表新增流派列,全局搜索支持流派匹配;全屏播放器在专辑下方显示可点击的流派标签;统计页补充流派数量卡片。

关联 Issue

未找到相关 Issue

测试情况

  • 代码质量检查:pnpm typecheck、pnpm lint、pnpm test 均通过。
  • 原生模块与单测:
    • 新增 electron/main/utils/metadata.test.ts 流派解析单测并通过;
    • 运行 cargo test -p audio-engine metadata 通过。
  • 实际运行验证:已在本地完成全量构建,端到端验证文件扫描、元数据入库、目录浏览与音频播放流程。

截图 / 录屏

image image image image image

自查清单

  • 本 PR 只包含一个主要功能 / 修复,没有夹带无关改动
  • 已在本地完整测试通过;AI 生成的代码同样自行测试并审阅过,未做未经验证的提交
  • 已运行 pnpm format,并确认 pnpm typecheck、pnpm lint 通过
  • 改动涉及原生模块时已 pnpm build:native 验证;未手写 native/*/index.d.ts
  • 已向 dev 分支提交

@MasterZack69
MasterZack69 force-pushed the feat/genre-pr branch 2 times, most recently from 7ec68af to d9abc8a Compare September 29, 2026 06:22
@MasterZack69 MasterZack69 changed the title 新增流派解析与 UI 显示支持,修复卡片悬停播放按钮无效的问题 feat: 新增音乐流派(Genre)解析与 UI 显示支持 Sep 29, 2026
@MasterZack69

Copy link
Copy Markdown
Author

这个 PR 原本同时包含了一个新功能和一个修复,现在我已经把修复部分拆分到了新的 PR #331

@MasterZack69
MasterZack69 marked this pull request as draft September 29, 2026 06:42
@MasterZack69
MasterZack69 marked this pull request as ready for review September 29, 2026 07:13

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant