public override Model.Lyric PickLyric(string artist, string title, int time, List <Song> searchResult, bool requestTransLyrics, out Song pickedResult) { pickedResult = null; Model.Lyric result = base.PickLyric(artist, title, time, searchResult, requestTransLyrics, out Song tempPickedResult); if (result != null) { switch (result.LyricSentencs.Count) { case 0: // 无任何歌词在里面 return(null); case 1: var firstSentence = result.LyricSentencs.First(); if (firstSentence.StartTime <= 0 && firstSentence.Content.Contains("纯音乐") && firstSentence.Content.Contains("没有填词")) { // 纯音乐或无歌词 return(null); } break; } } pickedResult = tempPickedResult; return(result); }
public override Model.Lyric ProvideLyric(string artist, string title, int time, bool requestTransLyrics) { Task <Model.Lyric>[] tasks = new Task <Model.Lyric> [_searchEngines.Length]; CancellationTokenSource cts = new CancellationTokenSource(); for (int i = 0; i < _searchEngines.Length; i++) { int j = i; tasks[i] = Task.Run(() => _searchEngines[j].ProvideLyric(artist, title, time, requestTransLyrics), cts.Token); } Model.Lyric lyric = null; for (int i = 0; i < _searchEngines.Length; i++) { lyric = tasks[i].Result; //如果是刚好是要相同版本的歌词那可以直接返回了,否则就等一下其他源是不是还能拿到合适的版本 if (lyric != null) { cts.Cancel(); break; } } return(lyric); }