Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }