ci: 在 nightly 工作流中添加跨平台环境变量文件复制步骤 添加 Windows 和 macOS/Linux 系统的条件步骤,用于在 .env 文件不存在时从 .env.example 复制。这确保了 nightly 构建在不同操作系统上都能正确加载环境配置。#839
Conversation
- 重构时间解析函数,使用纯数学运算替代字符串操作以提高性能 - 移除全局正则表达式,改为在函数内局部使用避免状态污染 - 在解析过程中直接计算结束时间,消除二次遍历 - 优化歌词对齐算法,使用双指针实现 O(N) 复杂度 - 改进 QRC 格式解析,提前编译正则并优化 XML 内容提取 - 统一默认单词持续时间处理逻辑
- 在 DownloadManager 中添加 removeDownload 方法,支持从队列和 store 中移除任务 - 修复下载页面中播放全部按钮的逻辑,仅对已下载歌曲生效 - 优化下载中页面的封面显示逻辑,统一使用 getCover 方法 - 将 handleRemoveDownload 的参数类型扩展为 number | string 以支持多种 ID 类型
- 使用字符串补齐替代浮点数计算,避免时间解析的精度误差 - 将 alignLyrics 改为纯函数,不再修改输入数组 - 引入 XmlNode 辅助类重构 TTML 生成逻辑,提高可读性 - 优化 QRC 内容提取的正则表达式,增强健壮性
将 QRC 歌词解析中的 LyricContent 提取逻辑重构为策略模式,根据运行环境自动选择 DOM 或正则解析器,提高代码可维护性和跨环境兼容性。
- 导出 `getThemeFromColor` 工具函数用于颜色主题计算 - 新增 IPC 通信通道传递主题色数据 - 在任务栏歌词组件中根据主题色动态调整文本颜色 - 监听主题相关设置变化并实时更新任务栏歌词颜色
在设置中添加“任务栏歌词跟随主题色”选项,允许用户控制任务栏歌词颜色是否与应用主题同步。当关闭时,歌词将恢复为默认颜色。
使用Data URL替代Blob URL存储音乐封面,避免跨窗口或跨进程引用失效导致的封面闪烁和消失问题。移除对BlobURLManager的依赖,简化封面处理逻辑。
在任务栏歌词组件中添加设置选项,允许用户控制是否显示翻译歌词和罗马音歌词。通过 IPC 将设置同步到主进程,确保前后端状态一致。
当读取操作被中止时,未处理onabort事件可能导致Promise永远挂起。 添加onabort事件处理器来拒绝Promise,确保异常情况能被正确处理。
添加 Windows 和 macOS/Linux 系统的条件步骤,用于在 .env 文件不存在时从 .env.example 复制。这确保了 nightly 构建在不同操作系统上都能正确加载环境配置。
Summary of ChangesHello @kazukokawagawa, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! 此拉取请求主要侧重于提升应用程序的用户体验,特别是在歌词显示和媒体处理方面。它为任务栏歌词引入了动态主题色功能,并对底层的歌词解析引擎进行了显著的重构和性能优化,以提高准确性和稳定性。同时,通过改用 Data URL 解决了歌曲封面显示中的一个长期存在的问题。此外,还增强了下载管理功能,并提供了更灵活的歌词显示选项。 Highlights
Changelog
Ignored Files
Activity
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
There was a problem hiding this comment.
Code Review
本次 PR 主要包含了两大部分的更新:为任务栏歌词添加了跟随主题色的新功能,并对歌词解析器(lyricParser.ts)进行了一次重大的重构。
整体来看,代码质量非常高。特别是歌词解析器的重构,显著提升了性能、可维护性和代码健壮性。例如:
alignLyrics函数的对齐算法从 O(N*M) 优化到了 O(N+M),效率大幅提升。lyricLinesToTTML函数改用XmlNode构建器来生成 XML,代码更清晰且不易出错。- 多个解析函数中,通过改用
matchAll避免了带状态的全局正则表达式可能引发的问题。
此外,将歌曲封面从 Blob URL 改为 Data URL,解决了跨窗口引用失效的问题,是一个很好的修复。
我发现了一个潜在的高危问题,在新增的 qrc-parser.ts 文件中,可能会因为未处理的 null 值导致运行时错误。
最后,PR 的标题(关于 CI 工作流)似乎与本次的代码变更内容(应用功能和重构)不符,建议修改标题以准确反映 PR 的内容。
| return ""; | ||
| } | ||
|
|
||
| return doc.documentElement.getAttribute("LyricContent") || ""; |
There was a problem hiding this comment.
在 domParser 函数中,doc.documentElement 可能为 null,例如当解析的 XML 字符串只包含注释或处理指令时。直接访问 doc.documentElement.getAttribute 会导致抛出 TypeError。虽然外层有 try...catch 捕获,但更好的做法是添加一个空值检查来优雅地处理这种情况。
| return doc.documentElement.getAttribute("LyricContent") || ""; | |
| return doc.documentElement?.getAttribute("LyricContent") || ""; |
No description provided.