From eba81e8be33e31d05c9ca4978dba73d79de69782 Mon Sep 17 00:00:00 2001 From: Zhe Fang Date: Fri, 25 Jul 2025 11:07:34 -0400 Subject: [PATCH] fix --- .../Services/ISettingsService.cs | 1 + .../Services/SettingsService.cs | 7 +++ .../Strings/en-US/Resources.resw | 36 +++++++-------- .../Strings/ja-JP/Resources.resw | 44 +++++++++--------- .../Strings/ko-KR/Resources.resw | 44 +++++++++--------- .../Strings/zh-CN/Resources.resw | 44 +++++++++--------- .../Strings/zh-TW/Resources.resw | 44 +++++++++--------- .../ViewModels/LyricsRendererViewModel.cs | 5 ++- .../ViewModels/MusicGalleryViewModel.cs | 45 ++++++++++++++++++- .../Views/MusicGalleryPage.xaml | 2 +- 10 files changed, 163 insertions(+), 109 deletions(-) diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/ISettingsService.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/ISettingsService.cs index 5783040..3616385 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/ISettingsService.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/ISettingsService.cs @@ -102,5 +102,6 @@ namespace BetterLyrics.WinUI3.Services int SelectedFontFamilyIndex { get; set; } string LyricsFontFamily { get; set; } bool IsDragEverywhereEnabled { get; set; } + PlaybackOrder PlaybackOrder { get; set; } } } diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/SettingsService.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/SettingsService.cs index 3818851..c36012c 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/SettingsService.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/SettingsService.cs @@ -92,6 +92,7 @@ namespace BetterLyrics.WinUI3.Services private const string IsLyricsFloatAnimationEnabledKey = "IsLyricsFloatAnimationEnabled"; private const string ResetPositionOffsetOnSongChangedKey = "ResetPositionOffsetOnSongChanged"; + private const string PlaybackOrderKey = "PlaybackOrder"; private const string PositionOffsetKey = "PositionOffset"; @@ -641,6 +642,12 @@ namespace BetterLyrics.WinUI3.Services set => SetValue(ResetPositionOffsetOnSongChangedKey, value); } + public PlaybackOrder PlaybackOrder + { + get => (PlaybackOrder)GetValue(PlaybackOrderKey); + set => SetValue(PlaybackOrderKey, (int)value); + } + public int PositionOffset { get => GetValue(PositionOffsetKey); diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/en-US/Resources.resw b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/en-US/Resources.resw index 6725442..d2966d8 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/en-US/Resources.resw +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/en-US/Resources.resw @@ -59,46 +59,46 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - - + + - + - - - - + + + + - - + + - - + + - - - - + + + + - + - + @@ -649,7 +649,7 @@ 设置 - + 未设置翻译服务器,请先在设置中进行配置 diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ja-JP/Resources.resw b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ja-JP/Resources.resw index 255ef03..0aa2de4 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ja-JP/Resources.resw +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ja-JP/Resources.resw @@ -59,46 +59,46 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - - + + - + - - - - + + + + - - + + - - + + - - - - + + + + - + - + @@ -649,8 +649,8 @@ 設定 - - 翻訳サーバーは設定されていません。最初に設定で構成してください + + 曲を切り替えるときに0にリセットします @@ -793,10 +793,10 @@ タイトルバーをページ全体に拡張して、ウィンドウを非対話領域でドラッグできるようにします - - アクリル模倣効果の粗さ - 音楽ギャラリー + + アクリル模倣効果の粗さ + \ No newline at end of file diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ko-KR/Resources.resw b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ko-KR/Resources.resw index b7120e8..df180c0 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ko-KR/Resources.resw +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ko-KR/Resources.resw @@ -59,46 +59,46 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - - + + - + - - - - + + + + - - + + - - + + - - - - + + + + - + - + @@ -649,8 +649,8 @@ 설정 - - 번역 서버가 설정되지 않았습니다. 먼저 설정으로 구성하십시오. + + 노래를 전환 할 때 0 으로 재설정하십시오 @@ -793,10 +793,10 @@ 비 중과 영역에서 창을 드래그 할 수 있도록 제목 표시 줄을 전체 페이지로 확장하십시오. - - 아크릴 효과 모방 거칠기 - 음악 갤러리 + + 아크릴 효과 모방 거칠기 + \ No newline at end of file diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-CN/Resources.resw b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-CN/Resources.resw index aca80e3..99e8ec3 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-CN/Resources.resw +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-CN/Resources.resw @@ -59,46 +59,46 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - - + + - + - - - - + + + + - - + + - - + + - - - - + + + + - + - + @@ -649,8 +649,8 @@ 设置 - - 未设置翻译服务器,请先在设置中进行配置 + + 向 LibreTranslate 请求翻译失败,请检查设置或本机 LibreTranslate 配置 切换歌曲时重置为 0 @@ -793,10 +793,10 @@ 将标题栏扩展至整个页面使得在任意非交互区域均可拖拽窗口 - - 仿亚克力效果粗糙度 - 音乐库 + + 仿亚克力效果粗糙度 + \ No newline at end of file diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-TW/Resources.resw b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-TW/Resources.resw index 43b545c..113b02a 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-TW/Resources.resw +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-TW/Resources.resw @@ -59,46 +59,46 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - - + + - + - - - - + + + + - - + + - - + + - - - - + + + + - + - + @@ -649,8 +649,8 @@ 設定 - - 未設定翻譯伺服器,請先在設定中進行配置 + + 切換歌曲時重置為 0 @@ -793,10 +793,10 @@ 將標題列擴展至整個頁面使得在任意非互動區域均可拖曳窗口 - - 仿亞克力效果粗糙度 - 音樂庫 + + 仿亞克力效果粗糙度 + \ No newline at end of file diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel.cs index 64927ae..01758bc 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel.cs @@ -468,7 +468,10 @@ namespace BetterLyrics.WinUI3.ViewModels } token.ThrowIfCancellationRequested(); } - catch (Exception) { } + catch (Exception) + { + App.Current.LyricsWindowNotificationPanel?.Notify(App.ResourceLoader?.GetString("LibreTranslateFailed")!, Microsoft.UI.Xaml.Controls.InfoBarSeverity.Error); + } } } } diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/MusicGalleryViewModel.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/MusicGalleryViewModel.cs index 512571f..0ebdba9 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/MusicGalleryViewModel.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/MusicGalleryViewModel.cs @@ -44,7 +44,8 @@ namespace BetterLyrics.WinUI3.ViewModels public Track? PlayingTrack => TrackPlayingQueue.ElementAtOrDefault(PlayingSongIndex); - + [ObservableProperty] + public partial PlaybackOrder PlaybackOrder { get; set; } [ObservableProperty] public partial SongOrderType SongOrderType { get; set; } = SongOrderType.Title; @@ -66,7 +67,10 @@ namespace BetterLyrics.WinUI3.ViewModels public MusicGalleryViewModel(ISettingsService settingsService, ILibWatcherService libWatcherService) : base(settingsService) { + PlaybackOrder = _settingsService.PlaybackOrder; + _mediaPlayer.MediaOpened += MediaPlayer_MediaOpened; + _mediaPlayer.MediaEnded += MediaPlayer_MediaEnded; _timelineController = _mediaPlayer.TimelineController = new(); _timelineController.PositionChanged += TimelineController_PositionChanged; _smtc = _mediaPlayer.SystemMediaTransportControls; @@ -82,6 +86,40 @@ namespace BetterLyrics.WinUI3.ViewModels _libWatcherService.MusicLibraryFilesChanged += LibWatcherService_MusicLibraryFilesChanged; } + private void MediaPlayer_MediaEnded(MediaPlayer sender, object args) + { + switch (PlaybackOrder) + { + case PlaybackOrder.RepeatAll: + _dispatcherQueue.TryEnqueue(DispatcherQueuePriority.Low , () => + { + if (PlayingSongIndex < TrackPlayingQueue.Count - 1) + { + PlayingSongIndex++; + } + else + { + PlayingSongIndex = 0; + } + }); + break; + case PlaybackOrder.RepeatOne: + _timelineController.Position = TimeSpan.Zero; + break; + case PlaybackOrder.Shuffle: + _dispatcherQueue.TryEnqueue(DispatcherQueuePriority.Low, () => + { + if (TrackPlayingQueue.Count > 0) + { + PlayingSongIndex = new Random().Next(0, TrackPlayingQueue.Count); + } + }); + break; + default: + break; + } + } + private void Smtc_PlaybackPositionChangeRequested(SystemMediaTransportControls sender, PlaybackPositionChangeRequestedEventArgs args) { _timelineController.Position = args.RequestedPlaybackPosition; @@ -257,6 +295,11 @@ namespace BetterLyrics.WinUI3.ViewModels PlayTrack(TrackPlayingQueue.ElementAtOrDefault(value)); } + partial void OnPlaybackOrderChanged(PlaybackOrder value) + { + _settingsService.PlaybackOrder = value; + } + public void Receive(PropertyChangedMessage> message) { if (message.Sender is SettingsPageViewModel) diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/MusicGalleryPage.xaml b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/MusicGalleryPage.xaml index cee8572..8746b41 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/MusicGalleryPage.xaml +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/MusicGalleryPage.xaml @@ -399,7 +399,7 @@