From 6b2f98de104ea0e81cbf9af0db608a1b25ea1b21 Mon Sep 17 00:00:00 2001 From: jitwxs Date: Sun, 26 Feb 2023 12:18:17 +0800 Subject: [PATCH 1/7] upgrade version v5.9 --- MusicLyricApp/Bean/Constants.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MusicLyricApp/Bean/Constants.cs b/MusicLyricApp/Bean/Constants.cs index b644653..450c71b 100644 --- a/MusicLyricApp/Bean/Constants.cs +++ b/MusicLyricApp/Bean/Constants.cs @@ -5,7 +5,7 @@ namespace MusicLyricApp.Bean { public static class Constants { - public const string Version = "v5.8"; + public const string Version = "v5.9"; public static readonly string SettingPath = Environment.CurrentDirectory + "\\MusicLyricAppSetting.json"; From 3920567a6db4848ca4574061594f3d510f78eeae Mon Sep 17 00:00:00 2001 From: jitwxs Date: Sun, 26 Feb 2023 12:19:12 +0800 Subject: [PATCH 2/7] fix qq music verbatim lyric last timestamp lost bugs #155 --- MusicLyricApp/Bean/MusicLyricsVO.cs | 5 +++++ MusicLyricApp/Utils/LyricUtils.cs | 23 ++++++++++++++++------- MusicLyricAppTest/Utils/LyricUtilsTest.cs | 2 +- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/MusicLyricApp/Bean/MusicLyricsVO.cs b/MusicLyricApp/Bean/MusicLyricsVO.cs index 24ffa04..450e199 100644 --- a/MusicLyricApp/Bean/MusicLyricsVO.cs +++ b/MusicLyricApp/Bean/MusicLyricsVO.cs @@ -451,6 +451,11 @@ public LyricTimestamp(long millisecond) TimeOffset = millisecond; } + public LyricTimestamp Add(long millisecond) + { + return new LyricTimestamp(TimeOffset + millisecond); + } + /// /// 初始化 LyricTimestamp /// diff --git a/MusicLyricApp/Utils/LyricUtils.cs b/MusicLyricApp/Utils/LyricUtils.cs index 9d06ef2..c40be42 100644 --- a/MusicLyricApp/Utils/LyricUtils.cs +++ b/MusicLyricApp/Utils/LyricUtils.cs @@ -77,15 +77,13 @@ public static string DealVerbatimLyric(string originLrc, SearchSourceEnum search int leftParenthesesIndex = group.Index, parenthesesLength = group.Length; // (404,202) - var timestamp = line.Substring(leftParenthesesIndex, parenthesesLength); + var timeStr = line.Substring(leftParenthesesIndex, parenthesesLength); // 404 - timestamp = timestamp.Split(',')[0].Trim().Substring(1); - // format - timestamp = new LyricTimestamp(long.Parse(timestamp)) - .PrintTimestamp(defaultParam.LrcTimestampFormat, defaultParam.DotType); + var timestamp = long.Parse(timeStr.Split(',')[0].Trim().Substring(1)); + var lyricTimestamp = new LyricTimestamp(timestamp); var content = line.Substring(contentStartIndex, leftParenthesesIndex - contentStartIndex); - // 去除全行时间戳 + // 首次执行,去除全行时间戳 if (i == 0) { content = new LyricLineVo(content).Content; @@ -93,7 +91,18 @@ public static string DealVerbatimLyric(string originLrc, SearchSourceEnum search contentStartIndex = leftParenthesesIndex + parenthesesLength; - sb.Append(timestamp).Append(content); + sb.Append(lyricTimestamp.PrintTimestamp(defaultParam.LrcTimestampFormat, defaultParam.DotType)).Append(content); + + // 最后一次执行,增加行结束时间戳 + if (i == matches.Count - 1) + { + // 202 + var timeCostStr = timeStr.Split(',')[1].Trim(); + var timeCost = long.Parse(timeCostStr.Substring(0, timeCostStr.Length - 1)); + + sb.Append(lyricTimestamp.Add(timeCost) + .PrintTimestamp(defaultParam.LrcTimestampFormat, defaultParam.DotType)); + } } while (++i < matches.Count); } else diff --git a/MusicLyricAppTest/Utils/LyricUtilsTest.cs b/MusicLyricAppTest/Utils/LyricUtilsTest.cs index 636db36..495376a 100644 --- a/MusicLyricAppTest/Utils/LyricUtilsTest.cs +++ b/MusicLyricAppTest/Utils/LyricUtilsTest.cs @@ -17,7 +17,7 @@ public void TestDealVerbatimLyric() const string line = "[11562,5703]こ(11562,356)こ(11918,646)ろ(12564,270)を(12834,798) (13632,10)隠(13642,592)し(14234,356)て(14590,248)ひ(14838,260)と(15098,428)り(15526,396)で(15922,1343)"; var output = LyricUtils.DealVerbatimLyric(line, SearchSourceEnum.QQ_MUSIC); - Assert.AreEqual("[00:11.562]こ[00:11.918]こ[00:12.564]ろ[00:12.834]を[00:13.632] [00:13.642]隠[00:14.234]し[00:14.590]て[00:14.838]ひ[00:15.098]と[00:15.526]り[00:15.922]で" + Environment.NewLine, output); + Assert.AreEqual("[00:11.562]こ[00:11.918]こ[00:12.564]ろ[00:12.834]を[00:13.632] [00:13.642]隠[00:14.234]し[00:14.590]て[00:14.838]ひ[00:15.098]と[00:15.526]り[00:15.922]で[00:17.265]" + Environment.NewLine, output); } /// From 426bb49b53f48147e193bffaa71dc51fd4ea3f00 Mon Sep 17 00:00:00 2001 From: jitwxs Date: Sun, 26 Feb 2023 14:14:40 +0800 Subject: [PATCH 3/7] support aggregated blur search feature #161 --- MusicLyricApp/Api/Music/MusicCacheableApi.cs | 16 ++-- MusicLyricApp/Api/Music/NetEaseMusicApi.cs | 8 +- MusicLyricApp/Api/Music/QQMusicApi.cs | 6 +- .../Api/Translate/TranslateCacheableApi.cs | 6 +- MusicLyricApp/Bean/MusicLyricsVO.cs | 11 ++- MusicLyricApp/Bean/SettingBase.cs | 5 + MusicLyricApp/BlurForm.cs | 94 ++++++++++--------- MusicLyricApp/Cache/GlobalCache.cs | 38 +++++--- MusicLyricApp/MainForm.cs | 51 +++++++--- MusicLyricApp/SettingForm.Designer.cs | 50 ++++++---- MusicLyricApp/SettingForm.cs | 1 + MusicLyricApp/Utils/GlobalUtils.cs | 32 ++++--- .../Api/Music/NetEaseMusicApi.cs | 7 +- MusicLyricAppTest/Api/Music/QQMusicApi.cs | 6 +- MusicLyricAppTest/Utils/GlobalUtilsTest.cs | 79 ++++++++-------- 15 files changed, 238 insertions(+), 172 deletions(-) diff --git a/MusicLyricApp/Api/Music/MusicCacheableApi.cs b/MusicLyricApp/Api/Music/MusicCacheableApi.cs index fcb09f3..09e97b7 100644 --- a/MusicLyricApp/Api/Music/MusicCacheableApi.cs +++ b/MusicLyricApp/Api/Music/MusicCacheableApi.cs @@ -29,18 +29,18 @@ public SearchSourceEnum Source() public ResultVo GetPlaylistVo(string playlistId) { - return GlobalCache.Process(CacheType.PLAYLIST_VO, playlistId, () => GetPlaylistVo0(playlistId)); + return GlobalCache.Process(Source(), CacheType.PLAYLIST_VO, playlistId, () => GetPlaylistVo0(playlistId)); } public ResultVo GetAlbumVo(string albumId) { - return GlobalCache.Process(CacheType.ALBUM_VO, albumId, () => GetAlbumVo0(albumId)); + return GlobalCache.Process(Source(), CacheType.ALBUM_VO, albumId, () => GetAlbumVo0(albumId)); } public Dictionary> GetSongVo(string[] songIds) { - var result = GlobalCache.BatchQuery(CacheType.SONG_VO, songIds, out var notHitKeys) - .ToDictionary(pair => pair.Key, pair => new ResultVo(pair.Value)); + var result = GlobalCache.BatchQuery(Source(), CacheType.SONG_VO, songIds, + out var notHitKeys).ToDictionary(pair => pair.Key, pair => new ResultVo(pair.Value)); foreach(var pair in GetSongVo0(notHitKeys)) { @@ -49,7 +49,7 @@ public Dictionary> GetSongVo(string[] songIds) if (resultVo.IsSuccess()) { - GlobalCache.DoCache(CacheType.SONG_VO, songId, resultVo.Data); + GlobalCache.DoCache(Source(), CacheType.SONG_VO, songId, resultVo.Data); } result[songId] = pair.Value; @@ -60,14 +60,14 @@ public Dictionary> GetSongVo(string[] songIds) public ResultVo GetSongLink(string songId) { - return GlobalCache.Process(CacheType.SONG_LINK, songId, () => GetSongLink0(songId)); + return GlobalCache.Process(Source(), CacheType.SONG_LINK, songId, () => GetSongLink0(songId)); } public ResultVo GetLyricVo(string id, string displayId, bool isVerbatim) { ResultVo CacheFunc() => GetLyricVo0(id, displayId, isVerbatim); - return GlobalCache.Process(CacheType.LYRIC_VO, GlobalUtils.GetSongKey(displayId, isVerbatim), CacheFunc); + return GlobalCache.Process(Source(), CacheType.LYRIC_VO, GlobalUtils.GetSongKey(displayId, isVerbatim), CacheFunc); } public ResultVo Search(string keyword, SearchTypeEnum searchType) @@ -76,7 +76,7 @@ public ResultVo Search(string keyword, SearchTypeEnum searchType ResultVo CacheFunc() => Search0(keyword, searchType); - return GlobalCache.Process(CacheType.SEARCH_RESULT_VO, cacheKey, CacheFunc); + return GlobalCache.Process(Source(), CacheType.SEARCH_RESULT_VO, cacheKey, CacheFunc); } } } \ No newline at end of file diff --git a/MusicLyricApp/Api/Music/NetEaseMusicApi.cs b/MusicLyricApp/Api/Music/NetEaseMusicApi.cs index 0f6579a..ef05fa1 100644 --- a/MusicLyricApp/Api/Music/NetEaseMusicApi.cs +++ b/MusicLyricApp/Api/Music/NetEaseMusicApi.cs @@ -31,7 +31,7 @@ protected override ResultVo GetPlaylistVo0(string playlistId) if (resp.Code == 200) { // cache song - GlobalCache.DoCache(CacheType.NET_EASE_SONG, value => value.Id, resp.Playlist.Tracks); + GlobalCache.DoCache(Source(), CacheType.NET_EASE_SONG, value => value.Id, resp.Playlist.Tracks); return new ResultVo(resp.Convert()); } @@ -51,7 +51,7 @@ protected override ResultVo GetAlbumVo0(string albumId) if (resp.Code == 200) { // cache song - GlobalCache.DoCache(CacheType.NET_EASE_SONG, value => value.Id, resp.Songs); + GlobalCache.DoCache(Source(), CacheType.NET_EASE_SONG, value => value.Id, resp.Songs); return new ResultVo(resp.Convert()); } else @@ -64,14 +64,14 @@ protected override Dictionary> GetSongVo0(string[] song { // 从缓存中查询 Song,并将非命中的数据查询后加入缓存 var cacheSongDict = GlobalCache - .BatchQuery(CacheType.NET_EASE_SONG, songIds, out var notHitKeys) + .BatchQuery(Source(), CacheType.NET_EASE_SONG, songIds, out var notHitKeys) .ToDictionary(pair => pair.Key, pair => pair.Value); foreach (var pair in _api.GetSongs(notHitKeys)) { cacheSongDict.Add(pair.Key, pair.Value); // add cache - GlobalCache.DoCache(CacheType.NET_EASE_SONG, pair.Key, pair.Value); + GlobalCache.DoCache(Source(), CacheType.NET_EASE_SONG, pair.Key, pair.Value); } var result = new Dictionary>(); diff --git a/MusicLyricApp/Api/Music/QQMusicApi.cs b/MusicLyricApp/Api/Music/QQMusicApi.cs index 05716a5..c97b4c1 100644 --- a/MusicLyricApp/Api/Music/QQMusicApi.cs +++ b/MusicLyricApp/Api/Music/QQMusicApi.cs @@ -26,8 +26,8 @@ protected override ResultVo GetPlaylistVo0(string playlistId) if (resp.Code == 0) { // cache song - GlobalCache.DoCache(CacheType.QQ_MUSIC_SONG, value => value.Id, resp.Cdlist[0].SongList); - GlobalCache.DoCache(CacheType.QQ_MUSIC_SONG, value => value.Mid, resp.Cdlist[0].SongList); + GlobalCache.DoCache(Source(), CacheType.QQ_MUSIC_SONG, value => value.Id, resp.Cdlist[0].SongList); + GlobalCache.DoCache(Source(), CacheType.QQ_MUSIC_SONG, value => value.Mid, resp.Cdlist[0].SongList); return new ResultVo(resp.Convert()); } @@ -62,7 +62,7 @@ protected override Dictionary> GetSongVo0(string[] song return resp.IsIllegal() ? ResultVo.Failure(ErrorMsg.SONG_NOT_EXIST) : new ResultVo(resp.Data[0]); } - var songRes = GlobalCache.Process(CacheType.QQ_MUSIC_SONG, songId, SongCacheFunc); + var songRes = GlobalCache.Process(Source(), CacheType.QQ_MUSIC_SONG, songId, SongCacheFunc); if (songRes.IsSuccess()) { result[songId] = new ResultVo(new SongVo diff --git a/MusicLyricApp/Api/Translate/TranslateCacheableApi.cs b/MusicLyricApp/Api/Translate/TranslateCacheableApi.cs index 46b187a..26e2754 100644 --- a/MusicLyricApp/Api/Translate/TranslateCacheableApi.cs +++ b/MusicLyricApp/Api/Translate/TranslateCacheableApi.cs @@ -6,6 +6,8 @@ namespace MusicLyricApp.Api.Translate { public abstract class TranslateCacheableApi : ITranslateApi { + private const string PREFIX = ""; + protected abstract ResultVo Translate0(string[] inputs, LanguageEnum inputLanguage, LanguageEnum outputLanguage); protected abstract bool IsSupport0(LanguageEnum inputLanguage, LanguageEnum outputLanguage); @@ -17,7 +19,7 @@ public string[] Translate(string[] inputs, LanguageEnum inputLanguage, LanguageE return new string[] {}; } - var cacheDict = GlobalCache.BatchQuery(CacheType.TRANSLATE, inputs, out var notHitInputs); + var cacheDict = GlobalCache.BatchQuery(PREFIX, CacheType.TRANSLATE, inputs, out var notHitInputs); var httpRes = new string[] { }; if (notHitInputs.Length > 0) @@ -36,7 +38,7 @@ public string[] Translate(string[] inputs, LanguageEnum inputLanguage, LanguageE if (output != null) { - GlobalCache.DoCache(CacheType.TRANSLATE, input, output); + GlobalCache.DoCache(PREFIX, CacheType.TRANSLATE, input, output); } } res[index++] = output; diff --git a/MusicLyricApp/Bean/MusicLyricsVO.cs b/MusicLyricApp/Bean/MusicLyricsVO.cs index 450e199..56d6006 100644 --- a/MusicLyricApp/Bean/MusicLyricsVO.cs +++ b/MusicLyricApp/Bean/MusicLyricsVO.cs @@ -756,14 +756,19 @@ public class SearchInfo public class InputSongId { - public string SongId { get; } + public string QueryId { get; } + + public string SongId { get; set; } public SearchSourceEnum SearchSource { get; } + + public SearchTypeEnum SearchType { get; } - public InputSongId(string songId, SearchSourceEnum searchSource) + public InputSongId(string queryId, SearchSourceEnum searchSource, SearchTypeEnum searchType) { - SongId = songId; + QueryId = queryId; SearchSource = searchSource; + SearchType = searchType; } } } diff --git a/MusicLyricApp/Bean/SettingBase.cs b/MusicLyricApp/Bean/SettingBase.cs index c031096..f36d968 100644 --- a/MusicLyricApp/Bean/SettingBase.cs +++ b/MusicLyricApp/Bean/SettingBase.cs @@ -19,6 +19,11 @@ public class ConfigBean /// public bool RememberParam = false; + /// + /// 聚合模糊搜索 + /// + public bool AggregatedBlurSearch = false; + /// /// 自读读取剪切板 /// diff --git a/MusicLyricApp/BlurForm.cs b/MusicLyricApp/BlurForm.cs index 7bd869c..e182c56 100644 --- a/MusicLyricApp/BlurForm.cs +++ b/MusicLyricApp/BlurForm.cs @@ -3,6 +3,7 @@ using System.Data; using System.Windows.Forms; using MusicLyricApp.Bean; +using MusicLyricApp.Utils; namespace MusicLyricApp { @@ -12,22 +13,21 @@ public partial class BlurForm : MusicLyricForm private string[] _ids; - public BlurForm(SearchResultVo searchResultVo, MainForm mainForm) + public BlurForm(List searchResList, MainForm mainForm) { _mainForm = mainForm; InitializeComponent(); - InitialDataGridView(searchResultVo); + InitialDataGridView(searchResList); } - private void InitialDataGridView(SearchResultVo searchResultVo) + private void InitialDataGridView(List searchResList) { var table = new DataTable(); - var source = searchResultVo.SearchSource.ToDescription(); - - switch (searchResultVo.SearchType) + var searchType = searchResList[0].SearchType; + switch (searchType) { case SearchTypeEnum.SONG_ID: // Add columns. @@ -36,20 +36,6 @@ private void InitialDataGridView(SearchResultVo searchResultVo) table.Columns.Add("专辑", typeof(string)); table.Columns.Add("时长", typeof(string)); table.Columns.Add("平台", typeof(string)); - - // Add rows. - var songVos = searchResultVo.SongVos; - _ids = new string[songVos.Count]; - - for (var i = 0; i < songVos.Count; i++) - { - var songVo = songVos[i]; - var duration = new LyricTimestamp(songVo.Duration).PrintTimestamp("mm:ss", DotTypeEnum.DOWN); - - _ids[i] = songVo.DisplayId; - table.Rows.Add(songVo.Title, string.Join(",", songVo.AuthorName), songVo.AlbumName, - duration, source); - } break; case SearchTypeEnum.ALBUM_ID: // Add columns. @@ -58,19 +44,6 @@ private void InitialDataGridView(SearchResultVo searchResultVo) table.Columns.Add("歌曲数量", typeof(string)); table.Columns.Add("发行时间", typeof(string)); table.Columns.Add("平台", typeof(string)); - - // Add rows. - var albumVos = searchResultVo.AlbumVos; - _ids = new string[albumVos.Count]; - - for (var i = 0; i < albumVos.Count; i++) - { - var albumVo = albumVos[i]; - - _ids[i] = albumVo.DisplayId; - table.Rows.Add(albumVo.AlbumName, string.Join(",", albumVo.AuthorName), albumVo.SongCount, - albumVo.PublishTime, source); - } break; case SearchTypeEnum.PLAYLIST_ID: // Add columns. @@ -80,23 +53,52 @@ private void InitialDataGridView(SearchResultVo searchResultVo) table.Columns.Add("歌曲数量", typeof(string)); table.Columns.Add("播放量", typeof(string)); table.Columns.Add("平台", typeof(string)); - - // Add rows. - var playlistVos = searchResultVo.PlaylistVos; - _ids = new string[playlistVos.Count]; - - for (var i = 0; i < playlistVos.Count; i++) - { - var playlistVo = playlistVos[i]; - - _ids[i] = playlistVo.DisplayId; - table.Rows.Add(playlistVo.PlaylistName, playlistVo.AuthorName, playlistVo.Description, - playlistVo.SongCount, playlistVo.PlayCount, source); - } break; } + + var idList = new List(); + + foreach (var searchResultVo in searchResList) + { + var searchSource = searchResultVo.SearchSource; + var idPrefix = GlobalUtils.SearchSourceKeywordDict[searchSource] + "/" + GlobalUtils.SearchTypeKeywordDict[searchSource][searchType]; + + switch (searchType) + { + case SearchTypeEnum.SONG_ID: + // Add rows. + foreach (var songVo in searchResultVo.SongVos) + { + var duration = new LyricTimestamp(songVo.Duration).PrintTimestamp("mm:ss", DotTypeEnum.DOWN); + + idList.Add(idPrefix + songVo.DisplayId); + table.Rows.Add(songVo.Title, string.Join(",", songVo.AuthorName), songVo.AlbumName, + duration, searchSource.ToDescription()); + } + break; + case SearchTypeEnum.ALBUM_ID: + // Add rows. + foreach (var albumVo in searchResultVo.AlbumVos) + { + idList.Add(idPrefix + albumVo.DisplayId); + table.Rows.Add(albumVo.AlbumName, string.Join(",", albumVo.AuthorName), albumVo.SongCount, + albumVo.PublishTime, searchSource.ToDescription()); + } + break; + case SearchTypeEnum.PLAYLIST_ID: + // Add rows. + foreach (var playlistVo in searchResultVo.PlaylistVos) + { + idList.Add(idPrefix + playlistVo.DisplayId); + table.Rows.Add(playlistVo.PlaylistName, playlistVo.AuthorName, playlistVo.Description, + playlistVo.SongCount, playlistVo.PlayCount, searchSource.ToDescription()); + } + break; + } + } Blur_DataGridView.DataSource = table; + _ids = idList.ToArray(); } private void BlurSearch_DataGridView_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e) diff --git a/MusicLyricApp/Cache/GlobalCache.cs b/MusicLyricApp/Cache/GlobalCache.cs index 9e341bf..067ed42 100644 --- a/MusicLyricApp/Cache/GlobalCache.cs +++ b/MusicLyricApp/Cache/GlobalCache.cs @@ -9,9 +9,9 @@ public static class GlobalCache private static readonly Dictionary> Cache = new Dictionary>(); - public static ResultVo Process(CacheType cacheType, object key, Func> cacheFunc) + public static ResultVo Process(object keyPrefix, CacheType cacheType, string key, Func> cacheFunc) { - var cache = Query(cacheType, key); + var cache = Query(keyPrefix, cacheType, key); if (cache != null) { return new ResultVo(cache); @@ -20,21 +20,20 @@ public static ResultVo Process(CacheType cacheType, object key, Func BatchQuery(CacheType cacheType, IEnumerable keys, - out TKey[] notHitKeys0) + public static Dictionary BatchQuery(object keyPrefix, CacheType cacheType, IEnumerable keys, out string[] notHitKeys0) { - var result = new Dictionary(); - var notHitKeys = new List(); + var result = new Dictionary(); + var notHitKeys = new List(); foreach (var key in keys) { - var value = Query(cacheType, key); + var value = Query(keyPrefix, cacheType, key); if (value == null) { notHitKeys.Add(key); @@ -50,8 +49,10 @@ public static Dictionary BatchQuery(CacheType cacheT return result; } - public static T Query(CacheType cacheType, object key) + public static T Query(object keyPrefix, CacheType cacheType, string originKey) { + var key = AddPrefix(keyPrefix, originKey); + if (Cache.ContainsKey(cacheType) && Cache[cacheType].ContainsKey(key)) { return (T)Cache[cacheType][key]; @@ -62,17 +63,16 @@ public static T Query(CacheType cacheType, object key) } } - public static void DoCache(CacheType cacheType, Func keyFunc, - IEnumerable values) + public static void DoCache(object keyPrefix, CacheType cacheType, Func keyFunc, IEnumerable values) { foreach (var value in values) { var key = keyFunc.Invoke(value); - DoCache(cacheType, key, value); + DoCache(keyPrefix, cacheType, key, value); } } - public static void DoCache(CacheType cacheType, object key, object value) + public static void DoCache(object keyPrefix, CacheType cacheType, string originKey, object value) { if (!Cache.ContainsKey(cacheType)) { @@ -80,7 +80,17 @@ public static void DoCache(CacheType cacheType, object key, object value) } // add the key if it's non-existent. - Cache[cacheType][key] = value; + Cache[cacheType][AddPrefix(keyPrefix, originKey)] = value; + } + + private static string AddPrefix(object prefix, string key) + { + return prefix + "^" + key; + } + + private static string DelPrefix(string key) + { + return key.Split('^')[1]; } } diff --git a/MusicLyricApp/MainForm.cs b/MusicLyricApp/MainForm.cs index 55503ae..796469e 100644 --- a/MusicLyricApp/MainForm.cs +++ b/MusicLyricApp/MainForm.cs @@ -264,31 +264,32 @@ private Dictionary> SearchBySongId(List(); + + var searchType = _globalSearchInfo.SettingBean.Param.SearchType; + if (_globalSearchInfo.SettingBean.Config.AggregatedBlurSearch) + { + foreach (SearchSourceEnum searchSource in Enum.GetValues(typeof(SearchSourceEnum))) + { + var one = _api[searchSource].Search(keyword, searchType); + if (one.IsSuccess()) + { + resultVoList.Add(one.Data); + } + } + } + else + { + resultVoList.Add(_api[_globalSearchInfo.SettingBean.Param.SearchSource].Search(keyword, searchType).Assert().Data); + } + + resultVoList.RemoveAll(one => one.IsEmpty()); + + if (resultVoList.Count == 0) { throw new MusicLyricException(ErrorMsg.SEARCH_RESULT_EMPTY); } - - FormUtils.OpenForm(_blurForm, () => _blurForm = new BlurForm(resultVo, this), this); + else + { + FormUtils.OpenForm(_blurForm, () => _blurForm = new BlurForm(resultVoList, this), this); + } } } catch (WebException ex) diff --git a/MusicLyricApp/SettingForm.Designer.cs b/MusicLyricApp/SettingForm.Designer.cs index c33201b..16e7317 100644 --- a/MusicLyricApp/SettingForm.Designer.cs +++ b/MusicLyricApp/SettingForm.Designer.cs @@ -70,6 +70,7 @@ private void AfterInitializeComponent() // 应用设置 RememberParam_CheckBox.Checked = _settingBean.Config.RememberParam; + AggregatedBlurSearchCheckBox.Checked = _settingBean.Config.AggregatedBlurSearch; AutoReadClipboard_CheckBox.Checked = _settingBean.Config.AutoReadClipboard; AutoCheckUpdate_CheckBox.Checked = _settingBean.Config.AutoCheckUpdate; QQMusic_Cookie_TextBox.Text = _settingBean.Config.QQMusicCookie; @@ -117,6 +118,7 @@ private void InitializeComponent() this.SettingTips_TextBox = new System.Windows.Forms.TextBox(); this.OutputHelp_Btn = new System.Windows.Forms.Button(); this.AppConfig_GroupBox = new System.Windows.Forms.GroupBox(); + this.AggregatedBlurSearchCheckBox = new System.Windows.Forms.CheckBox(); this.OriginLyric_GroupBox = new System.Windows.Forms.GroupBox(); this.TransLyric_GroupBox = new System.Windows.Forms.GroupBox(); this.TransConfig_TabControl = new System.Windows.Forms.TabControl(); @@ -133,13 +135,13 @@ private void InitializeComponent() this.CaiYunTranslateToken_TextBox = new System.Windows.Forms.TextBox(); this.label14 = new System.Windows.Forms.Label(); this.LyricShow_DataGridView = new System.Windows.Forms.DataGridView(); + this.Column1 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.Output_GroupBox = new System.Windows.Forms.GroupBox(); this.OutputName_TextBox = new System.Windows.Forms.TextBox(); this.label10 = new System.Windows.Forms.Label(); this.IgnorePureMusicInSave_CheckBox = new System.Windows.Forms.CheckBox(); this.Reset_Btn = new System.Windows.Forms.Button(); - this.Column1 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.Timestamp_GroupBox.SuspendLayout(); this.AppConfig_GroupBox.SuspendLayout(); this.OriginLyric_GroupBox.SuspendLayout(); @@ -169,25 +171,25 @@ private void InitializeComponent() // // RememberParam_CheckBox // - this.RememberParam_CheckBox.Location = new System.Drawing.Point(6, 33); + this.RememberParam_CheckBox.Location = new System.Drawing.Point(6, 37); this.RememberParam_CheckBox.Name = "RememberParam_CheckBox"; - this.RememberParam_CheckBox.Size = new System.Drawing.Size(78, 24); + this.RememberParam_CheckBox.Size = new System.Drawing.Size(78, 17); this.RememberParam_CheckBox.TabIndex = 1; this.RememberParam_CheckBox.Text = "参数记忆"; this.RememberParam_CheckBox.UseVisualStyleBackColor = true; // // AutoReadClipboard_CheckBox // - this.AutoReadClipboard_CheckBox.Location = new System.Drawing.Point(98, 31); + this.AutoReadClipboard_CheckBox.Location = new System.Drawing.Point(207, 37); this.AutoReadClipboard_CheckBox.Name = "AutoReadClipboard_CheckBox"; - this.AutoReadClipboard_CheckBox.Size = new System.Drawing.Size(112, 26); + this.AutoReadClipboard_CheckBox.Size = new System.Drawing.Size(112, 17); this.AutoReadClipboard_CheckBox.TabIndex = 2; this.AutoReadClipboard_CheckBox.Text = "自动读取剪贴板"; this.AutoReadClipboard_CheckBox.UseVisualStyleBackColor = true; // // AutoCheckUpdate_CheckBox // - this.AutoCheckUpdate_CheckBox.Location = new System.Drawing.Point(226, 37); + this.AutoCheckUpdate_CheckBox.Location = new System.Drawing.Point(336, 37); this.AutoCheckUpdate_CheckBox.Name = "AutoCheckUpdate_CheckBox"; this.AutoCheckUpdate_CheckBox.Size = new System.Drawing.Size(98, 17); this.AutoCheckUpdate_CheckBox.TabIndex = 3; @@ -411,6 +413,7 @@ private void InitializeComponent() // // AppConfig_GroupBox // + this.AppConfig_GroupBox.Controls.Add(this.AggregatedBlurSearchCheckBox); this.AppConfig_GroupBox.Controls.Add(this.AutoCheckUpdate_CheckBox); this.AppConfig_GroupBox.Controls.Add(this.AutoReadClipboard_CheckBox); this.AppConfig_GroupBox.Controls.Add(this.RememberParam_CheckBox); @@ -425,6 +428,15 @@ private void InitializeComponent() this.AppConfig_GroupBox.TabStop = false; this.AppConfig_GroupBox.Text = "应用设置"; // + // AggregatedBlurSearchCheckBox + // + this.AggregatedBlurSearchCheckBox.Location = new System.Drawing.Point(103, 37); + this.AggregatedBlurSearchCheckBox.Name = "AggregatedBlurSearchCheckBox"; + this.AggregatedBlurSearchCheckBox.Size = new System.Drawing.Size(98, 17); + this.AggregatedBlurSearchCheckBox.TabIndex = 30; + this.AggregatedBlurSearchCheckBox.Text = "聚合模糊搜索"; + this.AggregatedBlurSearchCheckBox.UseVisualStyleBackColor = true; + // // OriginLyric_GroupBox // this.OriginLyric_GroupBox.Controls.Add(this.IgnoreEmptyLyric_CheckBox); @@ -594,6 +606,17 @@ private void InitializeComponent() this.LyricShow_DataGridView.DragDrop += new System.Windows.Forms.DragEventHandler(this.TransList_DataGridView_DragDrop); this.LyricShow_DataGridView.DragEnter += new System.Windows.Forms.DragEventHandler(this.TransList_DataGridView_DragEnter); // + // Column1 + // + this.Column1.HeaderText = "是否启用"; + this.Column1.Name = "Column1"; + this.Column1.Width = 60; + // + // Column2 + // + this.Column2.HeaderText = "歌词类型"; + this.Column2.Name = "Column2"; + // // Output_GroupBox // this.Output_GroupBox.Controls.Add(this.OutputName_TextBox); @@ -646,17 +669,6 @@ private void InitializeComponent() this.Reset_Btn.UseVisualStyleBackColor = false; this.Reset_Btn.Click += new System.EventHandler(this.Close_Btn_Click); // - // Column1 - // - this.Column1.HeaderText = "是否启用"; - this.Column1.Name = "Column1"; - this.Column1.Width = 60; - // - // Column2 - // - this.Column2.HeaderText = "歌词类型"; - this.Column2.Name = "Column2"; - // // SettingForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); @@ -698,6 +710,8 @@ private void InitializeComponent() this.PerformLayout(); } + private System.Windows.Forms.CheckBox AggregatedBlurSearchCheckBox; + private System.Windows.Forms.TextBox BaiduTranslateAppId_TextBox; private System.Windows.Forms.Label label14; diff --git a/MusicLyricApp/SettingForm.cs b/MusicLyricApp/SettingForm.cs index 2564a8d..5a4cb13 100644 --- a/MusicLyricApp/SettingForm.cs +++ b/MusicLyricApp/SettingForm.cs @@ -82,6 +82,7 @@ private void Close_Btn_Click(object sender, EventArgs e) // 应用设置 _settingBean.Config.RememberParam = RememberParam_CheckBox.Checked; + _settingBean.Config.AggregatedBlurSearch = AggregatedBlurSearchCheckBox.Checked; _settingBean.Config.AutoReadClipboard = AutoReadClipboard_CheckBox.Checked; _settingBean.Config.AutoCheckUpdate = AutoCheckUpdate_CheckBox.Checked; _settingBean.Config.QQMusicCookie = QQMusic_Cookie_TextBox.Text; diff --git a/MusicLyricApp/Utils/GlobalUtils.cs b/MusicLyricApp/Utils/GlobalUtils.cs index 5b0f4b2..acd36a7 100644 --- a/MusicLyricApp/Utils/GlobalUtils.cs +++ b/MusicLyricApp/Utils/GlobalUtils.cs @@ -30,14 +30,14 @@ public static string FormatDate(long millisecond) return date.ToString("yyyy-MM-dd HH:mm:ss"); } - private static readonly Dictionary SearchSourceKeywordDict = + public static readonly Dictionary SearchSourceKeywordDict = new Dictionary { { SearchSourceEnum.NET_EASE_MUSIC, "163.com" }, { SearchSourceEnum.QQ_MUSIC, "qq.com" }, }; - private static readonly Dictionary> SearchTypeKeywordDict = + public static readonly Dictionary> SearchTypeKeywordDict = new Dictionary> { { @@ -62,8 +62,11 @@ public static string FormatDate(long millisecond) /// 输入参数校验 /// /// 输入参数 + /// + /// /// - public static string CheckInputId(string input, PersistParamBean paramBean) + /// + public static SearchInfo.InputSongId CheckInputId(string input, SearchSourceEnum searchSource, SearchTypeEnum searchType) { // 输入参数为空 if (string.IsNullOrEmpty(input)) @@ -74,30 +77,29 @@ public static string CheckInputId(string input, PersistParamBean paramBean) // 自动识别音乐提供商 foreach (var pair in SearchSourceKeywordDict.Where(pair => input.Contains(pair.Value))) { - paramBean.SearchSource = pair.Key; + searchSource = pair.Key; } // 自动识别搜索类型 - foreach (var pair in SearchTypeKeywordDict[paramBean.SearchSource] - .Where(pair => input.Contains(pair.Value))) + foreach (var pair in SearchTypeKeywordDict[searchSource].Where(pair => input.Contains(pair.Value))) { - paramBean.SearchType = pair.Key; + searchType = pair.Key; } // 网易云,纯数字,直接通过 - if (paramBean.SearchSource == SearchSourceEnum.NET_EASE_MUSIC && CheckNum(input)) + if (searchSource == SearchSourceEnum.NET_EASE_MUSIC && CheckNum(input)) { - return input; + return new SearchInfo.InputSongId(input, searchSource, searchType); } // QQ 音乐,数字+字母,直接通过 - if (paramBean.SearchSource == SearchSourceEnum.QQ_MUSIC && Regex.IsMatch(input, @"^[a-zA-Z0-9]*$")) + if (searchSource == SearchSourceEnum.QQ_MUSIC && Regex.IsMatch(input, @"^[a-zA-Z0-9]*$")) { - return input; + return new SearchInfo.InputSongId(input, searchSource, searchType); } // URL 关键字提取 - var urlKeyword = SearchTypeKeywordDict[paramBean.SearchSource][paramBean.SearchType]; + var urlKeyword = SearchTypeKeywordDict[searchSource][searchType]; var index = input.IndexOf(urlKeyword, StringComparison.Ordinal); if (index != -1) { @@ -114,11 +116,11 @@ public static string CheckInputId(string input, PersistParamBean paramBean) } } - return sb.ToString(); + return new SearchInfo.InputSongId(sb.ToString(), searchSource, searchType); } // QQ 音乐,歌曲短链接 - if (paramBean.SearchSource == SearchSourceEnum.QQ_MUSIC && input.Contains("fcgi-bin/u")) + if (searchSource == SearchSourceEnum.QQ_MUSIC && input.Contains("fcgi-bin/u")) { const string keyword = "window.__ssrFirstPageData__"; var html = HttpUtils.HttpGet(input); @@ -140,7 +142,7 @@ public static string CheckInputId(string input, PersistParamBean paramBean) if (songs.Length > 0) { - return songs[0].Id; + return new SearchInfo.InputSongId(songs[0].Id, searchSource, searchType); } } } diff --git a/MusicLyricAppTest/Api/Music/NetEaseMusicApi.cs b/MusicLyricAppTest/Api/Music/NetEaseMusicApi.cs index a6d3d5b..5754274 100644 --- a/MusicLyricAppTest/Api/Music/NetEaseMusicApi.cs +++ b/MusicLyricAppTest/Api/Music/NetEaseMusicApi.cs @@ -51,6 +51,7 @@ public void Test() public void TestGetPlaylist() { const string playlistId = "7050074027"; + const SearchSourceEnum searchSource = SearchSourceEnum.NET_EASE_MUSIC; var res = _api.GetPlaylistVo(playlistId); @@ -58,7 +59,7 @@ public void TestGetPlaylist() var resData = res.Data; - var cacheData = GlobalCache.Query(CacheType.PLAYLIST_VO, playlistId); + var cacheData = GlobalCache.Query(searchSource, CacheType.PLAYLIST_VO, playlistId); // playlistVo 正确缓存 Assert.AreEqual(resData, cacheData); @@ -66,8 +67,8 @@ public void TestGetPlaylist() foreach (var simpleSongVo in resData.SimpleSongVos) { // song 正确缓存 - Assert.NotNull(GlobalCache.Query(CacheType.NET_EASE_SONG, simpleSongVo.Id)); - Assert.NotNull(GlobalCache.Query(CacheType.NET_EASE_SONG, simpleSongVo.DisplayId)); + Assert.NotNull(GlobalCache.Query(searchSource, CacheType.NET_EASE_SONG, simpleSongVo.Id)); + Assert.NotNull(GlobalCache.Query(searchSource, CacheType.NET_EASE_SONG, simpleSongVo.DisplayId)); } } } diff --git a/MusicLyricAppTest/Api/Music/QQMusicApi.cs b/MusicLyricAppTest/Api/Music/QQMusicApi.cs index b5cbcd4..2fc0615 100644 --- a/MusicLyricAppTest/Api/Music/QQMusicApi.cs +++ b/MusicLyricAppTest/Api/Music/QQMusicApi.cs @@ -26,7 +26,7 @@ public void TestGetPlaylist() var resData = res.Data; - var cacheData = GlobalCache.Query(CacheType.PLAYLIST_VO, playlistId); + var cacheData = GlobalCache.Query(SearchSourceEnum.QQ_MUSIC, CacheType.PLAYLIST_VO, playlistId); // playlistVo 正确缓存 Assert.AreEqual(resData, cacheData); @@ -34,8 +34,8 @@ public void TestGetPlaylist() foreach (var simpleSongVo in resData.SimpleSongVos) { // song 正确缓存 - Assert.NotNull(GlobalCache.Query(CacheType.QQ_MUSIC_SONG, simpleSongVo.Id)); - Assert.NotNull(GlobalCache.Query(CacheType.QQ_MUSIC_SONG, simpleSongVo.DisplayId)); + Assert.NotNull(GlobalCache.Query(SearchSourceEnum.QQ_MUSIC, CacheType.QQ_MUSIC_SONG, simpleSongVo.Id)); + Assert.NotNull(GlobalCache.Query(SearchSourceEnum.QQ_MUSIC, CacheType.QQ_MUSIC_SONG, simpleSongVo.DisplayId)); } } } diff --git a/MusicLyricAppTest/Utils/GlobalUtilsTest.cs b/MusicLyricAppTest/Utils/GlobalUtilsTest.cs index 066fdd7..9a76884 100644 --- a/MusicLyricAppTest/Utils/GlobalUtilsTest.cs +++ b/MusicLyricAppTest/Utils/GlobalUtilsTest.cs @@ -19,84 +19,85 @@ public void TestFormatDate() [Test] public void TestCheckInputIdWithEmpty() { - var paramBean = new PersistParamBean(); - - var exception = Assert.Throws(typeof(MusicLyricException), () => CheckInputId(string.Empty, paramBean)); + var exception = Assert.Throws(typeof(MusicLyricException), () => CheckInputId(string.Empty, SearchSourceEnum.NET_EASE_MUSIC, SearchTypeEnum.SONG_ID)); Assert.AreEqual(ErrorMsg.INPUT_ID_ILLEGAL, exception.Message); - exception = Assert.Throws(typeof(MusicLyricException), () => CheckInputId(null, paramBean)); + exception = Assert.Throws(typeof(MusicLyricException), () => CheckInputId(null, SearchSourceEnum.NET_EASE_MUSIC, SearchTypeEnum.SONG_ID)); Assert.AreEqual(ErrorMsg.INPUT_ID_ILLEGAL, exception.Message); } [Test] public void TestCheckInputIdWithNetEase() { - var paramBean = new PersistParamBean - { - SearchSource = SearchSourceEnum.NET_EASE_MUSIC - }; + var searchSource = SearchSourceEnum.NET_EASE_MUSIC; + var searchType = SearchTypeEnum.SONG_ID; // 纯数字 - Assert.AreEqual("1", CheckInputId("1", paramBean)); + Assert.AreEqual("1", CheckInputId("1", searchSource, searchType).QueryId); // 不支持非数字 - var exception = Assert.Throws(typeof(MusicLyricException), () => CheckInputId("abc123", paramBean)); + var exception = Assert.Throws(typeof(MusicLyricException), () => CheckInputId("abc123", searchSource, searchType)); Assert.AreEqual(ErrorMsg.INPUT_ID_ILLEGAL, exception.Message); // 自动识别音乐提供商和类型 - paramBean.SearchSource = SearchSourceEnum.QQ_MUSIC; - Assert.AreEqual("1815969317", CheckInputId("https://music.163.com/#/song?id=1815969317", paramBean)); - Assert.AreEqual(SearchSourceEnum.NET_EASE_MUSIC, paramBean.SearchSource); - Assert.AreEqual(SearchTypeEnum.SONG_ID, paramBean.SearchType); + searchSource = SearchSourceEnum.QQ_MUSIC; + + var res = CheckInputId("https://music.163.com/#/song?id=1815969317", searchSource, searchType); + Assert.AreEqual("1815969317", res.QueryId); + Assert.AreEqual(SearchSourceEnum.NET_EASE_MUSIC, res.SearchSource); + Assert.AreEqual(SearchTypeEnum.SONG_ID, res.SearchType); // 专辑提取 - Assert.AreEqual("122305109", CheckInputId("https://music.163.com/#/album?id=122305109", paramBean)); - Assert.AreEqual(SearchTypeEnum.ALBUM_ID, paramBean.SearchType); + res = CheckInputId("https://music.163.com/#/album?id=122305109", searchSource, searchType); + Assert.AreEqual("122305109", res.QueryId); + Assert.AreEqual(SearchTypeEnum.ALBUM_ID, res.SearchType); // 歌单提取 - Assert.AreEqual("7050074027", CheckInputId("https://music.163.com/#/playlist?id=7050074027", paramBean)); - Assert.AreEqual(SearchTypeEnum.PLAYLIST_ID, paramBean.SearchType); + res = CheckInputId("https://music.163.com/#/playlist?id=7050074027", searchSource, searchType); + Assert.AreEqual("7050074027", res.QueryId); + Assert.AreEqual(SearchTypeEnum.PLAYLIST_ID, res.SearchType); // URL 存在冗余参数 - Assert.AreEqual("1431606759", CheckInputId("https://music.163.com/song?id=1431606759&userid=8073630663", paramBean)); - Assert.AreEqual(SearchTypeEnum.SONG_ID, paramBean.SearchType); + res = CheckInputId("https://music.163.com/song?id=1431606759&userid=8073630663", searchSource, searchType); + Assert.AreEqual("1431606759", res.QueryId); + Assert.AreEqual(SearchTypeEnum.SONG_ID, res.SearchType); } [Test] public void TestCheckInputIdWithQQMusic() { - var paramBean = new PersistParamBean - { - SearchSource = SearchSourceEnum.QQ_MUSIC - }; - // 支持非数字 - Assert.AreEqual("abc", CheckInputId("abc", paramBean)); + Assert.AreEqual("abc", CheckInputId("abc", SearchSourceEnum.QQ_MUSIC, SearchTypeEnum.SONG_ID).QueryId); // 自动识别音乐提供商和类型 - paramBean.SearchSource = SearchSourceEnum.NET_EASE_MUSIC; - Assert.AreEqual("002owtOq052wu9", CheckInputId("https://y.qq.com/n/ryqq/songDetail/002owtOq052wu9", paramBean)); - Assert.AreEqual(SearchSourceEnum.QQ_MUSIC, paramBean.SearchSource); - Assert.AreEqual(SearchTypeEnum.SONG_ID, paramBean.SearchType); + var res = CheckInputId("https://y.qq.com/n/ryqq/songDetail/002owtOq052wu9", SearchSourceEnum.NET_EASE_MUSIC, SearchTypeEnum.SONG_ID); + Assert.AreEqual("002owtOq052wu9", res.QueryId); + Assert.AreEqual(SearchSourceEnum.QQ_MUSIC, res.SearchSource); + Assert.AreEqual(SearchTypeEnum.SONG_ID, res.SearchType); // 专辑提取 - Assert.AreEqual("000k0h474UtgAL", CheckInputId("https://y.qq.com/n/ryqq/albumDetail/000k0h474UtgAL", paramBean)); - Assert.AreEqual(SearchTypeEnum.ALBUM_ID, paramBean.SearchType); + res = CheckInputId("https://y.qq.com/n/ryqq/albumDetail/000k0h474UtgAL", SearchSourceEnum.NET_EASE_MUSIC, SearchTypeEnum.SONG_ID); + Assert.AreEqual("000k0h474UtgAL", res.QueryId); + Assert.AreEqual(SearchTypeEnum.ALBUM_ID, res.SearchType); // 歌单提取 - Assert.AreEqual("8694686726", CheckInputId("https://y.qq.com/n/ryqq/playlist/8694686726", paramBean)); - Assert.AreEqual(SearchTypeEnum.PLAYLIST_ID, paramBean.SearchType); + res = CheckInputId("https://y.qq.com/n/ryqq/playlist/8694686726", SearchSourceEnum.NET_EASE_MUSIC, SearchTypeEnum.SONG_ID); + Assert.AreEqual("8694686726", res.QueryId); + Assert.AreEqual(SearchTypeEnum.PLAYLIST_ID, res.SearchType); // URL 存在冗余参数 - Assert.AreEqual("002owtOQQ052wu9", CheckInputId("https://y.qq.com/n/ryqq/songDetail/002owtOQQ052wu9&userid=8073630663", paramBean)); - Assert.AreEqual(SearchTypeEnum.SONG_ID, paramBean.SearchType); + res = CheckInputId("https://y.qq.com/n/ryqq/songDetail/002owtOQQ052wu9&userid=8073630663", SearchSourceEnum.NET_EASE_MUSIC, SearchTypeEnum.SONG_ID); + Assert.AreEqual("002owtOQQ052wu9", res.QueryId); + Assert.AreEqual(SearchTypeEnum.SONG_ID, res.SearchType); // 歌曲短链接支持 - Assert.AreEqual("385359965", CheckInputId("https://c.y.qq.com/base/fcgi-bin/u?__=0S6Bg5scnbuj", paramBean)); - Assert.AreEqual(SearchTypeEnum.SONG_ID, paramBean.SearchType); + res = CheckInputId("https://c.y.qq.com/base/fcgi-bin/u?__=0S6Bg5scnbuj", SearchSourceEnum.NET_EASE_MUSIC, + SearchTypeEnum.SONG_ID); + Assert.AreEqual("385359965", res.QueryId); + Assert.AreEqual(SearchTypeEnum.SONG_ID, res.SearchType); // 不支持的 URL - Assert.Throws(typeof(MusicLyricException), () => CheckInputId("https://y.qq.com/n/ryqq/singer/004cyCLc1ByKPx", paramBean)); + Assert.Throws(typeof(MusicLyricException), () => CheckInputId("https://y.qq.com/n/ryqq/singer/004cyCLc1ByKPx", SearchSourceEnum.NET_EASE_MUSIC, SearchTypeEnum.SONG_ID)); } [Test] From 66b1943b6b97e6e348a82aac660501387df9231f Mon Sep 17 00:00:00 2001 From: jitwxs Date: Sun, 26 Feb 2023 14:32:53 +0800 Subject: [PATCH 4/7] fix new feature cause batch search bugs --- MusicLyricApp/Bean/MusicLyricsVO.cs | 7 ++++++- MusicLyricApp/MainForm.cs | 13 ++++++------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/MusicLyricApp/Bean/MusicLyricsVO.cs b/MusicLyricApp/Bean/MusicLyricsVO.cs index 56d6006..5bb5071 100644 --- a/MusicLyricApp/Bean/MusicLyricsVO.cs +++ b/MusicLyricApp/Bean/MusicLyricsVO.cs @@ -758,7 +758,7 @@ public class InputSongId { public string QueryId { get; } - public string SongId { get; set; } + public string SongId { get; } public SearchSourceEnum SearchSource { get; } @@ -770,6 +770,11 @@ public InputSongId(string queryId, SearchSourceEnum searchSource, SearchTypeEnum SearchSource = searchSource; SearchType = searchType; } + + public InputSongId (string songId, InputSongId other) : this(other.QueryId, other.SearchSource, other.SearchType) + { + SongId = songId; + } } } diff --git a/MusicLyricApp/MainForm.cs b/MusicLyricApp/MainForm.cs index 796469e..d12c40e 100644 --- a/MusicLyricApp/MainForm.cs +++ b/MusicLyricApp/MainForm.cs @@ -267,29 +267,28 @@ private Dictionary> SearchBySongId(List Date: Sun, 26 Feb 2023 15:06:07 +0800 Subject: [PATCH 5/7] output filename add length control --- MusicLyricApp/Utils/GlobalUtils.cs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/MusicLyricApp/Utils/GlobalUtils.cs b/MusicLyricApp/Utils/GlobalUtils.cs index acd36a7..419ea35 100644 --- a/MusicLyricApp/Utils/GlobalUtils.cs +++ b/MusicLyricApp/Utils/GlobalUtils.cs @@ -179,9 +179,9 @@ public static string GetOutputName(SaveVo saveVo, string format) var outputName = format .Replace("${index}", saveVo.Index.ToString()) .Replace("${id}", songVo.DisplayId) - .Replace("${name}", songVo.Name) - .Replace("${singer}", songVo.Singer) - .Replace("${album}", songVo.Album); + .Replace("${name}", ControlLength(songVo.Name)) + .Replace("${singer}", ControlLength(songVo.Singer)) + .Replace("${album}", ControlLength(songVo.Album)); outputName = ResolveCustomFunction(outputName); @@ -353,5 +353,17 @@ public static string[] GetEnumDescArray() where T : Enum return result; } + + private static string ControlLength(string str) + { + if (str.Length > 128) + { + return str.Substring(0, 125) + "..."; + } + else + { + return str; + } + } } } \ No newline at end of file From 5332529caf46ebe58652bfd54c6180c8b7a52a51 Mon Sep 17 00:00:00 2001 From: jitwxs Date: Sun, 26 Feb 2023 15:52:24 +0800 Subject: [PATCH 6/7] feature: add separate file for isolated type mode #163 --- MusicLyricApp/Bean/Constants.cs | 4 +- MusicLyricApp/Bean/SettingBase.cs | 5 +++ MusicLyricApp/MainForm.cs | 49 ++++++++++++++++------ MusicLyricApp/SettingForm.Designer.cs | 18 +++++++- MusicLyricApp/SettingForm.cs | 1 + MusicLyricApp/Utils/GlobalUtils.cs | 5 +++ MusicLyricApp/Utils/LyricUtils.cs | 60 +++++++++++++++++++-------- 7 files changed, 108 insertions(+), 34 deletions(-) diff --git a/MusicLyricApp/Bean/Constants.cs b/MusicLyricApp/Bean/Constants.cs index 450c71b..a80bbea 100644 --- a/MusicLyricApp/Bean/Constants.cs +++ b/MusicLyricApp/Bean/Constants.cs @@ -61,7 +61,7 @@ public static string GetContent(TypeEnum typeEnum) list.Add("当毫秒的占位符为 S 或 SS 时,『毫秒截位规则』配置生效"); break; case TypeEnum.OUTPUT_SETTING: - list.Add("您可自行调整『输出文件名』配置,系统预设的元变量有:"); + list.Add("您可自行调整『保存文件名』配置,系统预设的元变量有:"); list.Add("${id} -> 歌曲 ID"); list.Add("${index} -> 歌曲位于搜索结果中的索引序号"); list.Add("${name} -> 歌曲名"); @@ -76,7 +76,7 @@ public static string GetContent(TypeEnum typeEnum) list.Add("-----"); list.Add("您可自行决定输出哪些歌词类型,通过勾选复选框进行启用和关闭"); list.Add("拖拽最左侧的箭头可以调整输出的顺序"); - list.Add("罗马音功能需要安装罗马音插件,非原始译文类型需要指定翻译 API"); + list.Add("罗马音功能需要安装罗马音插件;非原始译文类型需要指定翻译 API"); break; case TypeEnum.DEFAULT: default: diff --git a/MusicLyricApp/Bean/SettingBase.cs b/MusicLyricApp/Bean/SettingBase.cs index f36d968..3204d56 100644 --- a/MusicLyricApp/Bean/SettingBase.cs +++ b/MusicLyricApp/Bean/SettingBase.cs @@ -39,6 +39,11 @@ public class ConfigBean /// public bool IgnorePureMusicInSave = true; + /// + /// 对于 "独立" 歌词格式,保存在不同的文件中 + /// + public bool SeparateFileForIsolated = false; + /// /// 输出文件名格式 /// diff --git a/MusicLyricApp/MainForm.cs b/MusicLyricApp/MainForm.cs index d12c40e..f4991d0 100644 --- a/MusicLyricApp/MainForm.cs +++ b/MusicLyricApp/MainForm.cs @@ -8,6 +8,7 @@ using System.Reflection; using System.Text; using System.Threading; +using System.Threading.Tasks; using System.Windows.Forms; using MusicLyricApp.Api.Music; using MusicLyricApp.Bean; @@ -574,11 +575,7 @@ private async void SingleSave() try { - using (var sw = new StreamWriter(saveDialog.FileName, false, GlobalUtils.GetEncoding(_globalSearchInfo.SettingBean.Param.Encoding))) - { - await sw.WriteAsync(await LyricUtils.GetOutputContent(saveVo.LyricVo, _globalSearchInfo)); - await sw.FlushAsync(); - } + await WriteToFile(saveDialog.FileName, saveVo.LyricVo); MessageBox.Show(string.Format(ErrorMsg.SAVE_COMPLETE, 1, 0), "提示"); } @@ -626,12 +623,9 @@ private async void BatchSave() } var path = filePath + '/' + GlobalUtils.GetOutputName(saveVo, _globalSearchInfo.SettingBean.Config.OutputFileNameFormat) + fileSuffix; - using(var sw = new StreamWriter(path, false, GlobalUtils.GetEncoding(_globalSearchInfo.SettingBean.Param.Encoding))) - { - await sw.WriteAsync(await LyricUtils.GetOutputContent(lyricVo, _globalSearchInfo)); - await sw.FlushAsync(); - success.Add(item.Key); - } + + await WriteToFile(path, lyricVo); + success.Add(item.Key); } MessageBox.Show(string.Format(ErrorMsg.SAVE_COMPLETE, success.Count, skipCount), "提示"); @@ -653,6 +647,37 @@ private async void BatchSave() UpdateLrcTextBox(log.ToString()); } + private async Task WriteToFile(string path, LyricVo lyricVo) + { + var encoding = GlobalUtils.GetEncoding(_globalSearchInfo.SettingBean.Param.Encoding); + + var res = await LyricUtils.GetOutputContent(lyricVo, _globalSearchInfo); + + if (res.Count == 1) + { + using (var sw = new StreamWriter(path, false, encoding)) + { + await sw.WriteAsync(res[0]); + await sw.FlushAsync(); + } + } + else + { + var doxIndex = path.LastIndexOf(".", StringComparison.Ordinal); + var suffix = path.Substring(doxIndex); + path = path.Substring(0, doxIndex); + + for (var i = 0; i < res.Count; i++) + { + using (var sw = new StreamWriter(path + " - " + i + suffix, false, encoding)) + { + await sw.WriteAsync(res[i]); + await sw.FlushAsync(); + } + } + } + } + /** * 保存按钮点击事件 */ @@ -695,7 +720,7 @@ private async void UpdateLrcTextBox(string replace) } else { - Console_TextBox.Text = await LyricUtils.GetOutputContent(lyricVo, _globalSearchInfo); + Console_TextBox.Text = GlobalUtils.MergeStr(await LyricUtils.GetOutputContent(lyricVo, _globalSearchInfo)); } } } diff --git a/MusicLyricApp/SettingForm.Designer.cs b/MusicLyricApp/SettingForm.Designer.cs index 16e7317..5085205 100644 --- a/MusicLyricApp/SettingForm.Designer.cs +++ b/MusicLyricApp/SettingForm.Designer.cs @@ -66,6 +66,7 @@ private void AfterInitializeComponent() // 输出设置 IgnorePureMusicInSave_CheckBox.Checked = _settingBean.Config.IgnorePureMusicInSave; + SeparateFileForIsolated_CheckBox.Checked = _settingBean.Config.SeparateFileForIsolated; OutputName_TextBox.Text = _settingBean.Config.OutputFileNameFormat; // 应用设置 @@ -138,6 +139,7 @@ private void InitializeComponent() this.Column1 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.Output_GroupBox = new System.Windows.Forms.GroupBox(); + this.SeparateFileForIsolated_CheckBox = new System.Windows.Forms.CheckBox(); this.OutputName_TextBox = new System.Windows.Forms.TextBox(); this.label10 = new System.Windows.Forms.Label(); this.IgnorePureMusicInSave_CheckBox = new System.Windows.Forms.CheckBox(); @@ -619,6 +621,7 @@ private void InitializeComponent() // // Output_GroupBox // + this.Output_GroupBox.Controls.Add(this.SeparateFileForIsolated_CheckBox); this.Output_GroupBox.Controls.Add(this.OutputName_TextBox); this.Output_GroupBox.Controls.Add(this.label10); this.Output_GroupBox.Controls.Add(this.IgnorePureMusicInSave_CheckBox); @@ -632,6 +635,15 @@ private void InitializeComponent() this.Output_GroupBox.TabStop = false; this.Output_GroupBox.Text = "输出设置"; // + // SeparateFileForIsolated_CheckBox + // + this.SeparateFileForIsolated_CheckBox.Location = new System.Drawing.Point(226, 61); + this.SeparateFileForIsolated_CheckBox.Name = "SeparateFileForIsolated_CheckBox"; + this.SeparateFileForIsolated_CheckBox.Size = new System.Drawing.Size(202, 17); + this.SeparateFileForIsolated_CheckBox.TabIndex = 39; + this.SeparateFileForIsolated_CheckBox.Text = "“独立”歌词格式分文件保存"; + this.SeparateFileForIsolated_CheckBox.UseVisualStyleBackColor = true; + // // OutputName_TextBox // this.OutputName_TextBox.Location = new System.Drawing.Point(222, 125); @@ -645,13 +657,13 @@ private void InitializeComponent() this.label10.Name = "label10"; this.label10.Size = new System.Drawing.Size(65, 12); this.label10.TabIndex = 37; - this.label10.Text = "输出文件名"; + this.label10.Text = "保存文件名"; // // IgnorePureMusicInSave_CheckBox // this.IgnorePureMusicInSave_CheckBox.Location = new System.Drawing.Point(226, 23); this.IgnorePureMusicInSave_CheckBox.Name = "IgnorePureMusicInSave_CheckBox"; - this.IgnorePureMusicInSave_CheckBox.Size = new System.Drawing.Size(93, 29); + this.IgnorePureMusicInSave_CheckBox.Size = new System.Drawing.Size(93, 17); this.IgnorePureMusicInSave_CheckBox.TabIndex = 36; this.IgnorePureMusicInSave_CheckBox.Text = "跳过纯音乐"; this.IgnorePureMusicInSave_CheckBox.UseVisualStyleBackColor = true; @@ -710,6 +722,8 @@ private void InitializeComponent() this.PerformLayout(); } + private System.Windows.Forms.CheckBox SeparateFileForIsolated_CheckBox; + private System.Windows.Forms.CheckBox AggregatedBlurSearchCheckBox; private System.Windows.Forms.TextBox BaiduTranslateAppId_TextBox; diff --git a/MusicLyricApp/SettingForm.cs b/MusicLyricApp/SettingForm.cs index 5a4cb13..2105ad3 100644 --- a/MusicLyricApp/SettingForm.cs +++ b/MusicLyricApp/SettingForm.cs @@ -78,6 +78,7 @@ private void Close_Btn_Click(object sender, EventArgs e) // 输出设置 _settingBean.Config.IgnorePureMusicInSave = IgnorePureMusicInSave_CheckBox.Checked; + _settingBean.Config.SeparateFileForIsolated = SeparateFileForIsolated_CheckBox.Checked; _settingBean.Config.OutputFileNameFormat = OutputName_TextBox.Text; // 应用设置 diff --git a/MusicLyricApp/Utils/GlobalUtils.cs b/MusicLyricApp/Utils/GlobalUtils.cs index 419ea35..55cc355 100644 --- a/MusicLyricApp/Utils/GlobalUtils.cs +++ b/MusicLyricApp/Utils/GlobalUtils.cs @@ -331,6 +331,11 @@ public static int toInt(string str, int defaultValue) return result; } + public static string MergeStr(IEnumerable strList) + { + return string.Join(Environment.NewLine, strList); + } + public static List GetEnumList() where T : Enum { return Enum.GetValues(typeof(T)).OfType().ToList(); diff --git a/MusicLyricApp/Utils/LyricUtils.cs b/MusicLyricApp/Utils/LyricUtils.cs index c40be42..dabfaa5 100644 --- a/MusicLyricApp/Utils/LyricUtils.cs +++ b/MusicLyricApp/Utils/LyricUtils.cs @@ -25,28 +25,38 @@ public abstract class LyricUtils /// /// /// - public static async Task GetOutputContent(LyricVo lyricVo, SearchInfo searchInfo) + public static async Task> GetOutputContent(LyricVo lyricVo, SearchInfo searchInfo) { var param = searchInfo.SettingBean.Param; var dotType = param.DotType; var timestampFormat = param.OutputFileFormat == OutputFormatEnum.SRT ? param.SrtTimestampFormat : param.LrcTimestampFormat; - var voList = await FormatLyric(lyricVo.Lyric, lyricVo.TranslateLyric, searchInfo); + var voListList = await FormatLyric(lyricVo.Lyric, lyricVo.TranslateLyric, searchInfo); if (searchInfo.SettingBean.Param.EnableVerbatimLyric) { - voList = FormatSubLineLyric(voList, timestampFormat, dotType); + for (var i = 0; i < voListList.Count; i++) + { + voListList[i] = FormatSubLineLyric(voListList[i], timestampFormat, dotType); + } } + + var res = new List(); - if (param.OutputFileFormat == OutputFormatEnum.SRT) + foreach (var voList in voListList) { - return SrtUtils.LrcToSrt(voList, timestampFormat, dotType, lyricVo.Duration); - } - else - { - return string.Join(Environment.NewLine, from o in voList select o.Print(timestampFormat, dotType)); + if (param.OutputFileFormat == OutputFormatEnum.SRT) + { + res.Add(SrtUtils.LrcToSrt(voList, timestampFormat, dotType, lyricVo.Duration)); + } + else + { + res.Add(string.Join(Environment.NewLine, from o in voList select o.Print(timestampFormat, dotType))); + } } + + return res; } /// @@ -143,17 +153,19 @@ private static List FormatSubLineLyric(List vos, strin /// 原始的译文内容 /// 处理参数 /// - private static async Task> FormatLyric(string originLrc, string translateLrc, SearchInfo searchInfo) + private static async Task>> FormatLyric(string originLrc, string translateLrc, SearchInfo searchInfo) { var outputLyricsTypes = searchInfo.SettingBean.Config.DeserializationOutputLyricsTypes(); var showLrcType = searchInfo.SettingBean.Param.ShowLrcType; var searchSource = searchInfo.SettingBean.Param.SearchSource; var ignoreEmptyLyric = searchInfo.SettingBean.Param.IgnoreEmptyLyric; + var res = new List>(); + // 未配置任何输出 if (outputLyricsTypes.Count == 0) { - return new List(); + return res; } var originLyrics = SplitLrc(originLrc, searchSource, ignoreEmptyLyric); @@ -163,7 +175,8 @@ private static async Task> FormatLyric(string originLrc, strin // 仅输出原文 if (outputLyricsTypes.Count == 1 && originLyricsOutputSortInConfig != -1) { - return originLyrics; + res.Add(originLyrics); + return res; } // 原始译文歌词的空行没有意义,指定 true 不走配置 @@ -176,33 +189,44 @@ private static async Task> FormatLyric(string originLrc, strin { lyricsComplexList.Insert(originLyricsOutputSortInConfig, originLyrics); } - - var res = new List(); + var single = new List(); switch (showLrcType) { case ShowLrcTypeEnum.STAGGER: foreach (var each in lyricsComplexList) { - res = SortLrc(res, each, true); + single = SortLrc(single, each, true); } break; case ShowLrcTypeEnum.ISOLATED: - foreach (var each in lyricsComplexList) + if (searchInfo.SettingBean.Config.SeparateFileForIsolated) + { + res.AddRange(lyricsComplexList); + } + else { - res.AddRange(each); + foreach (var each in lyricsComplexList) + { + single.AddRange(each); + } } break; case ShowLrcTypeEnum.MERGE: foreach (var each in lyricsComplexList) { - res = MergeLrc(res, each, searchInfo.SettingBean.Param.LrcMergeSeparator, true); + single = MergeLrc(single, each, searchInfo.SettingBean.Param.LrcMergeSeparator, true); } break; default: throw new NotSupportedException("not support showLrcType: " + showLrcType); } + if (single.Count > 0) + { + res.Add(single); + } + return res; } From 59d6b17d6595be94c8a2830b7b73cbecab7f05ba Mon Sep 17 00:00:00 2001 From: jitwxs Date: Sun, 26 Feb 2023 16:34:29 +0800 Subject: [PATCH 7/7] update --- images/latest_version.png | Bin 57981 -> 53441 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/images/latest_version.png b/images/latest_version.png index 00289d1a3c0e19c8eafdae11410141c153caec9c..5a171cea5f86c48ced681b91fd15e8cfe897aac2 100644 GIT binary patch literal 53441 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 HeEI(YE09tX literal 57981 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