From 5a549bd5f5154ccaa133988869588e59febff9eb Mon Sep 17 00:00:00 2001 From: Zhe Fang Date: Mon, 8 Dec 2025 18:48:29 -0500 Subject: [PATCH] fix: auto asearch is not using cache for some cases --- .../BetterLyrics.WinUI3/App.xaml | 1 + .../Controls/LyricsSearchControl.xaml | 8 ---- .../Controls/LyricsSearchControl.xaml.cs | 20 --------- .../Controls/PlaybackSettingsControl.xaml | 3 +- ...ionSearchProviderToDisplayNameConverter.cs | 43 +++++++++++++++++++ .../Enums/TransliterationSearchProvider.cs | 17 ++++++++ .../LyricsSearchProviderExtensions.cs | 15 +++++++ .../Models/LyricsSearchResult.cs | 2 + .../Parsers/LyricsParser/LyricsParser.cs | 11 ++++- .../IMediaSessionsService.cs | 1 - .../MediaSessionsService.LyricsUpdater.cs | 6 +-- .../Strings/en-US/Resources.resw | 3 ++ .../Strings/ja-JP/Resources.resw | 3 ++ .../Strings/ko-KR/Resources.resw | 3 ++ .../Strings/zh-CN/Resources.resw | 3 ++ .../Strings/zh-TW/Resources.resw | 3 ++ 16 files changed, 106 insertions(+), 36 deletions(-) create mode 100644 BetterLyrics.WinUI3/BetterLyrics.WinUI3/Converter/TransliterationSearchProviderToDisplayNameConverter.cs create mode 100644 BetterLyrics.WinUI3/BetterLyrics.WinUI3/Enums/TransliterationSearchProvider.cs diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/App.xaml b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/App.xaml index 2f79a4a..89a9e84 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/App.xaml +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/App.xaml @@ -50,6 +50,7 @@ + diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/LyricsSearchControl.xaml b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/LyricsSearchControl.xaml index 50e41a8..ba421f8 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/LyricsSearchControl.xaml +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/LyricsSearchControl.xaml @@ -105,14 +105,6 @@ - - - diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/LyricsSearchControl.xaml.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/LyricsSearchControl.xaml.cs index e02b720..56a9e0e 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/LyricsSearchControl.xaml.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/LyricsSearchControl.xaml.cs @@ -25,25 +25,5 @@ namespace BetterLyrics.WinUI3.Controls ViewModel.SelectedLyricsLine = e.OriginalSource as LyricsLine; } - private void ArtistsSplitHintRichTextBlock_Loaded(object sender, Microsoft.UI.Xaml.RoutedEventArgs e) - { - if (sender is RichTextBlock richTextBlock) - { - TextHighlighter highlighter = new() - { - Background = App.Current.Resources["AccentTextFillColorPrimaryBrush"] as SolidColorBrush, - Ranges = - { - new() { StartIndex = 0, Length = 1 }, - new() { StartIndex = 5, Length = 1 }, - new() { StartIndex = 10, Length = 1 }, - new() { StartIndex = 15, Length = 1 }, - new() { StartIndex = 20, Length = 1 }, - new() { StartIndex = 25, Length = 1 }, - } - }; - richTextBlock.TextHighlighters.Add(highlighter); - } - } } } diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/PlaybackSettingsControl.xaml b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/PlaybackSettingsControl.xaml index 41aae05..60cccfa 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/PlaybackSettingsControl.xaml +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Controls/PlaybackSettingsControl.xaml @@ -353,7 +353,8 @@ Link="{x:Bind ViewModel.MediaSessionsService.CurrentLyricsSearchResult.Reference, Mode=OneWay}" ToolTipService.ToolTip="{x:Bind ViewModel.MediaSessionsService.CurrentLyricsSearchResult.Reference, TargetNullValue=N/A, Mode=OneWay}" Value="{x:Bind ViewModel.MediaSessionsService.CurrentLyricsSearchResult.ProviderIfFound, Mode=OneWay, Converter={StaticResource LyricsSearchProviderToDisplayNameConverter}}" /> - + + (); + + public object Convert(object value, Type targetType, object parameter, string language) + { + if (value is TransliterationSearchProvider provider) + { + return provider switch + { + TransliterationSearchProvider.LrcLib => "LrcLib", + TransliterationSearchProvider.QQ => "QQ 音乐", + TransliterationSearchProvider.Netease => "网易云音乐", + TransliterationSearchProvider.Kugou => "酷狗音乐", + TransliterationSearchProvider.AmllTtmlDb => "amll-ttml-db", + TransliterationSearchProvider.AppleMusic => "Apple Music", + TransliterationSearchProvider.LocalLrcFile => _resourceService.GetLocalizedString("LyricsSearchProviderLocalLrcFile"), + TransliterationSearchProvider.LocalMusicFile => _resourceService.GetLocalizedString("LyricsSearchProviderLocalMusicFile"), + TransliterationSearchProvider.LocalEslrcFile => _resourceService.GetLocalizedString("LyricsSearchProviderEslrcFile"), + TransliterationSearchProvider.LocalTtmlFile => _resourceService.GetLocalizedString("LyricsSearchProviderTtmlFile"), + TransliterationSearchProvider.BetterLyrics => "BetterLyrics", + _ => "N/A", + }; + } + return "N/A"; + } + + public object ConvertBack(object value, Type targetType, object parameter, string language) + { + throw new NotImplementedException(); + } + } +} diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Enums/TransliterationSearchProvider.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Enums/TransliterationSearchProvider.cs new file mode 100644 index 0000000..a9f1a30 --- /dev/null +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Enums/TransliterationSearchProvider.cs @@ -0,0 +1,17 @@ +namespace BetterLyrics.WinUI3.Enums +{ + public enum TransliterationSearchProvider + { + QQ, + Kugou, + Netease, + LrcLib, + AmllTtmlDb, + AppleMusic, + LocalMusicFile, + LocalLrcFile, + LocalEslrcFile, + LocalTtmlFile, + BetterLyrics + } +} diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Extensions/LyricsSearchProviderExtensions.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Extensions/LyricsSearchProviderExtensions.cs index e8a8e52..f248fb4 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Extensions/LyricsSearchProviderExtensions.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Extensions/LyricsSearchProviderExtensions.cs @@ -59,6 +59,21 @@ namespace BetterLyrics.WinUI3.Extensions LyricsSearchProvider.LocalTtmlFile => TranslationSearchProvider.LocalTtmlFile, _ => null, }; + + public TransliterationSearchProvider? ToTransliterationSearchProvider() => provider switch + { + LyricsSearchProvider.LrcLib => TransliterationSearchProvider.LrcLib, + LyricsSearchProvider.QQ => TransliterationSearchProvider.QQ, + LyricsSearchProvider.Kugou => TransliterationSearchProvider.Kugou, + LyricsSearchProvider.Netease => TransliterationSearchProvider.Netease, + LyricsSearchProvider.AmllTtmlDb => TransliterationSearchProvider.AmllTtmlDb, + LyricsSearchProvider.AppleMusic => TransliterationSearchProvider.AppleMusic, + LyricsSearchProvider.LocalMusicFile => TransliterationSearchProvider.LocalMusicFile, + LyricsSearchProvider.LocalLrcFile => TransliterationSearchProvider.LocalLrcFile, + LyricsSearchProvider.LocalEslrcFile => TransliterationSearchProvider.LocalEslrcFile, + LyricsSearchProvider.LocalTtmlFile => TransliterationSearchProvider.LocalTtmlFile, + _ => null, + }; } } } diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/LyricsSearchResult.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/LyricsSearchResult.cs index 8420e9e..2f247bd 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/LyricsSearchResult.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/LyricsSearchResult.cs @@ -9,6 +9,8 @@ namespace BetterLyrics.WinUI3.Models public partial class LyricsSearchResult : ObservableObject, ICloneable { public LyricsSearchProvider Provider { get; set; } + public TranslationSearchProvider? TranslationProvider { get; set; } + public TransliterationSearchProvider? TransliterationProvider { get; set; } public string? Raw { get; set; } diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Parsers/LyricsParser/LyricsParser.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Parsers/LyricsParser/LyricsParser.cs index a62f708..97ea535 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Parsers/LyricsParser/LyricsParser.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Parsers/LyricsParser/LyricsParser.cs @@ -89,6 +89,14 @@ namespace BetterLyrics.WinUI3.Parsers.LyricsParser if (found != null) { main.SetPhoneticText(found); + if (found.AutoGenerated) + { + lyricsSearchResult?.TransliterationProvider = TransliterationSearchProvider.BetterLyrics; + } + else + { + lyricsSearchResult?.TransliterationProvider = lyricsSearchResult?.Provider.ToTransliterationSearchProvider(); + } } } @@ -99,6 +107,7 @@ namespace BetterLyrics.WinUI3.Parsers.LyricsParser if (found != null) { main.SetTranslatedText(found); + lyricsSearchResult?.TranslationProvider = lyricsSearchResult?.Provider.ToTranslationSearchProvider(); } else if (settings.IsLibreTranslateEnabled) { @@ -107,7 +116,7 @@ namespace BetterLyrics.WinUI3.Parsers.LyricsParser { translated = await translateService.TranslateTextAsync(main.WrappedOriginalText, settings.SelectedTargetLanguageCode, token); _lyricsDataArr.FirstOrDefault()?.SetTranslation(translated); - //lyricsSearchResult = Enums.TranslationSearchProvider.LibreTranslate; + lyricsSearchResult?.TranslationProvider = TranslationSearchProvider.LibreTranslate; } catch (TaskCanceledException) { } catch (Exception) diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/MediaSessionsService/IMediaSessionsService.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/MediaSessionsService/IMediaSessionsService.cs index 7bfc39e..9cef74d 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/MediaSessionsService/IMediaSessionsService.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/MediaSessionsService/IMediaSessionsService.cs @@ -37,7 +37,6 @@ namespace BetterLyrics.WinUI3.Services.MediaSessionsService Task CalculateAlbumArtThemeColorsAsync(LyricsWindowStatus lyricsWindowStatus, Color backdropAccentColor); - TranslationSearchProvider? TranslationSearchProvider { get; } LyricsSearchResult? CurrentLyricsSearchResult { get; } } } diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/MediaSessionsService/MediaSessionsService.LyricsUpdater.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/MediaSessionsService/MediaSessionsService.LyricsUpdater.cs index c285128..f5a83e7 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/MediaSessionsService/MediaSessionsService.LyricsUpdater.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/MediaSessionsService/MediaSessionsService.LyricsUpdater.cs @@ -27,10 +27,6 @@ namespace BetterLyrics.WinUI3.Services.MediaSessionsService [ObservableProperty] public partial LyricsSearchResult? CurrentLyricsSearchResult { get; private set; } - [ObservableProperty][NotifyPropertyChangedRecipients] public partial TranslationSearchProvider? TranslationSearchProvider { get; private set; } - - [ObservableProperty] public partial bool IsTranslating { get; set; } = false; - private async Task RefreshLyricsAsync(CancellationToken token) { _logger.LogInformation("RefreshLyricsAsync"); @@ -42,7 +38,7 @@ namespace BetterLyrics.WinUI3.Services.MediaSessionsService { CurrentLyricsSearchResult = await Task.Run(async () => await _lyrcsSearchService.SearchSmartlyAsync( CurrentSongInfo, - !_settingsService.AppSettings.GeneralSettings.IgnoreCacheWhenSearching, + true, CurrentMediaSourceProviderInfo?.LyricsSearchType, token), token); diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/en-US/Resources.resw b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/en-US/Resources.resw index a3c48e1..eb94ff5 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/en-US/Resources.resw +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/en-US/Resources.resw @@ -279,6 +279,9 @@ Translation provider + + Transliteration source + Lyrics parsing failed diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ja-JP/Resources.resw b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ja-JP/Resources.resw index 5a7a68c..b707267 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ja-JP/Resources.resw +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ja-JP/Resources.resw @@ -279,6 +279,9 @@ 翻訳プロバイダー + + 文字起こしソース + 歌詞の解析に失敗しました diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ko-KR/Resources.resw b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ko-KR/Resources.resw index e2028e0..6fa3913 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ko-KR/Resources.resw +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ko-KR/Resources.resw @@ -279,6 +279,9 @@ 번역 제공자 + + 음역 소스 + 가사 구문 분석에 실패했습니다 diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-CN/Resources.resw b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-CN/Resources.resw index 5df41ec..3b3bebe 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-CN/Resources.resw +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-CN/Resources.resw @@ -279,6 +279,9 @@ 翻译来源 + + 音译来源 + 歌词解析失败 diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-TW/Resources.resw b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-TW/Resources.resw index f38cd84..440b741 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-TW/Resources.resw +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-TW/Resources.resw @@ -279,6 +279,9 @@ 翻譯來源 + + 音譯來源 + 歌詞解析失敗