feat: 乐曲切换流派至宴会场时自动更改 ID 并转换谱面
改动内容
在乐曲编辑页把「流派」改成「宴会场」时:
- 二次确认后自动把乐曲 ID 改为原 ID + 100000(仅原 ID 小于 100000 时)
- 把唯一启用的难度谱面转换为 Basic 谱面:交换两个槽位的谱面文件,原难度的等级/定数/谱师/音符数搬到 Basic 槽位并启用 Basic,原难度禁用
- 本来就只有 Basic 启用时不再提示转换谱面
- 启用多个难度 / 没有启用谱面 / 目标 ID 已被占用时给出提示并回滚流派
另外,流派由宴会场切回其他流派时会提示,并把 ID 减 100000(ID 大于 100000 时)。
涉及文件
MaiChartManager/Controllers/Music/MusicController.cs:新增ConvertSingleChartToBasicApiMaiChartManager/Front/src/views/Charts/MusicEdit/index.tsx:流派切换拦截、确认弹窗、转换调用链MaiChartManager/Front/src/client/apiGen.ts:genClient 重新生成MaiChartManager/Front/src/locales/{zh,zh-TW,en}.yaml:新增文案
测试
本地 Crack 构建(Packaging/Build.ps1 同流程)下验证:普通曲切宴会场(ID +100000、非 Basic 难度转 Basic)、仅 Basic 启用时切宴会场、多难度时拦截、宴会场切回其他流派(ID -100000)。
Sourcery 总结
通过协调曲种变更、ID 更新和谱面可用状态,自动安全地转换普通乐曲与宴谱乐曲。
新功能:
- 新增宴谱曲种自动转换功能,可调整乐曲 ID,并将一个已启用的非 Basic 谱面转换为 Basic 谱面。
- 将宴谱歌曲切换回其他曲种时,自动恢复其 ID。
错误修复:
- 当谱面状态无效或目标乐曲 ID 已被占用时,阻止曲种变更;若变更失败,则恢复原曲种。
增强功能:
- 为宴谱转换与恢复流程新增确认对话框和本地化提示,支持简体中文、繁体中文和英语。
杂项:
- 为新增的谱面转换端点重新生成乐曲 API 客户端。
Original summary in English
Sourcery 摘要
通过协调曲目类型变更、ID 和已启用谱面数据,实现普通曲目与宴曲之间安全、原子的转换。
新功能:
- 新增普通曲目与宴曲之间的原子类型切换,包括自动恢复 ID 偏移量,以及将单谱面转换为 BASIC。
错误修复:
- 当谱面状态无效、目标 ID 冲突、存在不受支持的双人谱面,或转换失败时,阻止变更曲目类型,并回滚至原始状态。
增强功能:
- 为曲目类型转换流程新增事务确认、覆盖处理、本地化错误消息和刷新行为,支持简体中文、繁体中文和英语。
杂项:
- 为新增的曲目类型变更端点重新生成前端 API 客户端。
Original summary in English
Sourcery 摘要
在普通类型与宴会(Utage)类型之间切换时,原子性地更新乐曲 ID 和谱面可用性,同时确保数据完整性。
新功能:
- 支持在普通类型与宴会(Utage)类型之间进行事务性乐曲类型转换,包括自动恢复 ID 偏移量,以及将单谱面转换为 Basic。
错误修复:
- 当谱面状态、谱面文件、目标 ID 或转换前提条件无效时,阻止更改类型;如果转换过程中发生错误,则回滚部分更改。
增强功能:
- 支持安全交换谱面文件、处理双人谱面、确认覆盖操作,以及以中文和英文显示本地化的转换反馈。
维护工作:
- 重新生成用于类型转换接口的前端 API 客户端。
Original summary in English
Sourcery 总结
支持在普通曲风与宴曲曲风之间安全、事务性地切换,并协调处理 ID 和谱面转换。
新功能:
- 支持普通音乐与宴曲曲风之间的事务性转换,包括自动调整 ID 偏移量,以及将一个已启用的非 Basic 谱面转换为 Basic 谱面。
- 支持将宴曲恢复为普通曲风,同时反向调整 ID 偏移量,并拒绝不受支持的双人谱面。
错误修复:
- 当谱面状态、谱面文件、目标 ID 或转换前提条件无效时,阻止曲风变更;转换部分失败时回滚操作。
改进:
- 从编辑器的角度,确保谱面文件交换以及曲风、ID 和谱面状态更新以原子方式完成,并支持确认、覆盖处理和刷新。
文档:
- 为简体中文、繁体中文和英文添加本地化的转换提示和错误消息。
杂项:
- 重新生成曲风变更接口的前端 API 客户端。
Original summary in English
Sourcery 摘要
支持在普通音乐类型与 Utage 音乐类型之间安全、事务性地进行转换,同时确保 ID、谱面数据和启用状态保持一致。
新功能:
- 支持在 Utage 与其他音乐类型之间原子切换,包括自动调整 ID 偏移量,以及将一个已启用的非 Basic 谱面转换为 Basic 谱面。
- 增加保护措施,处理不支持的多人谱面、无效谱面状态、缺失文件和目标 ID 已被占用等情况;转换失败时会回滚。
改进:
- 添加确认提示、覆盖处理、错误反馈,以及简体中文、繁体中文和英文的本地化转换消息。
- 重新生成用于类型变更端点的前端 API 客户端。
Original summary in English
Sourcery 总结
支持在宴会曲(Utage)与其他音乐类型之间安全、事务性地切换,同时确保音乐 ID、谱面文件、谱面元数据和启用状态保持一致。
新功能:
- 新增宴会曲与其他音乐类型之间的事务性转换,包括宴会曲 ID 的分配与恢复,以及将单个已启用的非 Basic 谱面转换为 Basic 谱面。
- 处理音乐类型转换期间的谱面文件交换、谱面元数据迁移和回滚,并为不受支持的双人谱面及无效转换状态添加保护措施。
错误修复:
- 当谱面前置条件、目标 ID、谱面文件或转换操作无效时,阻止更改音乐类型;如果转换失败,则恢复原始音乐类型。
优化:
- 在音乐编辑器中拦截音乐类型更改,并通过确认对话框、本地化错误提示,以及转换成功后的音乐选择刷新来引导操作。
杂项:
- 为新增的音乐类型更改端点重新生成前端 API 客户端。
- 为音乐类型转换流程添加简体中文、繁体中文和英文本地化字符串。
Original summary in English
Summary by Sourcery
Support safe, transactional switching between Utage and other music genres while keeping music IDs, chart files, chart metadata, and enabled states consistent.
New Features:
- Add transactional conversion between Utage and other music genres, including Utage ID allocation/restoration and conversion of a single enabled non-Basic chart into Basic.
- Handle chart-file swapping, chart metadata transfer, and rollback during genre conversion, including safeguards for unsupported double-player charts and invalid conversion states.
Bug Fixes:
- Prevent genre changes when chart prerequisites, target IDs, chart files, or conversion operations are invalid, and restore the original genre when conversion fails.
Enhancements:
- Intercept genre changes in the music editor with confirmation dialogs, localized error feedback, and refreshed music selection after successful conversion.
Chores:
- Regenerate the frontend API client for the new genre-change endpoint.
- Add Simplified Chinese, Traditional Chinese, and English localization strings for genre conversion workflows.