diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Enums/AlbumArtSearchProvider.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Enums/AlbumArtSearchProvider.cs new file mode 100644 index 0000000..1e98253 --- /dev/null +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Enums/AlbumArtSearchProvider.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BetterLyrics.WinUI3.Enums +{ + public enum AlbumArtSearchProvider + { + Local, + SMTC, + iTunes, + } +} diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/AlbumArtSearchProviderInfo.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/AlbumArtSearchProviderInfo.cs new file mode 100644 index 0000000..fb2a284 --- /dev/null +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/AlbumArtSearchProviderInfo.cs @@ -0,0 +1,24 @@ +// 2025/6/23 by Zhe Fang + +using BetterLyrics.WinUI3.Enums; +using CommunityToolkit.Mvvm.ComponentModel; + +namespace BetterLyrics.WinUI3.Models +{ + public partial class AlbumArtSearchProviderInfo : ObservableObject + { + [ObservableProperty] + public partial bool IsEnabled { get; set; } + + [ObservableProperty] + public partial AlbumArtSearchProvider Provider { get; set; } + + public AlbumArtSearchProviderInfo() { } + + public AlbumArtSearchProviderInfo(AlbumArtSearchProvider provider, bool isEnabled) + { + Provider = provider; + IsEnabled = isEnabled; + } + } +} diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/LyricsSearchProviderInfo.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/LyricsSearchProviderInfo.cs index 410890d..9b2b3a8 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/LyricsSearchProviderInfo.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/LyricsSearchProviderInfo.cs @@ -5,17 +5,17 @@ using CommunityToolkit.Mvvm.ComponentModel; namespace BetterLyrics.WinUI3.Models { - public partial class MediaSourceProviderInfo : ObservableObject + public partial class LyricsSearchProviderInfo : ObservableObject { [ObservableProperty] public partial bool IsEnabled { get; set; } [ObservableProperty] - public partial string Provider { get; set; } + public partial LyricsSearchProvider Provider { get; set; } - public MediaSourceProviderInfo() { } + public LyricsSearchProviderInfo() { } - public MediaSourceProviderInfo(string provider, bool isEnabled) + public LyricsSearchProviderInfo(LyricsSearchProvider provider, bool isEnabled) { Provider = provider; IsEnabled = isEnabled; diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/MediaSourceProviderInfo.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/MediaSourceProviderInfo.cs index 9b2b3a8..410890d 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/MediaSourceProviderInfo.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Models/MediaSourceProviderInfo.cs @@ -5,17 +5,17 @@ using CommunityToolkit.Mvvm.ComponentModel; namespace BetterLyrics.WinUI3.Models { - public partial class LyricsSearchProviderInfo : ObservableObject + public partial class MediaSourceProviderInfo : ObservableObject { [ObservableProperty] public partial bool IsEnabled { get; set; } [ObservableProperty] - public partial LyricsSearchProvider Provider { get; set; } + public partial string Provider { get; set; } - public LyricsSearchProviderInfo() { } + public MediaSourceProviderInfo() { } - public LyricsSearchProviderInfo(LyricsSearchProvider provider, bool isEnabled) + public MediaSourceProviderInfo(string provider, bool isEnabled) { Provider = provider; IsEnabled = isEnabled; diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Serialization/SourceGenerationContext.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Serialization/SourceGenerationContext.cs index c2aa28e..9d2090f 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Serialization/SourceGenerationContext.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Serialization/SourceGenerationContext.cs @@ -8,6 +8,7 @@ using BetterLyrics.WinUI3.Models; namespace BetterLyrics.WinUI3.Serialization { + [JsonSerializable(typeof(List))] [JsonSerializable(typeof(List))] [JsonSerializable(typeof(List))] [JsonSerializable(typeof(List))] diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/ISettingsService.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/ISettingsService.cs index 4010e7d..f154899 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/ISettingsService.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/ISettingsService.cs @@ -71,7 +71,7 @@ namespace BetterLyrics.WinUI3.Services float LyricsLineSpacingFactor { get; set; } List LyricsSearchProvidersInfo { get; set; } - + List AlbumArtSearchProvidersInfo { get; set; } List MediaSourceProvidersInfo { get; set; } int LyricsVerticalEdgeOpacity { get; set; } diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/SettingsService.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/SettingsService.cs index 296c1bb..cb5bee0 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/SettingsService.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Services/SettingsService.cs @@ -64,6 +64,7 @@ namespace BetterLyrics.WinUI3.Services private const string LyricsGlowEffectScopeKey = "LyricsGlowEffectScope"; private const string LyricsLineSpacingFactorKey = "LyricsLineSpacingFactor"; private const string LyricsSearchProvidersInfoKey = "LyricsSearchProvidersInfo"; + private const string AlbumArtSearchProvidersInfoKey = "AlbumArtSearchProvidersInfo"; private const string LyricsVerticalEdgeOpacityKey = "LyricsVerticalEdgeOpacity"; private const string MediaSourceProvidersInfoKey = "MediaSourceProvidersInfo"; @@ -96,7 +97,6 @@ namespace BetterLyrics.WinUI3.Services SourceGenerationContext.Default.ListLyricsSearchProviderInfo ) ); - SetDefault(MediaSourceProvidersInfoKey, "[]"); if (LyricsSearchProvidersInfo.Count != Enum.GetValues().Length) { LyricsSearchProvidersInfo = Enum.GetValues() @@ -109,6 +109,31 @@ namespace BetterLyrics.WinUI3.Services )) .ToList(); } + + SetDefault( + AlbumArtSearchProvidersInfoKey, + System.Text.Json.JsonSerializer.Serialize( + Enum.GetValues() + .Select(p => new AlbumArtSearchProviderInfo(p, true)) + .ToList(), + SourceGenerationContext.Default.ListAlbumArtSearchProviderInfo + ) + ); + if (AlbumArtSearchProvidersInfo.Count != Enum.GetValues().Length) + { + AlbumArtSearchProvidersInfo = Enum.GetValues() + .Select(p => new AlbumArtSearchProviderInfo( + p, + AlbumArtSearchProvidersInfo + .Where(x => x.Provider == p) + .FirstOrDefault() + ?.IsEnabled ?? true + )) + .ToList(); + } + + SetDefault(MediaSourceProvidersInfoKey, "[]"); + // App appearance SetDefault(LanguageKey, (int)Language.FollowSystem); @@ -142,7 +167,7 @@ namespace BetterLyrics.WinUI3.Services SetDefault(LyricsBgFontColorTypeKey, (int)LyricsFontColorType.AdaptiveGrayed); SetDefault(LyricsFgFontColorTypeKey, (int)LyricsFontColorType.AdaptiveGrayed); SetDefault(LyricsStrokeFontColorTypeKey, (int)LyricsFontColorType.AdaptiveGrayed); - + SetDefault(LyricsCustomBgFontColorKey, Colors.White.ToInt()); SetDefault(LyricsCustomFgFontColorKey, Colors.White.ToInt()); SetDefault(LyricsCustomStrokeFontColorKey, Colors.White.ToInt()); @@ -403,6 +428,23 @@ namespace BetterLyrics.WinUI3.Services ); } + public List AlbumArtSearchProvidersInfo + { + get => + System.Text.Json.JsonSerializer.Deserialize( + GetValue(AlbumArtSearchProvidersInfoKey) ?? "[]", + SourceGenerationContext.Default.ListAlbumArtSearchProviderInfo + )!; + set => + SetValue( + AlbumArtSearchProvidersInfoKey, + System.Text.Json.JsonSerializer.Serialize( + value, + SourceGenerationContext.Default.ListAlbumArtSearchProviderInfo + ) + ); + } + public List MediaSourceProvidersInfo { get => diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel.Messages.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel.Messages.cs index a63a9b4..1bc0e62 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel.Messages.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel.Messages.cs @@ -22,6 +22,7 @@ namespace BetterLyrics.WinUI3.ViewModels IRecipient>, IRecipient>, IRecipient>>, + IRecipient>>, IRecipient>> { public void Receive(PropertyChangedMessage> message) diff --git a/docs/_config.yml b/docs/_config.yml new file mode 100644 index 0000000..a6d69b7 --- /dev/null +++ b/docs/_config.yml @@ -0,0 +1,2 @@ +title: BetterLyrics Docs +theme: just-the-docs