@@ -77,46 +77,29 @@ protected override SearchResult SearchLyric(Uri uri, CancellationToken cancellat
7777
7878 protected override async Task < SearchResult > SearchLyricAsync ( string artist , string song , CancellationToken cancellationToken = default )
7979 {
80- try
80+ if ( WebClient == null || Parser == null )
8181 {
82- var artistUri = _uriConverter . GetLyricUri ( artist , song ) ;
83-
84- if ( WebClient == null || Parser == null )
85- {
86- _logger ? . LogWarning ( $ "LyricsFreak. Please set up WebClient and Parser first") ;
87- return new SearchResult ( Models . ExternalProviderType . LyricsFreak ) ;
88- }
89-
90- var htmlResponse = await WebClient . LoadAsync ( artistUri , cancellationToken ) ;
91-
92- cancellationToken . ThrowIfCancellationRequested ( ) ;
93-
94- var songHref = GetSongHrefFromHtmlBody ( htmlResponse , song ) ;
95- if ( string . IsNullOrEmpty ( songHref ) )
96- {
97- _logger ? . LogWarning ( $ "LyricsFreak. Can't find song Uri for song: [{ song } ]") ;
98- return new SearchResult ( Models . ExternalProviderType . LyricsFreak ) ;
99- }
100-
101- var songUri = new Uri ( LyricsFreakUriConverter . BaseUrl + songHref ) ;
82+ _logger ? . LogWarning ( $ "LyricsFreak. Please set up WebClient and Parser first") ;
83+ return new SearchResult ( Models . ExternalProviderType . LyricsFreak ) ;
84+ }
10285
103- var songUriSearchResult = await SearchLyricAsync ( songUri , cancellationToken ) ;
86+ // 1. Open the artist's page.
87+ var artistUri = _uriConverter . GetArtistUri ( artist ) ;
10488
105- cancellationToken . ThrowIfCancellationRequested ( ) ;
89+ var htmlResponse = await WebClient . LoadAsync ( artistUri , cancellationToken ) ;
10690
107- if ( songUriSearchResult is null || string . IsNullOrEmpty ( songUriSearchResult ? . LyricText ) )
108- {
109- _logger ? . LogWarning ( $ "LyricsFreak. Can't find song lyrics for song : [{ song } ]") ;
110- return new SearchResult ( Models . ExternalProviderType . LyricsFreak ) ;
111- }
91+ cancellationToken . ThrowIfCancellationRequested ( ) ;
11292
113- return new SearchResult ( songUriSearchResult ! . LyricText , Models . ExternalProviderType . LyricsFreak ) ;
114- }
115- catch ( Exception ex )
93+ // 2. Find song on the artist page and get link to the web page.
94+ var songHref = GetSongHrefFromHtmlBody ( htmlResponse , song ) ;
95+ if ( string . IsNullOrEmpty ( songHref ) )
11696 {
117- _logger ? . LogError ( ex , $ "LyricsFreak. Error searching for lyrics for artist: [ { artist } ], song: [{ song } ]") ;
97+ _logger ? . LogWarning ( $ "LyricsFreak. Can't find song Uri for song: [{ song } ]") ;
11898 return new SearchResult ( Models . ExternalProviderType . LyricsFreak ) ;
11999 }
100+ var songUri = new Uri ( LyricsFreakUriConverter . BaseUrl + songHref ) ;
101+
102+ return await SearchLyricAsync ( songUri , cancellationToken ) ;
120103 }
121104
122105 protected async override Task < SearchResult > SearchLyricAsync ( Uri uri , CancellationToken cancellationToken = default )
0 commit comments