From 34d7f3f319a2aba01bfa44cacce543dc921cb7b1 Mon Sep 17 00:00:00 2001 From: Zhe Fang Date: Fri, 11 Jul 2025 18:08:05 -0400 Subject: [PATCH] fix --- .../Package.appxmanifest | 2 +- .../BetterLyrics.WinUI3/Assets/Discord.png | Bin 0 -> 13796 bytes .../BetterLyrics.WinUI3/Assets/QQ.png | Bin 0 -> 170328 bytes .../Enums/LineRenderingType.cs | 5 +- .../Helper/CollectionHelper.cs | 15 --- .../Helper/DesktopModeHelper.cs | 24 ++-- .../BetterLyrics.WinUI3/Helper/FileHelper.cs | 6 +- .../BetterLyrics.WinUI3/Helper/ImageHelper.cs | 34 ++--- .../Helper/LanguageHelper.cs | 7 + .../Helper/LyricsParser.cs | 66 ++++----- .../Helper/MetadataHelper.cs | 2 + .../BetterLyrics.WinUI3/Helper/PathHelper.cs | 26 ++-- .../Helper/StringHelper.cs | 3 +- .../BetterLyrics.WinUI3/Models/LyricsData.cs | 95 +++++++++++++ .../Services/ISettingsService.cs | 3 + .../Services/ITranslateService.cs | 7 +- .../Services/LyricsSearchService.cs | 26 +++- .../Services/SettingsService.cs | 21 ++- .../Services/TranslateService.cs | 39 +++++- .../Strings/en-US/Resources.resw | 30 ++++- .../Strings/ja-JP/Resources.resw | 30 ++++- .../Strings/ko-KR/Resources.resw | 30 ++++- .../Strings/zh-CN/Resources.resw | 30 ++++- .../Strings/zh-TW/Resources.resw | 30 ++++- .../ViewModels/BaseWindowViewModel.cs | 3 +- .../ViewModels/LyricsPageViewModel.cs | 28 +--- .../LyricsRendererViewModel.Ctor.cs | 5 +- .../LyricsRendererViewModel.Draw.cs | 41 +++--- .../LyricsRendererViewModel.Messages.cs | 30 +++-- .../LyricsRendererViewModel.Update.cs | 21 +-- .../ViewModels/LyricsRendererViewModel.cs | 127 ++++++------------ .../ViewModels/LyricsWindowViewModel.cs | 32 ++--- .../ViewModels/SettingsPageViewModel.cs | 111 ++++++--------- .../ViewModels/SettingsWindowViewModel.cs | 3 +- .../ViewModels/SystemTrayViewModel.cs | 9 +- .../Views/SettingsPage.xaml | 54 ++++++-- .../Views/SettingsPage.xaml.cs | 11 ++ 37 files changed, 604 insertions(+), 402 deletions(-) create mode 100644 BetterLyrics.WinUI3/BetterLyrics.WinUI3/Assets/Discord.png create mode 100644 BetterLyrics.WinUI3/BetterLyrics.WinUI3/Assets/QQ.png delete mode 100644 BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/CollectionHelper.cs create mode 100644 BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/LyricsData.cs diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3 (Package)/Package.appxmanifest b/BetterLyrics.WinUI3/BetterLyrics.WinUI3 (Package)/Package.appxmanifest index e9e170f..9925b8f 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3 (Package)/Package.appxmanifest +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3 (Package)/Package.appxmanifest @@ -12,7 +12,7 @@ + Version="1.0.11.0" /> diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Assets/Discord.png b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Assets/Discord.png new file mode 100644 index 0000000000000000000000000000000000000000..c49cc20a02056e0e05fa8edf8dbef012cf510d1e GIT binary patch literal 13796 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%0A+u4eyqS>u2KO#ydfCDRBV< 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 literal 0 HcmV?d00001 diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Enums/LineRenderingType.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Enums/LineRenderingType.cs index f78d472..c823797 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Enums/LineRenderingType.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Enums/LineRenderingType.cs @@ -4,7 +4,8 @@ namespace BetterLyrics.WinUI3.Enums { public enum LineRenderingType { - UntilCurrentChar, - CurrentCharOnly, + CurrentChar, + LineStartToCurrentChar, + CurrentLine } } diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/CollectionHelper.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/CollectionHelper.cs deleted file mode 100644 index d8a304f..0000000 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/CollectionHelper.cs +++ /dev/null @@ -1,15 +0,0 @@ -// 2025/6/23 by Zhe Fang - -using System.Collections.Generic; - -namespace BetterLyrics.WinUI3.Helper -{ - public static class CollectionHelper - { - public static T? SafeGet(this IList list, int index) - { - if (list == null || index < 0 || index >= list.Count) return default; - return list[index]; - } - } -} diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/DesktopModeHelper.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/DesktopModeHelper.cs index 8396c54..6d6855b 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/DesktopModeHelper.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/DesktopModeHelper.cs @@ -47,13 +47,6 @@ namespace BetterLyrics.WinUI3.Helper _originalWindowBounds.Remove(hwnd); } - // ָʽ - if (_originalWindowStyles.TryGetValue(hwnd, out var style)) - { - window.SetWindowStyle(style); - _originalWindowStyles.Remove(hwnd); - } - window.SetIsShownInSwitchers(true); } @@ -83,10 +76,6 @@ namespace BetterLyrics.WinUI3.Helper new Windows.Graphics.RectInt32(targetX, targetY, targetWidth, targetHeight) ); - // ԭʽ - if (!_originalWindowStyles.ContainsKey(hwnd)) - _originalWindowStyles[hwnd] = window.GetWindowStyle(); - // ԭTopMost״̬ if (!_originalTopmostStates.ContainsKey(hwnd)) _originalTopmostStates[hwnd] = window.GetIsAlwaysOnTop(); @@ -95,8 +84,6 @@ namespace BetterLyrics.WinUI3.Helper window.SetIsAlwaysOnTop(true); window.SetIsShownInSwitchers(false); - - window.ToggleWindowStyle(true, WindowStyle.Popup | WindowStyle.Visible); } public static void SetClickThrough(Window window, bool enable) @@ -105,11 +92,22 @@ namespace BetterLyrics.WinUI3.Helper int exStyle = User32.GetWindowLong(hwnd, User32.WindowLongFlags.GWL_EXSTYLE); if (enable) { + // ԭʽ + if (!_originalWindowStyles.ContainsKey(hwnd)) + _originalWindowStyles[hwnd] = window.GetWindowStyle(); + + window.ToggleWindowStyle(true, WindowStyle.Popup | WindowStyle.Visible); User32.SetWindowLong(hwnd, User32.WindowLongFlags.GWL_EXSTYLE, exStyle | (int)User32.WindowStylesEx.WS_EX_TRANSPARENT | (int)User32.WindowStylesEx.WS_EX_LAYERED); } else { User32.SetWindowLong(hwnd, User32.WindowLongFlags.GWL_EXSTYLE, exStyle & ~(int)User32.WindowStylesEx.WS_EX_TRANSPARENT); + // ָʽ + if (_originalWindowStyles.TryGetValue(hwnd, out var style)) + { + window.SetWindowStyle(style); + _originalWindowStyles.Remove(hwnd); + } } } } diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/FileHelper.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/FileHelper.cs index e60032c..815764d 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/FileHelper.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/FileHelper.cs @@ -69,9 +69,9 @@ namespace BetterLyrics.WinUI3.Helper public static bool IsSwitchableNormalizedMatch(string fileName, string q1, string q2) { - var normFileName = fileName.Normalize(); - var normQ1 = q1.Normalize(); - var normQ2 = q2.Normalize(); + var normFileName = StringHelper.Normalize(fileName.Normalize()); + var normQ1 = StringHelper.Normalize(q1); + var normQ2 = StringHelper.Normalize(q2); // 常见两种顺序 return normFileName == normQ1 + normQ2 diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/ImageHelper.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/ImageHelper.cs index 4b3202b..2a22ccc 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/ImageHelper.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/ImageHelper.cs @@ -102,7 +102,7 @@ namespace BetterLyrics.WinUI3.Helper } } - public static List GetAccentColorsFromByte(byte[] bytes) + public static List GetAccentColorsFromByte(byte[] bytes) { // 使用 ImageSharp 读取图片 using var image = SixLabors.ImageSharp.Image.Load(bytes); @@ -172,21 +172,21 @@ namespace BetterLyrics.WinUI3.Helper return memoryStream.ToArray(); } - //public static float GetAverageLuminance(CanvasBitmap bitmap) - //{ - // var pixels = bitmap.GetPixelBytes(); - // double sum = 0; - // for (int i = 0; i < pixels.Length; i += 4) - // { - // // BGRA - // byte b = pixels[i]; - // byte g = pixels[i + 1]; - // byte r = pixels[i + 2]; - // // 忽略A - // double y = 0.299 * r + 0.587 * g + 0.114 * b; - // sum += y / 255.0; - // } - // return (float)(sum / (pixels.Length / 4)); - //} + public static float GetAverageLuminance(CanvasBitmap bitmap) + { + var pixels = bitmap.GetPixelBytes(); + double sum = 0; + for (int i = 0; i < pixels.Length; i += 4) + { + // BGRA + byte b = pixels[i]; + byte g = pixels[i + 1]; + byte r = pixels[i + 2]; + // 忽略A + double y = 0.299 * r + 0.587 * g + 0.114 * b; + sum += y / 255.0; + } + return (float)(sum / (pixels.Length / 4)); + } } } diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/LanguageHelper.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/LanguageHelper.cs index 6f0751f..591546a 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/LanguageHelper.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/LanguageHelper.cs @@ -1,4 +1,5 @@ using BetterLyrics.WinUI3.Helper; +using CommunityToolkit.Mvvm.DependencyInjection; using Lyricify.Lyrics.Helpers.General; using NTextCat; using System; @@ -12,6 +13,7 @@ namespace BetterLyrics.WinUI3.Services { private static readonly RankedLanguageIdentifierFactory _factory = new(); private static readonly RankedLanguageIdentifier _identifier; + private static readonly ISettingsService _settingsService = Ioc.Default.GetRequiredService(); public static List SupportedTargetLanguages => [ @@ -106,5 +108,10 @@ namespace BetterLyrics.WinUI3.Services // 其他语言直接返回两字母代码 return code; } + + public static string GetUserTargetLanguageCode() + { + return SupportedTargetLanguages[_settingsService.SelectedTargetLanguageIndex].Code; + } } } diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/LyricsParser.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/LyricsParser.cs index 0a200c2..772d6c3 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/LyricsParser.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/LyricsParser.cs @@ -10,29 +10,21 @@ using System.Linq; using System.Text.RegularExpressions; using System.Xml.Linq; using Windows.Globalization.Fonts; +using LyricsData = BetterLyrics.WinUI3.Models.LyricsData; namespace BetterLyrics.WinUI3.Helper { public class LyricsParser { - private List> _multiLangLyricsLines = []; + private List _lyricsDataArr = []; - public List> Parse(string? raw, int durationMs) + public List Parse(string? raw, int? durationMs) { - _multiLangLyricsLines = []; + durationMs ??= (int)TimeSpan.FromMinutes(99).TotalMilliseconds; + _lyricsDataArr = []; if (raw == null) { - _multiLangLyricsLines.Add( - [ - new LyricsLine - { - StartMs = 0, - EndMs = durationMs, - OriginalText = App.ResourceLoader!.GetString("LyricsNotFound"), - CharTimings = [], - }, - ] - ); + _lyricsDataArr.Add(LyricsData.GetNotfoundPlaceholder(durationMs.Value)); } else { @@ -43,10 +35,10 @@ namespace BetterLyrics.WinUI3.Helper ParseLrc(raw); break; case LyricsFormat.Qrc: - ParseUsingLyricify(Lyricify.Lyrics.Parsers.QrcParser.Parse(raw).Lines); + ParseQQNeteaseKugou(Lyricify.Lyrics.Parsers.QrcParser.Parse(raw).Lines); break; case LyricsFormat.Krc: - ParseUsingLyricify(Lyricify.Lyrics.Parsers.KrcParser.Parse(raw).Lines); + ParseQQNeteaseKugou(Lyricify.Lyrics.Parsers.KrcParser.Parse(raw).Lines); break; case LyricsFormat.Ttml: ParseTtml(raw); @@ -55,8 +47,8 @@ namespace BetterLyrics.WinUI3.Helper break; } } - PostProcessLyricsLines(durationMs); - return _multiLangLyricsLines; + PostProcessLyricsLines(durationMs.Value); + return _lyricsDataArr; } private void ParseLrc(string raw) @@ -120,9 +112,9 @@ namespace BetterLyrics.WinUI3.Helper int languageCount = grouped.Max(g => g.Count()); // 初始化每种语言的歌词列表 - _multiLangLyricsLines.Clear(); + _lyricsDataArr.Clear(); for (int i = 0; i < languageCount; i++) - _multiLangLyricsLines.Add(new List()); + _lyricsDataArr.Add(new LyricsData()); // 遍历每个时间分组 foreach (var group in grouped) @@ -159,7 +151,7 @@ namespace BetterLyrics.WinUI3.Helper currentIndex += charText?.Length ?? 0; } } - _multiLangLyricsLines[langIdx].Add(line); + _lyricsDataArr[langIdx].LyricsLines.Add(line); } } } @@ -259,9 +251,9 @@ namespace BetterLyrics.WinUI3.Helper }); } } - _multiLangLyricsLines.Add(originalLines); + _lyricsDataArr.Add(new LyricsData(originalLines)); if (translationLines.Count > 0) - _multiLangLyricsLines.Add(translationLines); + _lyricsDataArr.Add(new LyricsData(translationLines)); } catch { @@ -330,7 +322,7 @@ namespace BetterLyrics.WinUI3.Helper return 0; } - private void ParseUsingLyricify(List? lines) + private void ParseQQNeteaseKugou(List? lines) { lines = lines?.Where(x => x.Text != string.Empty).ToList(); List lyricsLines = []; @@ -384,27 +376,27 @@ namespace BetterLyrics.WinUI3.Helper } } - _multiLangLyricsLines.Add(lyricsLines); + _lyricsDataArr.Add(new LyricsData(lyricsLines)); } private void PostProcessLyricsLines(int durationMs) { - for (int langIdx = 0; langIdx < _multiLangLyricsLines.Count; langIdx++) + for (int langIdx = 0; langIdx < _lyricsDataArr.Count; langIdx++) { - var linesInSingleLang = _multiLangLyricsLines[langIdx]; - for (int i = 0; i < linesInSingleLang.Count; i++) + var lines = _lyricsDataArr[langIdx].LyricsLines; + for (int i = 0; i < lines.Count; i++) { - if (i + 1 < linesInSingleLang.Count) + if (i + 1 < lines.Count) { - linesInSingleLang[i].EndMs = linesInSingleLang[i + 1].StartMs; + lines[i].EndMs = lines[i + 1].StartMs; } else { - linesInSingleLang[i].EndMs = durationMs; + lines[i].EndMs = durationMs; } // 修正 CharTimings 的 EndMs - var timings = linesInSingleLang[i].CharTimings; + var timings = lines[i].CharTimings; if (timings.Count > 0) { for (int j = 0; j < timings.Count; j++) @@ -415,21 +407,21 @@ namespace BetterLyrics.WinUI3.Helper } else { - timings[j].EndMs = linesInSingleLang[i].EndMs; + timings[j].EndMs = lines[i].EndMs; } } } } - if (linesInSingleLang.Count > 0) + if (lines.Count > 0) { - if (linesInSingleLang[0].StartMs > 0) + if (lines[0].StartMs > 0) { - linesInSingleLang.Insert( + lines.Insert( 0, new LyricsLine { StartMs = 0, - EndMs = linesInSingleLang[0].StartMs, + EndMs = lines[0].StartMs, OriginalText = "● ● ●", CharTimings = [], } diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/MetadataHelper.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/MetadataHelper.cs index c824dcc..c30c5c6 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/MetadataHelper.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/MetadataHelper.cs @@ -27,6 +27,8 @@ namespace BetterLyrics.WinUI3.Helper } public const string GithubUrl = "https://github.com/jayfunc/BetterLyrics"; + public const string QQGroupUrl = "https://qun.qq.com/universal-share/share?ac=1&authKey=4Q%2BYTq3wZldYpF5SbS5c19ECFsiYoLZFAIcBNNzYpBUtiEjaZ8sZ%2F%2BnFN0qw3lad&busi_data=eyJncm91cENvZGUiOiIxMDU0NzAwMzg4IiwidG9rZW4iOiJiVnhqemVYN0N5QVc3b1ZkR24wWmZOTUtvUkJoWm1JRWlaWW5iZnlBcXJtZUtGc2FFTHNlUlFZMi9iRm03cWF5IiwidWluIjoiMTM5NTczOTY2MCJ9&data=39UmAihyH_o6CZaOs7nk2mO_lz2ruODoDou6pxxh7utcxP4WF5sbDBDOPvZ_Wqfzeey4441anegsLYQJxkrBAA&svctype=4&tempid=h5_group_info"; + public const string DiscordUrl = "https://discord.gg/5yAQPnyCKv"; public static async Task GetBuildDate() { diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/PathHelper.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/PathHelper.cs index 88038d2..3453b6e 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/PathHelper.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/PathHelper.cs @@ -20,18 +20,26 @@ namespace BetterLyrics.WinUI3.Helper public static string LogDirectory => Path.Combine(CacheFolder, "logs"); public static string LogFilePattern => Path.Combine(LogDirectory, "log-.txt"); - public static string LrcLibLyricsCacheDirectory => Path.Combine(CacheFolder, "lrclib-lyrics"); - public static string NeteaseLyricsCacheDirectory => Path.Combine(CacheFolder, "netease-lyrics"); - public static string QQLyricsCacheDirectory => Path.Combine(CacheFolder, "qq-lyrics"); - public static string KugouLyricsCacheDirectory => Path.Combine(CacheFolder, "kugou-lyrics"); - public static string AmllTtmlDbLyricsCacheDirectory => Path.Combine(CacheFolder, "amll-ttml-db-lyrics"); - public static string AmllTtmlDbIndexPath => Path.Combine(CacheFolder, "amll-ttml-db-index.json"); + public static string LyricsCacheDirectory => Path.Combine(CacheFolder, "lyrics"); - public static string iTunesAlbumArtCacheDirectory => Path.Combine(CacheFolder, "itunes-album-art"); + public static string LrcLibLyricsCacheDirectory => Path.Combine(LyricsCacheDirectory, "lrclib"); + public static string NeteaseLyricsCacheDirectory => Path.Combine(LyricsCacheDirectory, "netease"); + public static string QQLyricsCacheDirectory => Path.Combine(LyricsCacheDirectory, "qq"); + public static string KugouLyricsCacheDirectory => Path.Combine(LyricsCacheDirectory, "kugou"); + public static string AmllTtmlDbLyricsCacheDirectory => Path.Combine(LyricsCacheDirectory, "amll-ttml-db"); + public static string AmllTtmlDbIndexPath => Path.Combine(LyricsCacheDirectory, "amll-ttml-db-index.json"); + public static string AmllTtmlDbLastUpdatedPath => Path.Combine(LyricsCacheDirectory, "amll-ttml-db-last-updated.txt"); + + public static string TranslationCacheDirectory => Path.Combine(CacheFolder, "translations"); + + public static string QQTranslationCacheDirectory => Path.Combine(TranslationCacheDirectory, "qq"); + + public static string AlbumArtCacheDirectory => Path.Combine(CacheFolder, "album-art"); + + public static string iTunesAlbumArtCacheDirectory => Path.Combine(AlbumArtCacheDirectory, "itunes"); public static void EnsureDirectories() { - Directory.CreateDirectory(LocalFolder); Directory.CreateDirectory(LogDirectory); Directory.CreateDirectory(LrcLibLyricsCacheDirectory); @@ -40,6 +48,8 @@ namespace BetterLyrics.WinUI3.Helper Directory.CreateDirectory(NeteaseLyricsCacheDirectory); Directory.CreateDirectory(AmllTtmlDbLyricsCacheDirectory); + Directory.CreateDirectory(QQTranslationCacheDirectory); + Directory.CreateDirectory(iTunesAlbumArtCacheDirectory); } } diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/StringHelper.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/StringHelper.cs index a10b6d5..bd6ce23 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/StringHelper.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/StringHelper.cs @@ -9,10 +9,11 @@ namespace BetterLyrics.WinUI3.Helper public static class StringHelper { // 去除空格、括号、下划线、横杠、点、大小写等 - public static string Normalize(this string s) => + public static string Normalize(string s) => new string(s .Where(c => char.IsLetterOrDigit(c)) .ToArray()) .ToLowerInvariant(); + public static string NewLine = "\n"; } } diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/LyricsData.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/LyricsData.cs new file mode 100644 index 0000000..da6de05 --- /dev/null +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/LyricsData.cs @@ -0,0 +1,95 @@ +using BetterLyrics.WinUI3.Helper; +using BetterLyrics.WinUI3.Services; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BetterLyrics.WinUI3.Models +{ + public class LyricsData + { + public List LyricsLines { get; set; } + public string? LanguageCode => LanguageHelper.DetectLanguageCode(WrappedOriginalText); + public string WrappedOriginalText => string.Join(StringHelper.NewLine, LyricsLines.Select(line => line.OriginalText)); + + public LyricsData() + { + LyricsLines = []; + } + + public LyricsData(List lyricsLines) + { + LyricsLines = lyricsLines; + } + + public void SetDisplayedTextAlongWith(LyricsData translationData) + { + int i = 0; + foreach (var line in LyricsLines) + { + if (i >= translationData.LyricsLines.Count) + { + line.DisplayedText = line.OriginalText; // No translation available, keep original text + } + else + { + line.DisplayedText = $"{line.OriginalText}{StringHelper.NewLine}({translationData.LyricsLines[i].OriginalText})"; + } + i++; + } + } + + public void SetDisplayedTextAlongWith(string translation) + { + List translationArr = translation.Split(StringHelper.NewLine).ToList(); + int i = 0; + foreach (var line in LyricsLines) + { + if (i >= translationArr.Count) + { + line.DisplayedText = line.OriginalText; // No translation available, keep original text + } + else + { + line.DisplayedText = $"{line.OriginalText}{StringHelper.NewLine}({translationArr[i]})"; + } + i++; + } + } + + public void SetDisplayedTextInOriginalText() + { + foreach (var line in LyricsLines) + { + line.DisplayedText = line.OriginalText; + } + } + + public static LyricsData GetNotfoundPlaceholder(int durationMs) + { + return new LyricsData([new LyricsLine + { + StartMs = 0, + EndMs = durationMs, + OriginalText = App.ResourceLoader!.GetString("LyricsNotFound"), + CharTimings = [], + }]); + } + + public static LyricsData GetLoadingPlaceholder() + { + return new LyricsData([ + new LyricsLine + { + StartMs = 0, + EndMs = (int)TimeSpan.FromMinutes(99).TotalMilliseconds, + OriginalText = "● ● ●", + DisplayedText = "● ● ●", + CharTimings = [], + }, + ]); + } + } +} diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/ISettingsService.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/ISettingsService.cs index 6de4158..b94f924 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/ISettingsService.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/ISettingsService.cs @@ -67,6 +67,7 @@ namespace BetterLyrics.WinUI3.Services LyricsFontWeight LyricsFontWeight { get; set; } LineRenderingType LyricsGlowEffectScope { get; set; } + LineRenderingType LyricsHighlightScope { get; set; } float LyricsLineSpacingFactor { get; set; } @@ -84,5 +85,7 @@ namespace BetterLyrics.WinUI3.Services bool IsTranslationEnabled { get; set; } LyricsDisplayType PreferredDisplayType { get; set; } + + int TimelineSyncThreshold { get; set; } } } diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/ITranslateService.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/ITranslateService.cs index 527fa8d..25a6282 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/ITranslateService.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/ITranslateService.cs @@ -1,4 +1,5 @@ -using System; +using BetterLyrics.WinUI3.Models; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -9,6 +10,8 @@ namespace BetterLyrics.WinUI3.Services { public interface ITranslateService { - Task TranslateAsync(string text, string targetLangCode, CancellationToken? token); + Task TranslateTextAsync(string text, string targetLangCode, CancellationToken? token); + + int SearchTranslatedLyricsItself(List lyricsDataArr); } } diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/LyricsSearchService.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/LyricsSearchService.cs index de097ac..d686d2c 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/LyricsSearchService.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/LyricsSearchService.cs @@ -15,6 +15,7 @@ using System.Text; using System.Text.Json; using System.Threading; using System.Threading.Tasks; +using Windows.Storage; namespace BetterLyrics.WinUI3.Services { @@ -39,6 +40,23 @@ namespace BetterLyrics.WinUI3.Services _amllTtmlDbHttpClient = new(); } + private static bool IsAmllTtmlDbIndexInvalid() + { + bool existed = File.Exists(PathHelper.AmllTtmlDbIndexPath); + + if (!existed) + { + return true; + } + else + { + long currentTs = DateTimeOffset.UtcNow.ToUnixTimeSeconds(); + string lastUpdatedStr = File.ReadAllText(PathHelper.AmllTtmlDbLastUpdatedPath); + long lastUpdated = Convert.ToInt64(lastUpdatedStr); + return currentTs - lastUpdated > 1 * 24 * 60 * 60; + } + } + public async Task DownloadAmllTtmlDbIndexAsync() { const string url = "https://raw.githubusercontent.com/Steve-xmh/amll-ttml-db/refs/heads/main/metadata/raw-lyrics-index.jsonl"; @@ -56,6 +74,9 @@ namespace BetterLyrics.WinUI3.Services ); await stream.CopyToAsync(fs); + long currentTs = DateTimeOffset.UtcNow.ToUnixTimeSeconds(); + File.WriteAllText(PathHelper.AmllTtmlDbLastUpdatedPath, currentTs.ToString()); + return true; } catch @@ -192,11 +213,10 @@ namespace BetterLyrics.WinUI3.Services private async Task SearchAmllTtmlDbAsync(string title, string artist) { - // 检索本地 JSONL 索引文件,查找 rawLyricFile - if (!File.Exists(PathHelper.AmllTtmlDbIndexPath)) + if (IsAmllTtmlDbIndexInvalid()) { var downloadOk = await DownloadAmllTtmlDbIndexAsync(); - if (!downloadOk || !File.Exists(PathHelper.AmllTtmlDbIndexPath)) + if (!downloadOk) return null; } diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/SettingsService.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/SettingsService.cs index 46726a9..ef2cebd 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/SettingsService.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/SettingsService.cs @@ -62,6 +62,7 @@ namespace BetterLyrics.WinUI3.Services private const string LyricsFontSizeKey = "LyricsFontSize"; private const string LyricsFontWeightKey = "LyricsFontWeightKey"; private const string LyricsGlowEffectScopeKey = "LyricsGlowEffectScope"; + private const string LyricsHighlightSopeKey = "LyricsHighlightSope"; private const string LyricsLineSpacingFactorKey = "LyricsLineSpacingFactor"; private const string LyricsSearchProvidersInfoKey = "LyricsSearchProvidersInfo"; private const string AlbumArtSearchProvidersInfoKey = "AlbumArtSearchProvidersInfo"; @@ -80,6 +81,8 @@ namespace BetterLyrics.WinUI3.Services private const string LyricsScrollEasingTypeKey = "LyricsScrollEasingType"; private const string LyricsScrollDurationKey = "LyricsScrollDuration"; + public const string TimelineSyncThresholdKey = "TimelineSyncThreshold"; + private readonly ApplicationDataContainer _localSettings; public SettingsService() @@ -155,7 +158,7 @@ namespace BetterLyrics.WinUI3.Services SetDefault(IsCoverOverlayEnabledKey, true); SetDefault(IsDynamicCoverOverlayEnabledKey, true); SetDefault(CoverOverlayOpacityKey, 100); // 100 % = 1.0 - SetDefault(CoverOverlayBlurAmountKey, 200); + SetDefault(CoverOverlayBlurAmountKey, 100); SetDefault(CoverImageRadiusKey, 12); // 12 % // Lyrics SetDefault(LyricsAlignmentTypeKey, (int)TextAlignmentType.Center); @@ -177,7 +180,8 @@ namespace BetterLyrics.WinUI3.Services SetDefault(LyricsLineSpacingFactorKey, 0.5f); SetDefault(LyricsVerticalEdgeOpacityKey, 0); SetDefault(IsLyricsGlowEffectEnabledKey, true); - SetDefault(LyricsGlowEffectScopeKey, (int)LineRenderingType.CurrentCharOnly); + SetDefault(LyricsGlowEffectScopeKey, (int)LineRenderingType.CurrentChar); + SetDefault(LyricsHighlightSopeKey, (int)LineRenderingType.LineStartToCurrentChar); SetDefault(IsFanLyricsEnabledKey, false); SetDefault(LibreTranslateServerKey, ""); @@ -190,6 +194,7 @@ namespace BetterLyrics.WinUI3.Services SetDefault(LyricsScrollEasingTypeKey, (int)EasingType.EaseInOutQuad); SetDefault(LyricsScrollDurationKey, 500); // 500ms + SetDefault(TimelineSyncThresholdKey, 0); // 0ms } public EasingType LyricsScrollEasingType @@ -419,6 +424,12 @@ namespace BetterLyrics.WinUI3.Services set => SetValue(LyricsGlowEffectScopeKey, (int)value); } + public LineRenderingType LyricsHighlightScope + { + get => (LineRenderingType)GetValue(LyricsHighlightSopeKey); + set => SetValue(LyricsHighlightSopeKey, (int)value); + } + public float LyricsLineSpacingFactor { get => GetValue(LyricsLineSpacingFactorKey); @@ -506,6 +517,12 @@ namespace BetterLyrics.WinUI3.Services set => SetValue(IgnoreFullscreenWindowKey, value); } + public int TimelineSyncThreshold + { + get => GetValue(TimelineSyncThresholdKey); + set => SetValue(TimelineSyncThresholdKey, value); + } + private T? GetValue(string key) { if (_localSettings.Values.TryGetValue(key, out object? value)) diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/TranslateService.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/TranslateService.cs index 474c7de..ab40cb8 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/TranslateService.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/TranslateService.cs @@ -1,6 +1,7 @@ using BetterLyrics.WinUI3.Helper; using BetterLyrics.WinUI3.Models; using BetterLyrics.WinUI3.Serialization; +using BetterLyrics.WinUI3.ViewModels; using Lyricify.Lyrics.Helpers.General; using System; using System.Collections.Generic; @@ -13,19 +14,16 @@ using System.Threading.Tasks; namespace BetterLyrics.WinUI3.Services { - public class TranslateService : ITranslateService + public class TranslateService : BaseViewModel, ITranslateService { - private readonly ISettingsService _settingsService; - private readonly HttpClient _httpClient; - public TranslateService(ISettingsService settingsService) + public TranslateService(ISettingsService settingsService) :base(settingsService) { - _settingsService = settingsService; _httpClient = new HttpClient(); } - public async Task TranslateAsync(string text, string targetLangCode, CancellationToken? token) + public async Task TranslateTextAsync(string text, string targetLangCode, CancellationToken? token) { if (string.IsNullOrWhiteSpace(text)) { @@ -46,6 +44,19 @@ namespace BetterLyrics.WinUI3.Services return ChineseConverter.ConvertToTraditionalChinese(text); } + if (string.IsNullOrEmpty(_settingsService.LibreTranslateServer)) + { + _dispatcherQueue.TryEnqueue(() => + { + App.Current.LyricsWindowNotificationPanel?.Notify( + App.ResourceLoader!.GetString("TranslateServerNotSet"), + Microsoft.UI.Xaml.Controls.InfoBarSeverity.Warning + ); + }); + + throw new InvalidOperationException("LibreTranslate server URL is not configured."); + } + var url = $"{_settingsService.LibreTranslateServer}/translate"; var response = await _httpClient.PostAsync(url, new FormUrlEncodedContent( [ @@ -62,5 +73,21 @@ namespace BetterLyrics.WinUI3.Services var result = System.Text.Json.JsonSerializer.Deserialize(json, SourceGenerationContext.Default.TranslateResponse); return result?.TranslatedText ?? string.Empty; } + + public int SearchTranslatedLyricsItself(List lyricsDataArr) + { + string targetLangCode = LanguageHelper.GetUserTargetLanguageCode(); + if (lyricsDataArr.Count > 1) + { + for (int i = 1; i < lyricsDataArr.Count; i++) + { + if (lyricsDataArr[i].LanguageCode == targetLangCode) + { + return i; // Translation lyrics data found + } + } + } + return -1; // No translation lyrics data found + } } } diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/en-US/Resources.resw b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/en-US/Resources.resw index ea523a6..6132af7 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/en-US/Resources.resw +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/en-US/Resources.resw @@ -310,7 +310,7 @@ No music playing now - Developer options + Advanced options Play test music @@ -459,13 +459,10 @@ Extra Black - - Whole lyrics - - + Current line - + Current char @@ -717,4 +714,25 @@ Ease-in-out cubic + + Current line start to current char + + + Highlight scope + + + Lyrics timeline sync threshold + + + If the lyrics progress is jittery, try increasing this threshold; changing this value can cause lyrics synchronization to deviate + + + QQ feedback & chat group + + + Discord + + + Join now + \ No newline at end of file diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ja-JP/Resources.resw b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ja-JP/Resources.resw index 93b3b0d..002b876 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ja-JP/Resources.resw +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ja-JP/Resources.resw @@ -310,7 +310,7 @@ 今は音楽が再生されていません - 開発者オプション + 高度なオプション テスト音楽を再生します @@ -459,13 +459,10 @@ 余分な黒 - - 歌詞全体 - - + 現在の行 - + 現在の文字 @@ -717,4 +714,25 @@ 3つの遅いインとアウト + + 現在のラインが現在の文字から始まります + + + ハイライトスコープ + + + 歌詞タイムライン同期しきい値 + + + 歌詞の進行が不安定な場合は、このしきい値を増やしてみてください。この値を変更すると、歌詞の同期が逸脱する可能性があります + + + QQフィードバック&チャットグループ + + + Discord + + + 今すぐ参加してください + \ 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 8bc6aea..b6c61de 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ko-KR/Resources.resw +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/ko-KR/Resources.resw @@ -310,7 +310,7 @@ 지금 음악이 재생되지 않습니다 - 개발자 옵션 + 고급 옵션 테스트 음악을 재생하십시오 @@ -459,13 +459,10 @@ 여분의 검은 색 - - 전체 가사 - - + 현재 라인 - + 현재 숯 @@ -717,4 +714,25 @@ 세 번 느리게 안팎으로 + + 현재 라인은 현재 숯으로 시작합니다 + + + 하이라이트 범위 + + + 가사 타임 라인 동기화 임계 값 + + + 가사 진행 상황이 불안하다면이 임계 값을 높이십시오. 이 값을 변경하면 가사가 동기화 될 수 있습니다 + + + QQ 피드백 및 채팅 그룹 + + + Discord + + + 지금 가입하십시오 + \ 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 f6215a5..7038654 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-CN/Resources.resw +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-CN/Resources.resw @@ -310,7 +310,7 @@ 当前没有正在播放的音乐 - 开发者选项 + 高级选项 播放测试音乐 @@ -459,13 +459,10 @@ 超黑 - - 全部歌词 - - + 当前行 - + 当前字符 @@ -717,4 +714,25 @@ 三次缓入缓出 + + 当前歌词开始到当前字符 + + + 高亮显示范围 + + + 歌词时间轴同步阈值 + + + 当歌词进度抖动时,请尝试增加该阈值;更改此值会导致歌词同步有偏差 + + + QQ 反馈交流群 + + + Discord + + + 立即加入 + \ 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 09ea241..e210a20 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-TW/Resources.resw +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Strings/zh-TW/Resources.resw @@ -310,7 +310,7 @@ 目前沒有正在播放的音樂 - 開發者選項 + 高級選項 播放測試音樂 @@ -459,13 +459,10 @@ 超黑 - - 全部歌詞 - - + 目前行 - + 目前字元 @@ -717,4 +714,25 @@ 三次緩入緩出 + + 當前歌詞開始到當前字符 + + + 高亮顯示範圍 + + + 歌詞時間軸同步閾值 + + + 當歌詞進度抖動時,請嘗試增加該閾值;更改此值會導致歌詞同步偏差 + + + QQ 回饋交流群 + + + Discord + + + 立即加入 + \ No newline at end of file diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/BaseWindowViewModel.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/BaseWindowViewModel.cs index fdc961a..6b86c24 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/BaseWindowViewModel.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/BaseWindowViewModel.cs @@ -11,8 +11,7 @@ using Microsoft.UI.Xaml; namespace BetterLyrics.WinUI3.ViewModels { - public partial class BaseWindowViewModel : BaseViewModel + public partial class BaseWindowViewModel(ISettingsService settingsService) : BaseViewModel(settingsService) { - public BaseWindowViewModel(ISettingsService settingsService) : base(settingsService) { } } } diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsPageViewModel.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsPageViewModel.cs index 77ad185..5401973 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsPageViewModel.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsPageViewModel.cs @@ -15,7 +15,7 @@ using System.Threading.Tasks; namespace BetterLyrics.WinUI3.ViewModels { - public partial class LyricsPageViewModel : BaseViewModel, IRecipient>, IRecipient> + public partial class LyricsPageViewModel : BaseViewModel, IRecipient> { private readonly IPlaybackService _playbackService; @@ -23,15 +23,12 @@ namespace BetterLyrics.WinUI3.ViewModels public LyricsPageViewModel(ISettingsService settingsService, IPlaybackService playbackService) : base(settingsService) { - LyricsFontSize = _settingsService.LyricsFontSize; + IsFirstRun = _settingsService.IsFirstRun; IsTranslationEnabled = _settingsService.IsTranslationEnabled; PreferredDisplayType = _settingsService.PreferredDisplayType; _playbackService = playbackService; _playbackService.SongInfoChanged += PlaybackService_SongInfoChanged; - - - IsFirstRun = _settingsService.IsFirstRun; } private void PlaybackService_SongInfoChanged(object? sender, Events.SongInfoChangedEventArgs e) @@ -51,12 +48,6 @@ namespace BetterLyrics.WinUI3.ViewModels [ObservableProperty] public partial bool IsWelcomeTeachingTipOpen { get; set; } - [ObservableProperty] - public partial Visibility BottomCommandGridVisibility { get; set; } = Visibility.Visible; - - [ObservableProperty] - public partial int LyricsFontSize { get; set; } - [ObservableProperty] public partial LyricsDisplayType PreferredDisplayType { get; set; } @@ -69,7 +60,7 @@ namespace BetterLyrics.WinUI3.ViewModels [ObservableProperty] [NotifyPropertyChangedRecipients] - public partial bool IsTranslationEnabled { get; set; } = false; + public partial bool IsTranslationEnabled { get; set; } partial void OnIsTranslationEnabledChanged(bool value) { @@ -98,19 +89,8 @@ namespace BetterLyrics.WinUI3.ViewModels } } - public void Receive(PropertyChangedMessage message) - { - if (message.Sender is SettingsPageViewModel) - { - if (message.PropertyName == nameof(SettingsPageViewModel.LyricsFontSize)) - { - LyricsFontSize = message.NewValue; - } - } - } - [RelayCommand] - private void OpenSettingsWindow() + private static void OpenSettingsWindow() { WindowHelper.OpenOrShowWindow(); } diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel.Ctor.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel.Ctor.cs index cfcb2b9..daaf80c 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel.Ctor.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel.Ctor.cs @@ -33,6 +33,7 @@ namespace BetterLyrics.WinUI3.ViewModels _lyricsBlurAmount = _settingsService.LyricsBlurAmount; _isLyricsGlowEffectEnabled = _settingsService.IsLyricsGlowEffectEnabled; _lyricsGlowEffectScope = _settingsService.LyricsGlowEffectScope; + _lyricsHighlightScope = _settingsService.LyricsHighlightScope; _customBgFontColor = _settingsService.LyricsCustomBgFontColor; _customFgFontColor = _settingsService.LyricsCustomFgFontColor; @@ -45,6 +46,8 @@ namespace BetterLyrics.WinUI3.ViewModels _targetLanguageIndex = _settingsService.SelectedTargetLanguageIndex; _titleTextFormat.HorizontalAlignment = _artistTextFormat.HorizontalAlignment = _settingsService.SongInfoAlignmentType.ToCanvasHorizontalAlignment(); + _timelineSyncThreshold = _settingsService.TimelineSyncThreshold; + _canvasYScrollTransition.SetDuration(_settingsService.LyricsScrollDuration / 1000f); _canvasYScrollTransition.SetEasingType(_settingsService.LyricsScrollEasingType); @@ -56,7 +59,7 @@ namespace BetterLyrics.WinUI3.ViewModels _playbackService.AlbumArtChangedChanged += PlaybackService_AlbumArtChangedChanged; _playbackService.PositionChanged += PlaybackService_PositionChanged; - UpdateFontColor(); + UpdateColorConfig(); } } } diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel.Draw.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel.Draw.cs index 3b42bc4..23b57d3 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel.Draw.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel.Draw.cs @@ -67,9 +67,9 @@ namespace BetterLyrics.WinUI3.ViewModels if (_isDebugOverlayEnabled) { - var currentPlayingLine = _multiLangLyrics - .SafeGet(_langIndex) - ?.SafeGet(_playingLineIndex); + var currentPlayingLine = _lyricsDataArr + .ElementAtOrDefault(_langIndex) + ?.LyricsLines.ElementAtOrDefault(_playingLineIndex); if (currentPlayingLine != null) { @@ -85,7 +85,7 @@ namespace BetterLyrics.WinUI3.ViewModels $"Cur playing {_playingLineIndex}, char start idx {charStartIndex}, length {charLength}, prog {charProgress}\n" + $"Visible lines [{_startVisibleLineIndex}, {_endVisibleLineIndex}]\n" + $"Cur time {_totalTime + _positionOffset}\n" + - $"Lang size {_multiLangLyrics.Count}\n" + + $"Lang size {_lyricsDataArr.Count}\n" + $"Song duration {TimeSpan.FromMilliseconds(SongInfo?.DurationMs ?? 0)}", new Vector2(10, 10), ThemeTypeSent == Microsoft.UI.Xaml.ElementTheme.Light ? Colors.Black : Colors.White @@ -118,13 +118,13 @@ namespace BetterLyrics.WinUI3.ViewModels float x = _canvasWidth / 2 - imageWidth * scaleFactor / 2; float y = _canvasHeight / 2 - imageHeight * scaleFactor / 2; - // Source: https://zhuanlan.zhihu.com/p/37178216 - float bright = _lyricsBgBrightnessTransition.Value / 1f * 2f; // 明度参数,范围在0.0f到2.0f之间 + // Original source: https://zhuanlan.zhihu.com/p/37178216 + float gain = _lyricsBgBrightnessTransition.Value; - float whiteX = Math.Min(2 - bright, 1); - float whiteY = 1f; - float blackX = Math.Max(1 - bright, 0); - float blackY = 0f; + float whiteX = 1 - 0.5f * gain; + float whiteY = 0.5f + 0.5f * gain; + float blackX = 0.5f - 0.5f * gain; + float blackY = 0 + 0.5f * gain; ds.DrawImage(new OpacityEffect { @@ -274,9 +274,9 @@ namespace BetterLyrics.WinUI3.ViewModels private void DrawBlurredLyrics(ICanvasAnimatedControl control, CanvasDrawingSession ds) { - var currentPlayingLine = _multiLangLyrics - .SafeGet(_langIndex) - ?.SafeGet(_playingLineIndex); + var currentPlayingLine = _lyricsDataArr + .ElementAtOrDefault(_langIndex) + ?.LyricsLines.ElementAtOrDefault(_playingLineIndex); if (currentPlayingLine == null) { @@ -285,7 +285,7 @@ namespace BetterLyrics.WinUI3.ViewModels for (int i = _startVisibleLineIndex; i <= _endVisibleLineIndex; i++) { - var line = _multiLangLyrics.SafeGet(_langIndex)?.SafeGet(i); + var line = _lyricsDataArr.ElementAtOrDefault(_langIndex)?.LyricsLines.ElementAtOrDefault(i); if (line == null) { @@ -486,8 +486,9 @@ namespace BetterLyrics.WinUI3.ViewModels Source = fgLyrics, AlphaMask = _lyricsGlowEffectScope switch { - LineRenderingType.UntilCurrentChar => mask, - LineRenderingType.CurrentCharOnly => highlightMask, + LineRenderingType.CurrentChar => highlightMask, + LineRenderingType.LineStartToCurrentChar => mask, + LineRenderingType.CurrentLine => fgLyrics, _ => mask, }, }, @@ -498,7 +499,13 @@ namespace BetterLyrics.WinUI3.ViewModels Foreground = new AlphaMaskEffect { Source = fgLyrics, - AlphaMask = mask, + AlphaMask = _lyricsHighlightScope switch + { + LineRenderingType.CurrentChar => highlightMask, + LineRenderingType.LineStartToCurrentChar => mask, + LineRenderingType.CurrentLine => fgLyrics, + _ => mask, + }, }, }, Opacity = line.HighlightOpacityTransition.Value * _lyricsOpacityTransition.Value, diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel.Messages.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel.Messages.cs index 3c9d781..d3e6696 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel.Messages.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel.Messages.cs @@ -57,8 +57,6 @@ namespace BetterLyrics.WinUI3.ViewModels } } - // Receive methods for handling messages from other view models - public void Receive(PropertyChangedMessage message) { if (message.Sender is SettingsPageViewModel) @@ -86,12 +84,12 @@ namespace BetterLyrics.WinUI3.ViewModels if (message.PropertyName == nameof(LyricsWindowViewModel.IsDockMode)) { _isDockMode = message.NewValue; - UpdateFontColor(); + UpdateColorConfig(); } else if (message.PropertyName == nameof(LyricsWindowViewModel.IsDesktopMode)) { _isDesktopMode = message.NewValue; - UpdateFontColor(); + UpdateColorConfig(); } else if (message.PropertyName == nameof(LyricsWindowViewModel.IsLyricsWindowLocked)) { @@ -122,7 +120,7 @@ namespace BetterLyrics.WinUI3.ViewModels { _immersiveBgTransition.StartTransition(message.NewValue); _environmentalColor = message.NewValue; - UpdateFontColor(); + UpdateColorConfig(); } } else if (message.Sender is SettingsPageViewModel) @@ -130,17 +128,17 @@ namespace BetterLyrics.WinUI3.ViewModels if (message.PropertyName == nameof(SettingsPageViewModel.LyricsCustomBgFontColor)) { _customBgFontColor = message.NewValue; - UpdateFontColor(); + UpdateColorConfig(); } else if (message.PropertyName == nameof(SettingsPageViewModel.LyricsCustomFgFontColor)) { _customFgFontColor = message.NewValue; - UpdateFontColor(); + UpdateColorConfig(); } else if (message.PropertyName == nameof(SettingsPageViewModel.LyricsCustomStrokeFontColor)) { _customStrokeFontColor = message.NewValue; - UpdateFontColor(); + UpdateColorConfig(); } } } @@ -202,6 +200,10 @@ namespace BetterLyrics.WinUI3.ViewModels { _canvasYScrollTransition.SetDuration(message.NewValue / 1000f); } + else if (message.PropertyName == nameof(SettingsPageViewModel.TimelineSyncThreshold)) + { + _timelineSyncThreshold = message.NewValue; + } } else if (message.Sender is LyricsPageViewModel) { @@ -220,6 +222,10 @@ namespace BetterLyrics.WinUI3.ViewModels { _lyricsGlowEffectScope = message.NewValue; } + else if (message.PropertyName == nameof(SettingsPageViewModel.LyricsHighlightScope)) + { + _lyricsHighlightScope = message.NewValue; + } } } @@ -251,17 +257,17 @@ namespace BetterLyrics.WinUI3.ViewModels if (message.PropertyName == nameof(SettingsPageViewModel.LyricsBgFontColorType)) { _lyricsBgFontColorType = message.NewValue; - UpdateFontColor(); + UpdateColorConfig(); } else if (message.PropertyName == nameof(SettingsPageViewModel.LyricsFgFontColorType)) { _lyricsFgFontColorType = message.NewValue; - UpdateFontColor(); + UpdateColorConfig(); } else if (message.PropertyName == nameof(SettingsPageViewModel.LyricsStrokeFontColorType)) { _lyricsStrokeFontColorType = message.NewValue; - UpdateFontColor(); + UpdateColorConfig(); } } } @@ -285,7 +291,7 @@ namespace BetterLyrics.WinUI3.ViewModels if (message.PropertyName == nameof(SettingsPageViewModel.LyricsBackgroundTheme)) { _lyricsBgTheme = message.NewValue; - UpdateFontColor(); + UpdateColorConfig(); } } } diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel.Update.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel.Update.cs index 2140ff9..1e9d106 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel.Update.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel.Update.cs @@ -7,6 +7,7 @@ using Microsoft.Graphics.Canvas.UI.Xaml; using Microsoft.UI; using Microsoft.UI.Xaml; using System; +using System.Linq; using System.Numerics; using Windows.UI; @@ -135,9 +136,9 @@ namespace BetterLyrics.WinUI3.ViewModels float y = 0; // Init Positions - for (int i = 0; i < _multiLangLyrics.SafeGet(_langIndex)?.Count; i++) + for (int i = 0; i < _lyricsDataArr.ElementAtOrDefault(_langIndex)?.LyricsLines.Count; i++) { - var line = _multiLangLyrics[_langIndex].SafeGet(i); + var line = _lyricsDataArr[_langIndex].LyricsLines.ElementAtOrDefault(i); if (line == null) { @@ -178,7 +179,7 @@ namespace BetterLyrics.WinUI3.ViewModels if ((!_isPlayingLineChanged && forceScroll) || _isPlayingLineChanged) { - LyricsLine? currentPlayingLine = _multiLangLyrics.SafeGet(_langIndex)?.SafeGet(_playingLineIndex); + LyricsLine? currentPlayingLine = _lyricsDataArr.ElementAtOrDefault(_langIndex)?.LyricsLines.ElementAtOrDefault(_playingLineIndex); if (currentPlayingLine == null) return; @@ -186,7 +187,7 @@ namespace BetterLyrics.WinUI3.ViewModels if (playingTextLayout == null) return; - float? targetYScrollOffset = (float?)(-currentPlayingLine!.Position.Y + _multiLangLyrics.SafeGet(_langIndex)?[0].Position.Y - playingTextLayout.LayoutBounds.Height / 2); + float? targetYScrollOffset = (float?)(-currentPlayingLine!.Position.Y + _lyricsDataArr.ElementAtOrDefault(_langIndex)?.LyricsLines[0].Position.Y - playingTextLayout.LayoutBounds.Height / 2); if (!targetYScrollOffset.HasValue) return; @@ -201,7 +202,7 @@ namespace BetterLyrics.WinUI3.ViewModels // Update visible line indices for (int i = startLineIndex; i <= endLineIndex; i++) { - var line = _multiLangLyrics.SafeGet(_langIndex)?.SafeGet(i); + var line = _lyricsDataArr.ElementAtOrDefault(_langIndex)?.LyricsLines.ElementAtOrDefault(i); if (line == null || line.CanvasTextLayout == null) { @@ -249,7 +250,7 @@ namespace BetterLyrics.WinUI3.ViewModels _endVisibleLineIndex = endVisibleLineIndex; } - private void UpdateFontColor() + private void UpdateColorConfig() { if (_isDesktopMode || _isDockMode) { @@ -360,15 +361,15 @@ namespace BetterLyrics.WinUI3.ViewModels private void UpdateLinesProps() { - var currentPlayingLine = _multiLangLyrics - .SafeGet(_langIndex) - ?.SafeGet(_playingLineIndex); + var currentPlayingLine = _lyricsDataArr + .ElementAtOrDefault(_langIndex) + ?.LyricsLines.ElementAtOrDefault(_playingLineIndex); if (currentPlayingLine == null) return; for (int i = _startVisibleLineIndex; i <= _endVisibleLineIndex; i++) { - var line = _multiLangLyrics.SafeGet(_langIndex)?.SafeGet(i); + var line = _lyricsDataArr.ElementAtOrDefault(_langIndex)?.LyricsLines.ElementAtOrDefault(i); if (line == null) continue; diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel.cs index b5b464f..10f647b 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel.cs @@ -72,6 +72,7 @@ namespace BetterLyrics.WinUI3.ViewModels private ElementTheme _lyricsBgTheme; private LineRenderingType _lyricsGlowEffectScope; + private LineRenderingType _lyricsHighlightScope; private int _lyricsFontStrokeWidth; private int _lyricsFontSize; @@ -134,11 +135,13 @@ namespace BetterLyrics.WinUI3.ViewModels private int _langIndex = 0; - private List> _multiLangLyrics = []; + private List _lyricsDataArr = []; private List _translationList = []; private bool _isTranslationEnabled = false; private int _targetLanguageIndex = 6; + private int _timelineSyncThreshold; + private CanvasTextFormat _lyricsTextFormat = new() { HorizontalAlignment = CanvasHorizontalAlignment.Left, @@ -184,9 +187,9 @@ namespace BetterLyrics.WinUI3.ViewModels private int GetCurrentPlayingLineIndex() { - for (int i = 0; i < _multiLangLyrics.SafeGet(_langIndex)?.Count; i++) + for (int i = 0; i < _lyricsDataArr.ElementAtOrDefault(_langIndex)?.LyricsLines.Count; i++) { - var line = _multiLangLyrics.SafeGet(_langIndex)?[i]; + var line = _lyricsDataArr.ElementAtOrDefault(_langIndex)?.LyricsLines[i]; if (line == null) { continue; @@ -262,14 +265,14 @@ namespace BetterLyrics.WinUI3.ViewModels { if ( SongInfo == null - || _multiLangLyrics.SafeGet(_langIndex) == null - || _multiLangLyrics[_langIndex].Count == 0 + || _lyricsDataArr.ElementAtOrDefault(_langIndex) == null + || _lyricsDataArr[_langIndex].LyricsLines.Count == 0 ) { return new Tuple(-1, -1); } - return new Tuple(0, _multiLangLyrics[_langIndex].Count - 1); + return new Tuple(0, _lyricsDataArr[_langIndex].LyricsLines.Count - 1); } private void LibWatcherService_MusicLibraryFilesChanged(object? sender, LibChangedEventArgs e) @@ -288,7 +291,10 @@ namespace BetterLyrics.WinUI3.ViewModels private void PlaybackService_PositionChanged(object? sender, PositionChangedEventArgs e) { - _totalTime = e.Position; + if (Math.Abs(_totalTime.TotalMilliseconds - e.Position.TotalMilliseconds) >= _timelineSyncThreshold) + { + _totalTime = e.Position; + } } private void PlaybackService_SongInfoChanged(object? sender, SongInfoChangedEventArgs e) @@ -330,7 +336,7 @@ namespace BetterLyrics.WinUI3.ViewModels _albumArtBgTransition.Reset(0f); _albumArtBgTransition.StartTransition(1f); - UpdateFontColor(); + UpdateColorConfig(); } } @@ -341,93 +347,55 @@ namespace BetterLyrics.WinUI3.ViewModels { _ = _refreshLyricsRunner.RunAsync(async token => { - await ShowTranslationsAsync(token); + await SetDisplayedAlongWithTranslationsAsync(token); IsTranslating = false; + _isLayoutChanged = true; }); } else { - ShowOriginalsOnly(); + _lyricsDataArr[0].SetDisplayedTextInOriginalText(); IsTranslating = false; + _isLayoutChanged = true; } } - private async Task ShowTranslationsAsync(CancellationToken token) + private async Task SetDisplayedAlongWithTranslationsAsync(CancellationToken token) { _logger.LogInformation("Showing translation for lyrics..."); - string targetLangCode = LanguageHelper.SupportedTargetLanguages[_settingsService.SelectedTargetLanguageIndex].Code; - var originalText = string.Join("\n", _multiLangLyrics.FirstOrDefault()?.Select(x => x.OriginalText) ?? []); + string targetLangCode = LanguageHelper.GetUserTargetLanguageCode(); + string originalText = _lyricsDataArr[0].WrappedOriginalText; string? originalLangCode = LanguageHelper.DetectLanguageCode(originalText); if (originalLangCode == targetLangCode) { _logger.LogInformation("Original lyrics already in target language: {TargetLangCode}", targetLangCode); - ShowOriginalsOnly(); - return; - } - - // Try get translation from itself first - if (_multiLangLyrics.Count > 1) - { - foreach (var langLyrics in _multiLangLyrics.Skip(1)) - { - var translationList = langLyrics.Select(x => x.OriginalText).ToList(); - var translation = string.Join("\n", translationList); - if (LanguageHelper.DetectLanguageCode(translation) == targetLangCode) - { - _translationList = translationList; - break; - } - } + _lyricsDataArr[0].SetDisplayedTextInOriginalText(); } else { - if (string.IsNullOrEmpty(_settingsService.LibreTranslateServer)) + // Try get translation from itself first + int found = _translateService.SearchTranslatedLyricsItself(_lyricsDataArr); + if (found >= 0) { - _dispatcherQueue.TryEnqueue(() => - { - App.Current.LyricsWindowNotificationPanel?.Notify( - App.ResourceLoader!.GetString("TranslateServerNotSet"), - Microsoft.UI.Xaml.Controls.InfoBarSeverity.Warning - ); - }); - ShowOriginalsOnly(); - return; + _lyricsDataArr[0].SetDisplayedTextAlongWith(_lyricsDataArr[found]); } - - var translated = await _translateService.TranslateAsync(originalText, targetLangCode, token); - token.ThrowIfCancellationRequested(); - - _translationList = translated.Split('\n').ToList(); - } - - int i = 0; - foreach (var line in _multiLangLyrics.FirstOrDefault() ?? []) - { - line.DisplayedText = i < _translationList.Count ? $"{line.OriginalText}\n{_translationList[i]}" : line.OriginalText; - i++; - } - _isLayoutChanged = true; - } - - private void ShowOriginalsOnly() - { - _logger.LogInformation("Showing original lyrics only, translation disabled."); - foreach (var langLyrics in _multiLangLyrics) - { - foreach (var line in langLyrics) + else { - line.DisplayedText = line.OriginalText; + var translated = await _translateService.TranslateTextAsync(originalText, targetLangCode, token); + token.ThrowIfCancellationRequested(); + + _lyricsDataArr[0].SetDisplayedTextAlongWith(translated); } } - _isLayoutChanged = true; } private async Task RefreshLyricsAsync(CancellationToken token) { _logger.LogInformation("Refreshing lyrics..."); - SetLyricsLoadingPlaceholder(); + _lyricsDataArr = [LyricsData.GetLoadingPlaceholder()]; + _isLayoutChanged = true; string? lyricsRaw = null; @@ -448,33 +416,14 @@ namespace BetterLyrics.WinUI3.ViewModels _logger.LogWarning("SongInfo is null, cannot search lyrics."); } - _multiLangLyrics = new LyricsParser().Parse( - lyricsRaw, - (int?)SongInfo?.DurationMs ?? (int)TimeSpan.FromMinutes(99).TotalMilliseconds - ); - _logger.LogInformation("Parsed lyrics: {MultiLangLyricsCount} languages", _multiLangLyrics.Count); + _lyricsDataArr = new LyricsParser().Parse(lyricsRaw, (int?)SongInfo?.DurationMs); + _logger.LogInformation("Parsed lyrics: {MultiLangLyricsCount} languages", _lyricsDataArr.Count); // This ensures that original lyrics are always shown while waiting for translations - ShowOriginalsOnly(); - UpdateTranslations(); - } - - private void SetLyricsLoadingPlaceholder() - { - _multiLangLyrics = []; - _multiLangLyrics.Add( - [ - new LyricsLine - { - StartMs = 0, - EndMs = (int)TimeSpan.FromMinutes(99).TotalMilliseconds, - OriginalText = "● ● ●", - DisplayedText = "● ● ●", - CharTimings = [], - }, - ] - ); + _lyricsDataArr[0].SetDisplayedTextInOriginalText(); _isLayoutChanged = true; + + UpdateTranslations(); } } } diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsWindowViewModel.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsWindowViewModel.cs index a5ae94c..92add0a 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsWindowViewModel.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsWindowViewModel.cs @@ -1,7 +1,5 @@ // 2025/6/23 by Zhe Fang -using System.Diagnostics; -using System.Threading.Tasks; using BetterLyrics.WinUI3.Enums; using BetterLyrics.WinUI3.Helper; using BetterLyrics.WinUI3.Models; @@ -15,8 +13,11 @@ using CommunityToolkit.Mvvm.Messaging.Messages; using Microsoft.UI; using Microsoft.UI.Windowing; using Microsoft.UI.Xaml; +using System.Diagnostics; +using System.Threading.Tasks; using Windows.UI; using WinRT.Interop; +using WinUIEx; namespace BetterLyrics.WinUI3 { @@ -26,7 +27,8 @@ namespace BetterLyrics.WinUI3 IRecipient>, IRecipient> { - private ForegroundWindowWatcher? _watcherHelper = null; + private ForegroundWindowWatcher? _windowWatcher = null; + private bool _ignoreFullscreenWindow = false; public LyricsWindowViewModel(ISettingsService settingsService) : base(settingsService) { @@ -49,24 +51,16 @@ namespace BetterLyrics.WinUI3 [NotifyPropertyChangedRecipients] public partial bool IsLyricsWindowLocked { get; set; } = false; - [ObservableProperty] - public partial bool ShowInfoBar { get; set; } = false; - [ObservableProperty] public partial ElementTheme ThemeType { get; set; } = ElementTheme.Default; [ObservableProperty] public partial double TitleBarFontSize { get; set; } = 11; - [ObservableProperty] - public partial double TitleBarHeight { get; set; } = 36; - [ObservableProperty] [NotifyPropertyChangedRecipients] public partial bool IsMouseWithinWindow { get; set; } = false; - private bool _ignoreFullscreenWindow = false; - public void Receive(PropertyChangedMessage message) { if (message.Sender is SystemTrayViewModel) @@ -122,7 +116,7 @@ namespace BetterLyrics.WinUI3 if (window == null) return; var hwnd = WindowNative.GetWindowHandle(window); - _watcherHelper = new ForegroundWindowWatcher( + _windowWatcher = new ForegroundWindowWatcher( hwnd, onWindowChanged => { @@ -133,10 +127,16 @@ namespace BetterLyrics.WinUI3 UpdateAccentColor(hwnd, mode); } ); - _watcherHelper.Start(); + _windowWatcher.Start(); UpdateAccentColor(hwnd, mode); } + private void StopWatchWindowColorChange() + { + _windowWatcher?.Stop(); + _windowWatcher = null; + } + public void UpdateAccentColor(nint hwnd, WindowPixelSampleMode mode) { ActivatedWindowAccentColor = Helper.ColorHelper.GetAccentColor(hwnd, mode).ToColor(); @@ -152,12 +152,6 @@ namespace BetterLyrics.WinUI3 IsLyricsWindowLocked = true; } - private void StopWatchWindowColorChange() - { - _watcherHelper?.Stop(); - _watcherHelper = null; - } - [RelayCommand] private void ToggleDesktopMode() { diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/SettingsPageViewModel.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/SettingsPageViewModel.cs index 9fc82b6..8510cbe 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/SettingsPageViewModel.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/SettingsPageViewModel.cs @@ -69,6 +69,7 @@ namespace BetterLyrics.WinUI3.ViewModels LyricsFontSize = _settingsService.LyricsFontSize; IsLyricsGlowEffectEnabled = _settingsService.IsLyricsGlowEffectEnabled; LyricsGlowEffectScope = _settingsService.LyricsGlowEffectScope; + LyricsHighlightScope = _settingsService.LyricsHighlightScope; IsFanLyricsEnabled = _settingsService.IsFanLyricsEnabled; LyricsBgFontColorType = _settingsService.LyricsBgFontColorType; @@ -86,6 +87,7 @@ namespace BetterLyrics.WinUI3.ViewModels LyricsScrollEasingType = _settingsService.LyricsScrollEasingType; LyricsScrollDuration = _settingsService.LyricsScrollDuration; + TimelineSyncThreshold = _settingsService.TimelineSyncThreshold; _playbackService.MediaSourceProvidersInfoChanged += PlaybackService_SessionIdsChanged; @@ -207,6 +209,10 @@ namespace BetterLyrics.WinUI3.ViewModels [NotifyPropertyChangedRecipients] public partial LineRenderingType LyricsGlowEffectScope { get; set; } + [ObservableProperty] + [NotifyPropertyChangedRecipients] + public partial LineRenderingType LyricsHighlightScope { get; set; } + [ObservableProperty] [NotifyPropertyChangedRecipients] public partial float LyricsLineSpacingFactor { get; set; } @@ -218,7 +224,7 @@ namespace BetterLyrics.WinUI3.ViewModels [ObservableProperty] public partial object NavViewSelectedItemTag { get; set; } - public string Version { get; set; } = Helper.MetadataHelper.AppVersion; + public string Version { get; set; } = MetadataHelper.AppVersion; public string BuildDate { get; set; } = string.Empty; @@ -248,25 +254,9 @@ namespace BetterLyrics.WinUI3.ViewModels [NotifyPropertyChangedRecipients] public partial int LyricsScrollDuration { get; set; } - partial void OnLyricsScrollEasingTypeChanged(EasingType value) - { - _settingsService.LyricsScrollEasingType = value; - } - - partial void OnLyricsScrollDurationChanged(int value) - { - _settingsService.LyricsScrollDuration = value; - } - - partial void OnLyricsBackgroundThemeChanged(ElementTheme value) - { - _settingsService.LyricsBackgroundTheme = value; - } - - partial void OnLyricsFontStrokeWidthChanged(int value) - { - _settingsService.LyricsFontStrokeWidth = value; - } + [ObservableProperty] + [NotifyPropertyChangedRecipients] + public partial int TimelineSyncThreshold { get; set; } public void OnLyricsSearchProvidersReordered() { @@ -288,11 +278,6 @@ namespace BetterLyrics.WinUI3.ViewModels ); } - public void OpenMusicFolder(LocalLyricsFolder folder) - { - OpenFolderInFileExplorer(folder.Path); - } - public void RemoveFolderAsync(LocalLyricsFolder folder) { LocalLyricsFolders.Remove(folder); @@ -371,31 +356,13 @@ namespace BetterLyrics.WinUI3.ViewModels } [RelayCommand] - private void OpenCacheFolder() + private static async Task OpenCacheFolderAsync() { - OpenFolderInFileExplorer(PathHelper.CacheFolder); - } - - private void OpenFolderInFileExplorer(string path) - { - Process.Start( - new ProcessStartInfo - { - FileName = "explorer.exe", - Arguments = path, - UseShellExecute = true, - } - ); + await Launcher.LaunchFolderPathAsync(PathHelper.CacheFolder); } [RelayCommand] - private void PlayTestingMusicTask() - { - WindowHelper.OpenOrShowWindow(); - } - - [RelayCommand] - private void RestartApp() + private static void RestartApp() { WindowHelper.RestartApp(); } @@ -429,7 +396,7 @@ namespace BetterLyrics.WinUI3.ViewModels try { string targetLangCode = LanguageHelper.SupportedTargetLanguages[SelectedTargetLanguageIndex].Code; - string result = await _libreTranslateService.TranslateAsync("Hello, world!", targetLangCode, null); + string result = await _libreTranslateService.TranslateTextAsync("Hello, world!", targetLangCode, null); _dispatcherQueue.TryEnqueue(() => { App.Current.SettingsWindowNotificationPanel?.Notify(App.ResourceLoader!.GetString("SettingsPageLibreTranslateTestSuccessInfo"), Microsoft.UI.Xaml.Controls.InfoBarSeverity.Success); @@ -479,51 +446,58 @@ namespace BetterLyrics.WinUI3.ViewModels return result; } + partial void OnLyricsScrollEasingTypeChanged(EasingType value) + { + _settingsService.LyricsScrollEasingType = value; + } + partial void OnLyricsScrollDurationChanged(int value) + { + _settingsService.LyricsScrollDuration = value; + } + partial void OnLyricsBackgroundThemeChanged(ElementTheme value) + { + _settingsService.LyricsBackgroundTheme = value; + } + partial void OnLyricsFontStrokeWidthChanged(int value) + { + _settingsService.LyricsFontStrokeWidth = value; + } partial void OnIgnoreFullscreenWindowChanged(bool value) { _settingsService.IgnoreFullscreenWindow = value; } - partial void OnSelectedTargetLanguageIndexChanged(int value) { _settingsService.SelectedTargetLanguageIndex = value; } - partial void OnLibreTranslateServerChanged(string value) { _settingsService.LibreTranslateServer = value; } - partial void OnAutoStartWindowTypeChanged(AutoStartWindowType value) { _settingsService.AutoStartWindowType = value; } - partial void OnAutoLockOnDesktopModeChanged(bool value) { _settingsService.AutoLockOnDesktopMode = value; } - partial void OnCoverImageRadiusChanged(int value) { _settingsService.CoverImageRadius = value; } - partial void OnCoverOverlayBlurAmountChanged(int value) { _settingsService.CoverOverlayBlurAmount = value; } - partial void OnCoverOverlayOpacityChanged(int value) { _settingsService.CoverOverlayOpacity = value; } - partial void OnIsDynamicCoverOverlayEnabledChanged(bool value) { _settingsService.IsDynamicCoverOverlayEnabled = value; } - partial void OnLanguageChanged(Enums.Language value) { switch (value) @@ -551,85 +525,78 @@ namespace BetterLyrics.WinUI3.ViewModels } _settingsService.Language = Language; } - partial void OnIsFanLyricsEnabledChanged(bool value) { _settingsService.IsFanLyricsEnabled = value; } - partial void OnIsLyricsGlowEffectEnabledChanged(bool value) { _settingsService.IsLyricsGlowEffectEnabled = value; } - partial void OnLyricsAlignmentTypeChanged(TextAlignmentType value) { _settingsService.LyricsAlignmentType = value; } - partial void OnSongInfoAlignmentTypeChanged(TextAlignmentType value) { _settingsService.SongInfoAlignmentType = value; } - partial void OnLyricsBlurAmountChanged(int value) { _settingsService.LyricsBlurAmount = value; } - partial void OnLyricsCustomBgFontColorChanged(Color value) { _settingsService.LyricsCustomBgFontColor = value; } - partial void OnLyricsCustomFgFontColorChanged(Color value) { _settingsService.LyricsCustomFgFontColor = value; } - partial void OnLyricsCustomStrokeFontColorChanged(Color value) { _settingsService.LyricsCustomStrokeFontColor = value; } - partial void OnLyricsBgFontColorTypeChanged(LyricsFontColorType value) { _settingsService.LyricsBgFontColorType = value; } - partial void OnLyricsFgFontColorTypeChanged(LyricsFontColorType value) { _settingsService.LyricsFgFontColorType = value; } - partial void OnLyricsStrokeFontColorTypeChanged(LyricsFontColorType value) { _settingsService.LyricsStrokeFontColorType = value; } - partial void OnLyricsFontSizeChanged(int value) { _settingsService.LyricsFontSize = value; } - partial void OnLyricsFontWeightChanged(LyricsFontWeight value) { _settingsService.LyricsFontWeight = value; } - partial void OnLyricsGlowEffectScopeChanged(LineRenderingType value) { _settingsService.LyricsGlowEffectScope = value; } - + partial void OnLyricsHighlightScopeChanged(LineRenderingType value) + { + _settingsService.LyricsHighlightScope = value; + } partial void OnLyricsLineSpacingFactorChanged(float value) { _settingsService.LyricsLineSpacingFactor = value; } - partial void OnLyricsVerticalEdgeOpacityChanged(int value) { _settingsService.LyricsVerticalEdgeOpacity = value; } + partial void OnTimelineSyncThresholdChanged(int value) + { + _settingsService.TimelineSyncThreshold = value; + } + } } diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/SettingsWindowViewModel.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/SettingsWindowViewModel.cs index d32b8f6..d79b4d9 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/SettingsWindowViewModel.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/SettingsWindowViewModel.cs @@ -2,8 +2,7 @@ namespace BetterLyrics.WinUI3.ViewModels { - public class SettingsWindowViewModel : BaseWindowViewModel + public partial class SettingsWindowViewModel(ISettingsService settingsService) : BaseWindowViewModel(settingsService) { - public SettingsWindowViewModel(ISettingsService settingsService) : base(settingsService) { } } } diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/SystemTrayViewModel.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/SystemTrayViewModel.cs index 225f98f..ecf1758 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/SystemTrayViewModel.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/SystemTrayViewModel.cs @@ -8,10 +8,8 @@ using CommunityToolkit.Mvvm.Messaging.Messages; namespace BetterLyrics.WinUI3.ViewModels { - public partial class SystemTrayViewModel : BaseViewModel, IRecipient> + public partial class SystemTrayViewModel(ISettingsService settingsService) : BaseViewModel(settingsService), IRecipient> { - public SystemTrayViewModel(ISettingsService settingsService) : base(settingsService) { } - [ObservableProperty] [NotifyPropertyChangedRecipients] public partial bool IsLyricsWindowLocked { get; set; } = false; @@ -34,15 +32,14 @@ namespace BetterLyrics.WinUI3.ViewModels } [RelayCommand] - private void ExitApp() + private static void ExitApp() { WindowHelper.ExitAllWindows(); } [RelayCommand] - private void OpenSettings() + private static void OpenSettings() { - // 打开设置窗口 WindowHelper.OpenOrShowWindow(); } diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/SettingsPage.xaml b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/SettingsPage.xaml index c59e65a..5da2387 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/SettingsPage.xaml +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/SettingsPage.xaml @@ -188,8 +188,8 @@ VerticalAlignment="Center" Text="{x:Bind ViewModel.CoverOverlayBlurAmount, Mode=OneWay}" /> + + + + + + + + - - + + + @@ -794,6 +803,7 @@ + @@ -815,24 +825,52 @@ Glyph=}" IsClickEnabled="True" /> + +