Skip to content

Commit

Permalink
Merge pull request #136 from jitwxs/dev
Browse files Browse the repository at this point in the history
Release v5.3
  • Loading branch information
jitwxs committed Dec 3, 2022
2 parents 018956c + 813a5df commit 3ea4ec6
Show file tree
Hide file tree
Showing 10 changed files with 159 additions and 21 deletions.
2 changes: 1 addition & 1 deletion MusicLyricApp/Api/QQMusicApiV2.cs
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ protected override IEnumerable<string> GetSongIdsFromAlbum0(string albumId)
result[songId] = new ResultVo<SongVo>(new SongVo
{
Id = song.Id,
DisplayId = songId,
DisplayId = song.Mid,
Links = links,
Pics = BuildPicUrl(song.Album),
Name = song.Name,
Expand Down
9 changes: 7 additions & 2 deletions MusicLyricApp/Api/QQMusicNativeApi.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,18 @@ public QQMusicBean.AlbumResult GetAlbum(string albumMid)
return resp.ToEntity<QQMusicBean.AlbumResult>();
}

public QQMusicBean.SongResult GetSong(string songMid)
/// <summary>
/// query music song
/// </summary>
/// <param name="id">query song by id, support songId and midId, eg: 001RaE0n4RrGX9 or 204422870</param>
/// <returns>music song</returns>
public QQMusicBean.SongResult GetSong(string id)
{
const string callBack = "getOneSongInfoCallback";

var data = new Dictionary<string, string>
{
{ "songmid", songMid },
{ GlobalUtils.CheckNum(id) ? "songid" : "songmid", id},
{ "tpl", "yqq_song_detail" },
{ "format", "jsonp" },
{ "callback", callBack },
Expand Down
2 changes: 1 addition & 1 deletion MusicLyricApp/Bean/Constants.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ namespace MusicLyricApp.Bean
{
public static class Constants
{
public const string Version = "v5.2";
public const string Version = "v5.3";

public static readonly string SettingPath = Environment.CurrentDirectory + "\\MusicLyricAppSetting.json";

Expand Down
59 changes: 59 additions & 0 deletions MusicLyricApp/Bean/MusicLyricsVO.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text.RegularExpressions;
using System.Web;
using MusicLyricApp.Exception;
using MusicLyricApp.Utils;
Expand Down Expand Up @@ -418,6 +419,64 @@ public LyricLineVo(string lyricLine)
}
}

public static List<LyricLineVo> Split(LyricLineVo main)
{
const string timestampPattern = @"\[\d+:\d+.\d+]";

var mainContent = main.Content;
var mc = Regex.Matches(mainContent, timestampPattern);

// not exist sub
if (mc.Count == 0)
{
return new List<LyricLineVo> { main };
}

var result = new List<LyricLineVo>();

var index = 0;

string timestamp = "", nextTimestamp = "";
int timestampIndex = 0, nextTimestampIndex = 0;
while (index < mc.Count)
{
if (index == 0)
{
timestamp = mc[index].Value;
timestampIndex = mainContent.IndexOf(timestamp, StringComparison.Ordinal);

// add first
result.Add(new LyricLineVo(mainContent.Substring(0, timestampIndex), main.Timestamp));
}

// find next timestamp
if (index + 1 < mc.Count)
{
nextTimestamp = mc[index + 1].Value;
nextTimestampIndex = mainContent.IndexOf(nextTimestamp, timestampIndex + timestamp.Length, StringComparison.Ordinal);

// add current
var startIndex = timestampIndex + timestamp.Length;
var content = mainContent.Substring(startIndex, nextTimestampIndex - startIndex);
result.Add(new LyricLineVo(content, new LyricTimestamp(timestamp)));
}
else
{
// already in end
var content = mainContent.Substring(timestampIndex + timestamp.Length);
result.Add(new LyricLineVo(content, new LyricTimestamp(timestamp)));
}

// let next to current
timestamp = nextTimestamp;
timestampIndex = nextTimestampIndex;

index++;
}

return result;
}

public int CompareTo(object input)
{
if (!(input is LyricLineVo obj))
Expand Down
18 changes: 8 additions & 10 deletions MusicLyricApp/MainForm.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
Expand Down Expand Up @@ -655,17 +656,14 @@ private async void UpdateLrcTextBox(string replace)
// 根据最新配置,更新输出歌词
if (_globalSaveVoMap != null && _globalSaveVoMap.Count == 1)
{
// only loop one times
foreach (var lyricVo in _globalSaveVoMap.Values.Select(saveVo => saveVo.LyricVo))
var lyricVo = _globalSaveVoMap.Values.First().LyricVo;
if (lyricVo.IsEmpty())
{
if (lyricVo.IsEmpty())
{
Console_TextBox.Text = ErrorMsg.LRC_NOT_EXIST;
}
else
{
Console_TextBox.Text = await LyricUtils.GetOutputContent(lyricVo, _globalSearchInfo);
}
Console_TextBox.Text = ErrorMsg.LRC_NOT_EXIST;
}
else
{
Console_TextBox.Text = await LyricUtils.GetOutputContent(lyricVo, _globalSearchInfo);
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion MusicLyricApp/Utils/LyricUtils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ private static async Task<List<LyricLineVo>> FormatLyric(string originLrc, strin

if (romajiConfig.Enable)
{
translateLyrics = await RomajiUtils.ToRomaji(originLyrics, translateLyrics, romajiConfig);
translateLyrics = await RomajiUtils.ToRomaji(originLyrics, translateLyrics, romajiConfig, searchInfo.SettingBean);
}

/*
Expand Down
18 changes: 15 additions & 3 deletions MusicLyricApp/Utils/RomajiUtils.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Kawazu;
using MusicLyricApp.Bean;
Expand All @@ -10,8 +11,11 @@ namespace MusicLyricApp.Utils
public static class RomajiUtils
{
public static async Task<List<LyricLineVo>> ToRomaji(List<LyricLineVo> inputList, List<LyricLineVo> faultList,
RomajiConfigBean romajiConfig)
RomajiConfigBean romajiConfig, SettingBean settingBean)
{
var timestampFormat = settingBean.Param.LrcTimestampFormat;
var dotType = settingBean.Param.DotType;

if (inputList.Any(vo => Utilities.HasKana(vo.Content)))
{
var converter = new KawazuConverter();
Expand All @@ -22,8 +26,16 @@ public static class RomajiUtils

foreach (var vo in inputList)
{
var content = await converter.Convert(vo.Content, To.Romaji, mode, system, "(", ")");
resultList.Add(new LyricLineVo(content, vo.Timestamp));
// need try split sub lyricLineVO, resolve verbatim lyric mode
var content = new StringBuilder();
foreach (var subVo in LyricLineVo.Split(vo))
{
var subContent = await converter.Convert(subVo.Content, To.Romaji, mode, system, "(", ")");

content.Append(subVo.Timestamp.PrintTimestamp(timestampFormat, dotType) + subContent);
}

resultList.Add(new LyricLineVo(content.ToString()));
}

return resultList;
Expand Down
9 changes: 8 additions & 1 deletion MusicLyricApp/Utils/XmlUtils.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Xml;

namespace MusicLyricApp.Utils
{
public static class XmlUtils
{
private static Regex _badAmpersand = new Regex("&(?![a-zA-Z]{2,6};|#[0-9]{2,4};)");

private static string _goodAmpersand = "&amp;";

/// <summary>
/// 创建 XML DOM
/// </summary>
Expand All @@ -15,6 +19,9 @@ public static XmlDocument Create(string content)
{
content = RemoveIllegalContent(content);

// replace & symbol
content = _badAmpersand.Replace(content, _goodAmpersand);

var doc = new XmlDocument();

doc.LoadXml(content);
Expand Down
7 changes: 6 additions & 1 deletion MusicLyricAppTest/Api/QQMusicNativeApi.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,12 @@ public class QQMusicNativeApi
[Test]
public void GetSong()
{
_api.GetSong("003KDOb01SUyD5");
var res1 = _api.GetSong("204422870");
var res2= _api.GetSong("001RaE0n4RrGX9");

Assert.AreEqual(res1.Code, res2.Code);
Assert.AreEqual(res1.Data.Length, res2.Data.Length);
Assert.AreEqual(res1.Data[0].Id, res2.Data[0].Id);
}

[Test]
Expand Down
54 changes: 53 additions & 1 deletion MusicLyricAppTest/Bean/MusicLyricsVOTest.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using MusicLyricApp.Bean;
using System.Text;
using MusicLyricApp.Bean;
using NUnit.Framework;

namespace MusicLyricAppTest.Bean
Expand Down Expand Up @@ -40,5 +41,56 @@ public void TestLyricTimestamp()
var timestamp = new LyricTimestamp("[End]");
Assert.AreEqual(0, timestamp.TimeOffset);
}

[Test]
public void TestLyricLineVoSplit1()
{
var vo = new LyricLineVo("", new LyricTimestamp(0));

var voList = LyricLineVo.Split(vo);

Assert.AreEqual(1, voList.Count);

Assert.AreEqual(vo.Print("[mm:ss.SSS]", DotTypeEnum.DOWN), voList[0].Print("[mm:ss.SSS]", DotTypeEnum.DOWN));
}

[Test]
public void TestLyricLineVoSplit2()
{
var vo = new LyricLineVo("た[00:22.153]1な[00:23.113]ぎ[00:23.417]さ[00:23.721]1い[00:24.936]ま[00:25.176]1お" +
"[00:25.690]も[00:26.186]1だ1す[00:29.925]な[00:30.173]1う[00:30.781]え[00:31.166]1き" +
"[00:32.151]ざ[00:32.421]1こ[00:33.392]と[00:33.696]1ば1き[00:34.928]み[00:35.031]1う[00:35.673]し" +
"[00:36.192]1す[00:37.096]が[00:37.400]た[00:37.896]1よ1か[00:40.601]え[00:40.849]1な[00:41.785]み" +
"[00:42.097]1あ[00:43.392]し[00:43.609]1も[00:43.872]と[00:44.288]1な[00:45.872]に[00:46.216]1さ" +
"[00:47.112]ら[00:47.448]1ゆ[00:49.912]う[00:49.947]1な[00:50.622]ぎ[00:51.476]1な[00:52.099]か" +
"[00:52.541]1ひ1ぐ1とお1す1い1ひ[01:00.309]か[01:00.573]1さ1は[01:02.414]な[01:02.686]1び1み1お1な" +
"[01:07.478]つ[01:07.524]1あ[01:09.837]い[01:09.917]1ま[01:10.261]い[01:10.286]1こ[01:10.853]こ" +
"[01:11.174]ろ[01:11.341]1と1つ[01:13.365]な[01:13.677]1よ[01:15.202]る[01:15.378]1つ[01:16.170]づ" +
"[01:16.218]1ほ1なん1ど1き[01:31.082]み[01:31.266]1お[01:31.540]な[01:31.812]1はな1び1み1わ[01:34.911]ら" +
"[01:34.986]1か[01:35.402]お[01:35.569]1な[01:35.934]に[01:36.198]1き[01:40.223]ず[01:40.277]1よ" +
"[01:41.450]ろ[01:41.503]こ[01:41.800]1く1か[01:43.044]え[01:43.110]1な[01:43.558]み" +
"[01:43.642]1じょう1どう1しょう1そう1さ[01:45.781]い[01:45.873]1しゅう1れっ1しゃ1お[01:47.931]と" +
"[01:48.507]1なん1ど1こ[01:52.411]と[01:52.443]1ば1き[01:53.870]み[01:53.907]1よ1な[01:55.068]み" +
"[01:55.099]1ま1え[01:55.809]ら[01:55.823]1い[01:56.823]ち[01:56.861]1ど1に1ど1か[02:02.344]な" +
"[02:02.512]1す1い[02:17.761]き[02:18.081]1の1き1ひ[02:21.133]か[02:21.310]り[02:21.477]1む" +
"[02:23.667]ね[02:23.856]1す1て1の1ふ1み1ら[02:31.190]い[02:31.374]1ふた1り1み1はな1び1よ[02:40.839]る" +
"[02:41.103]1さ1よ[02:43.372]る[02:43.588]1さ1し[02:45.829]ず[02:45.903]1き1は[02:48.269]な[02:48.533]1は" +
"[02:49.727]な[02:49.852]1す[02:51.134]こ[02:51.171]1す[02:53.677]こ[02:53.730]1ひ1み1わ[03:09.052]た" +
"[03:09.604]1な[03:10.540]ぎ[03:10.828]さ[03:11.148]1い[03:12.468]ま[03:12.724]1お[03:13.130]も" +
"[03:13.626]1だ1す[03:17.290]な[03:17.586]1う[03:18.250]え[03:18.636]1き[03:19.594]ざ[03:19.810]1こ" +
"[03:20.800]と[03:21.152]1ば1き[03:22.408]み[03:22.664]1う[03:23.312]し[03:23.785]1す[03:24.608]が" +
"[03:24.920]た[03:25.312]1ひ[03:27.798]か[03:28.063]1さ1は[03:29.846]な[03:30.151]1び1み1お1な[03:34.966]つ" +
"[03:34.985]1あ[03:37.277]い[03:37.379]1ま[03:37.666]い[03:37.724]1こ[03:38.164]こ[03:38.620]ろ" +
"[03:38.788]1と1つ[03:40.895]な[03:41.206]1よ[03:42.655]る[03:42.831]1つ[03:43.633]づ[03:43.755]1ほ]", new LyricTimestamp(0));
var voList = LyricLineVo.Split(vo);

var sb = new StringBuilder();
foreach (var subVo in voList)
{
sb.Append(subVo.Print("[mm:ss.SSS]", DotTypeEnum.DOWN));
}

Assert.AreEqual(vo.Print("[mm:ss.SSS]", DotTypeEnum.DOWN), sb.ToString());
}
}
}

0 comments on commit 3ea4ec6

Please sign in to comment.