Skip to content

✨ feat: 增加下载嵌入翻译和音译功能#612

Merged
imsyy merged 6 commits into
SPlayer-Dev:devfrom
Txt-Text:dev-dl
Dec 5, 2025
Merged

✨ feat: 增加下载嵌入翻译和音译功能#612
imsyy merged 6 commits into
SPlayer-Dev:devfrom
Txt-Text:dev-dl

Conversation

@Txt-Text
Copy link
Copy Markdown
Contributor

@Txt-Text Txt-Text commented Dec 4, 2025

No description provided.

@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello @Txt-Text, 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!

此拉取请求引入了一项新功能,允许用户在下载歌曲时选择同时下载歌词的翻译和音译(罗马音)。它通过在设置界面添加新的配置选项,并重构了下载管理器中的歌词处理逻辑来实现,确保了多语言歌词能够被正确地解析和嵌入到下载文件中。

Highlights

  • 新增歌词下载选项: 在设置界面增加了下载歌词翻译和歌词音译(罗马音)的开关,允许用户更精细地控制下载内容。
  • 歌词处理逻辑增强: 下载管理器现在能够解析、合并原始歌词、翻译和音译,并支持时间标签的模糊匹配,以确保多语言歌词的同步和准确嵌入。
  • 默认设置调整: 将歌词音译的默认下载选项从启用改为禁用,以提供更合理的初始用户体验。
Using Gemini Code Assist

The 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 /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

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 .gemini/ folder in the base of the repository. Detailed instructions can be found here.

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

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

本次 PR 增加了下载歌词时嵌入翻译和音译的功能,实现很完整。主要逻辑集中在 downloadManager.ts 文件中,通过解析和合并不同版本的歌词文件来生成最终的 .lrc 文件。

代码整体功能实现正确,但在 downloadManager.ts 中处理歌词合并的逻辑部分,存在一些性能和代码结构上的改进空间。我提出了一些重构建议,旨在提高代码的可读性、可维护性和运行效率。具体请看我的详细评论。

Comment thread src/utils/downloadManager.ts Outdated
Comment on lines +329 to +350
const findMatch = (map: Map<string, string>, currentTag: string) => {
// Exact match
const exact = map.get(currentTag);
if (exact) return exact;

// Fuzzy match
const tSec = timeStrToSeconds(currentTag.slice(1, -1));
let bestTag: string | null = null;
let bestDiff = Infinity;
for (const key of Array.from(map.keys())) {
const kSec = timeStrToSeconds(key.slice(1, -1));
const diff = Math.abs(kSec - tSec);
if (diff < bestDiff) {
bestDiff = diff;
bestTag = key;
}
}
if (bestTag && bestDiff < 0.5) {
return map.get(bestTag);
}
return null;
};
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

为了提高性能和代码可读性,建议将 findMatch 辅助函数移出 for 循环。目前它在每次循环迭代时都会被重新定义,这会带来不必要的性能开销。

您可以将它与 timeStrToSecondsparseToMap 函数一起定义在 if (lrc) 块的顶部。

Comment thread src/utils/downloadManager.ts Outdated
Comment on lines +352 to +370
// Append translation
if (tlyric) {
const transText = findMatch(tMap, timeTag);
if (transText) {
for (const lt of transText.split("\n")) {
if (lt.trim()) lines.push(`${timeTag}${lt}`);
}
}
}

// Append romaji
if (romalrc) {
const romaText = findMatch(rMap, timeTag);
if (romaText) {
for (const lt of romaText.split("\n")) {
if (lt.trim()) lines.push(`${timeTag}${lt}`);
}
}
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

这部分附加翻译和音译歌词的逻辑几乎完全相同。为了提高代码的可维护性并减少重复,可以将其重构得更简洁。

注意:应用此建议前,需要先将 findMatch 函数的定义移出当前循环,正如我在另一条评论中提到的。

                // Append translation and romaji
                [
                  { enabled: tlyric, map: tMap },
                  { enabled: romalrc, map: rMap },
                ].forEach(({ enabled, map }) => {
                  if (enabled) {
                    const matchedText = findMatch(map, timeTag);
                    if (matchedText) {
                      for (const lt of matchedText.split("\n")) {
                        if (lt.trim()) lines.push(`${timeTag}${lt}`);
                      }
                    }
                  }
                });

@imsyy imsyy merged commit fe5dfcd into SPlayer-Dev:dev Dec 5, 2025
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.

3 participants