diff --git a/src/Snap.Hutao/Snap.Hutao/App.xaml.cs b/src/Snap.Hutao/Snap.Hutao/App.xaml.cs index 32a2a17e..b1ad7866 100644 --- a/src/Snap.Hutao/Snap.Hutao/App.xaml.cs +++ b/src/Snap.Hutao/Snap.Hutao/App.xaml.cs @@ -1,8 +1,6 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. -using CommunityToolkit.Mvvm.Messaging; -using Microsoft.Extensions.DependencyInjection; using Microsoft.UI.Xaml; using Microsoft.Windows.AppLifecycle; using Snap.Hutao.Core.LifeCycle; @@ -11,57 +9,31 @@ using Snap.Hutao.Extension; using Snap.Hutao.Service.Metadata; using System.Diagnostics; using Windows.Storage; -using Windows.UI.ViewManagement; namespace Snap.Hutao; /// /// Provides application-specific behavior to supplement the default Application class. /// +[Injection(InjectAs.Singleton)] public partial class App : Application { - private static Window? window; private readonly ILogger logger; /// /// Initializes the singleton application object. /// - public App() + /// 日志器 + public App(ILogger logger) { // load app resource InitializeComponent(); - InitializeDependencyInjection(); - // Notice that we already call InitializeDependencyInjection() above - // so we can use Ioc here. - logger = Ioc.Default.GetRequiredService>(); + this.logger = logger; _ = new ExceptionRecorder(this, logger); } - /// - /// 当前窗口 - /// - public static Window? Window { get => window; set => window = value; } - - /// - public static new App Current - { - get => (App)Application.Current; - } - - /// - public static StorageFolder CacheFolder - { - get => ApplicationData.Current.TemporaryFolder; - } - - /// - public static ApplicationDataContainer Settings - { - get => ApplicationData.Current.LocalSettings; - } - /// [SuppressMessage("", "VSTHRD100")] protected override async void OnLaunched(LaunchActivatedEventArgs args) @@ -71,11 +43,11 @@ public partial class App : Application if (firstInstance.IsCurrent) { - // manually invoke the + // manually invoke Activation.Activate(firstInstance, activatedEventArgs); firstInstance.Activated += Activation.Activate; - logger.LogInformation(EventIds.CommonLog, "Cache folder : {folder}", CacheFolder.Path); + logger.LogInformation(EventIds.CommonLog, "Cache folder : {folder}", ApplicationData.Current.TemporaryFolder.Path); Ioc.Default .GetRequiredService() @@ -90,29 +62,4 @@ public partial class App : Application Process.GetCurrentProcess().Kill(); } } - - private static void InitializeDependencyInjection() - { - IServiceProvider services = new ServiceCollection() - - // Microsoft extension - .AddLogging(builder => builder - .AddDebug() - .AddDatabase()) - .AddMemoryCache() - - // Hutao extensions - .AddJsonSerializerOptions() - .AddDatebase() - .AddInjections() - .AddHttpClients() - - // Discrete services - .AddSingleton(WeakReferenceMessenger.Default) - .AddSingleton(new UISettings()) - - .BuildServiceProvider(); - - Ioc.Default.ConfigureServices(services); - } -} +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Assets/LockScreenLogo.scale-200.png b/src/Snap.Hutao/Snap.Hutao/Assets/LockScreenLogo.scale-200.png index 7440f0d4..cb6b3afd 100644 Binary files a/src/Snap.Hutao/Snap.Hutao/Assets/LockScreenLogo.scale-200.png and b/src/Snap.Hutao/Snap.Hutao/Assets/LockScreenLogo.scale-200.png differ diff --git a/src/Snap.Hutao/Snap.Hutao/Assets/SplashScreen.scale-200.png b/src/Snap.Hutao/Snap.Hutao/Assets/SplashScreen.scale-200.png index 32f486a8..e08dacb2 100644 Binary files a/src/Snap.Hutao/Snap.Hutao/Assets/SplashScreen.scale-200.png and b/src/Snap.Hutao/Snap.Hutao/Assets/SplashScreen.scale-200.png differ diff --git a/src/Snap.Hutao/Snap.Hutao/Assets/Square150x150Logo.scale-200.png b/src/Snap.Hutao/Snap.Hutao/Assets/Square150x150Logo.scale-200.png index 53ee3777..7965f313 100644 Binary files a/src/Snap.Hutao/Snap.Hutao/Assets/Square150x150Logo.scale-200.png and b/src/Snap.Hutao/Snap.Hutao/Assets/Square150x150Logo.scale-200.png differ diff --git a/src/Snap.Hutao/Snap.Hutao/Assets/Square44x44Logo.scale-200.png b/src/Snap.Hutao/Snap.Hutao/Assets/Square44x44Logo.scale-200.png index f713bba6..5dd40c80 100644 Binary files a/src/Snap.Hutao/Snap.Hutao/Assets/Square44x44Logo.scale-200.png and b/src/Snap.Hutao/Snap.Hutao/Assets/Square44x44Logo.scale-200.png differ diff --git a/src/Snap.Hutao/Snap.Hutao/Assets/Square44x44Logo.targetsize-24_altform-unplated.png b/src/Snap.Hutao/Snap.Hutao/Assets/Square44x44Logo.targetsize-24_altform-unplated.png index dc9f5bea..f44a5c8d 100644 Binary files a/src/Snap.Hutao/Snap.Hutao/Assets/Square44x44Logo.targetsize-24_altform-unplated.png and b/src/Snap.Hutao/Snap.Hutao/Assets/Square44x44Logo.targetsize-24_altform-unplated.png differ diff --git a/src/Snap.Hutao/Snap.Hutao/Assets/StoreLogo.png b/src/Snap.Hutao/Snap.Hutao/Assets/StoreLogo.png index a4586f26..f0a29d4f 100644 Binary files a/src/Snap.Hutao/Snap.Hutao/Assets/StoreLogo.png and b/src/Snap.Hutao/Snap.Hutao/Assets/StoreLogo.png differ diff --git a/src/Snap.Hutao/Snap.Hutao/Assets/Wide310x150Logo.scale-200.png b/src/Snap.Hutao/Snap.Hutao/Assets/Wide310x150Logo.scale-200.png index 8b4a5d0d..7b1d7f2f 100644 Binary files a/src/Snap.Hutao/Snap.Hutao/Assets/Wide310x150Logo.scale-200.png and b/src/Snap.Hutao/Snap.Hutao/Assets/Wide310x150Logo.scale-200.png differ diff --git a/src/Snap.Hutao/Snap.Hutao/Control/Extension/ContentDialogExtensions.cs b/src/Snap.Hutao/Snap.Hutao/Control/Extension/ContentDialogExtensions.cs new file mode 100644 index 00000000..514cb957 --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Control/Extension/ContentDialogExtensions.cs @@ -0,0 +1,39 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +using Microsoft.UI.Xaml.Controls; +using Snap.Hutao.Extension; + +namespace Snap.Hutao.Control.Extension; + +/// +/// 对话框扩展 +/// +internal static class ContentDialogExtensions +{ + /// + /// 阻止用户交互 + /// + /// 对话框 + /// 用于恢复用户交互 + public static IDisposable BlockInteraction(this ContentDialog contentDialog) + { + contentDialog.ShowAsync().AsTask().SafeForget(); + return new ContentDialogHider(contentDialog); + } + + private struct ContentDialogHider : IDisposable + { + private readonly ContentDialog contentDialog; + + public ContentDialogHider(ContentDialog contentDialog) + { + this.contentDialog = contentDialog; + } + + public void Dispose() + { + contentDialog.Hide(); + } + } +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Control/Image/CompositionImage.cs b/src/Snap.Hutao/Snap.Hutao/Control/Image/CompositionImage.cs index 124b4362..dc77c05c 100644 --- a/src/Snap.Hutao/Snap.Hutao/Control/Image/CompositionImage.cs +++ b/src/Snap.Hutao/Snap.Hutao/Control/Image/CompositionImage.cs @@ -8,7 +8,6 @@ using Microsoft.UI.Xaml.Hosting; using Microsoft.UI.Xaml.Media; using Snap.Hutao.Core; using Snap.Hutao.Core.Caching; -using Snap.Hutao.Core.Exception; using Snap.Hutao.Core.Threading; using Snap.Hutao.Extension; using Snap.Hutao.Service.Abstraction; @@ -132,13 +131,8 @@ public abstract class CompositionImage : Microsoft.UI.Xaml.Controls.Control { imageSurface = await LoadImageSurfaceAsync(storageFile, token); } - catch (COMException ex) when (ex.Is(COMError.STG_E_FILENOTFOUND)) + catch (COMException) { - // Image file not found. - } - catch (COMException ex) when (ex.Is(COMError.WINCODEC_ERR_COMPONENTNOTFOUND)) - { - // Image is broken, remove it await imageCache.RemoveAsync(uri.Enumerate()); } diff --git a/src/Snap.Hutao/Snap.Hutao/Control/Image/MonoChrome.cs b/src/Snap.Hutao/Snap.Hutao/Control/Image/MonoChrome.cs index 2bd53b11..b7492dac 100644 --- a/src/Snap.Hutao/Snap.Hutao/Control/Image/MonoChrome.cs +++ b/src/Snap.Hutao/Snap.Hutao/Control/Image/MonoChrome.cs @@ -55,7 +55,7 @@ public class MonoChrome : CompositionImage { ElementTheme.Light => ApplicationTheme.Light, ElementTheme.Dark => ApplicationTheme.Dark, - _ => App.Current.RequestedTheme, + _ => Ioc.Default.GetRequiredService().RequestedTheme, }; backgroundBrush.Color = theme switch diff --git a/src/Snap.Hutao/Snap.Hutao/Core/Caching/CacheBase.cs b/src/Snap.Hutao/Snap.Hutao/Core/Caching/CacheBase.cs index 3d99fe1c..f33dbd83 100644 --- a/src/Snap.Hutao/Snap.Hutao/Core/Caching/CacheBase.cs +++ b/src/Snap.Hutao/Snap.Hutao/Core/Caching/CacheBase.cs @@ -216,7 +216,7 @@ public abstract class CacheBase using (await cacheFolderSemaphore.EnterAsync().ConfigureAwait(false)) { - baseFolder ??= App.CacheFolder; + baseFolder ??= ApplicationData.Current.TemporaryFolder; if (string.IsNullOrWhiteSpace(cacheFolderName)) { diff --git a/src/Snap.Hutao/Snap.Hutao/Core/LifeCycle/Activation.cs b/src/Snap.Hutao/Snap.Hutao/Core/LifeCycle/Activation.cs index f0214284..b2a2882d 100644 --- a/src/Snap.Hutao/Snap.Hutao/Core/LifeCycle/Activation.cs +++ b/src/Snap.Hutao/Snap.Hutao/Core/LifeCycle/Activation.cs @@ -23,6 +23,7 @@ internal static class Activation /// 激活参数 public static void Activate(object? sender, AppActivationArguments args) { + _ = sender; HandleActivationAsync(args).SafeForget(); } @@ -43,7 +44,7 @@ internal static class Activation private static async Task HandleActivationCoreAsync(AppActivationArguments args) { - App.Window = Ioc.Default.GetRequiredService(); + _ = Ioc.Default.GetRequiredService(); IInfoBarService infoBarService = Ioc.Default.GetRequiredService(); await infoBarService.WaitInitializationAsync().ConfigureAwait(false); diff --git a/src/Snap.Hutao/Snap.Hutao/Core/Setting/LocalSetting.cs b/src/Snap.Hutao/Snap.Hutao/Core/Setting/LocalSetting.cs index 91555939..f536d772 100644 --- a/src/Snap.Hutao/Snap.Hutao/Core/Setting/LocalSetting.cs +++ b/src/Snap.Hutao/Snap.Hutao/Core/Setting/LocalSetting.cs @@ -18,7 +18,7 @@ internal static class LocalSetting static LocalSetting() { - Container = App.Settings; + Container = ApplicationData.Current.LocalSettings; } /// @@ -28,7 +28,7 @@ internal static class LocalSetting /// 键 /// 默认值 /// 获取的值 - [return:MaybeNull] + [return: MaybeNull] public static T Get(string key, [AllowNull] T defaultValue = default) { if (Container.Values.TryGetValue(key, out object? value)) diff --git a/src/Snap.Hutao/Snap.Hutao/Core/ThemeHelper.cs b/src/Snap.Hutao/Snap.Hutao/Core/ThemeHelper.cs index 5296e21f..be0ab011 100644 --- a/src/Snap.Hutao/Snap.Hutao/Core/ThemeHelper.cs +++ b/src/Snap.Hutao/Snap.Hutao/Core/ThemeHelper.cs @@ -57,4 +57,20 @@ public static class ThemeHelper _ => throw Must.NeverHappen(), }; } + + /// + /// 检查是否为暗黑模式 + /// + /// 当前元素主题 + /// 当前应用主题 + /// 是否为暗黑模式 + public static bool IsDarkMode(ElementTheme elementTheme, ApplicationTheme applicationTheme) + { + return elementTheme switch + { + ElementTheme.Default => applicationTheme == ApplicationTheme.Dark, + ElementTheme.Dark => true, + _ => false, + }; + } } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Core/Threading/DispatherQueueSwitchOperation.cs b/src/Snap.Hutao/Snap.Hutao/Core/Threading/DispatherQueueSwitchOperation.cs index 84d483a9..2a86b9da 100644 --- a/src/Snap.Hutao/Snap.Hutao/Core/Threading/DispatherQueueSwitchOperation.cs +++ b/src/Snap.Hutao/Snap.Hutao/Core/Threading/DispatherQueueSwitchOperation.cs @@ -25,7 +25,10 @@ public struct DispatherQueueSwitchOperation : IAwaitable /// 是否完成 /// - public bool IsCompleted => dispatherQueue.HasThreadAccess; + public bool IsCompleted + { + get => dispatherQueue.HasThreadAccess; + } /// public void OnCompleted(Action continuation) diff --git a/src/Snap.Hutao/Snap.Hutao/Core/Windowing/WindowManager.cs b/src/Snap.Hutao/Snap.Hutao/Core/Windowing/WindowManager.cs index e9caeff4..3d122ef2 100644 --- a/src/Snap.Hutao/Snap.Hutao/Core/Windowing/WindowManager.cs +++ b/src/Snap.Hutao/Snap.Hutao/Core/Windowing/WindowManager.cs @@ -116,10 +116,12 @@ internal sealed class WindowManager : IDisposable appTitleBar.ButtonBackgroundColor = Colors.Transparent; appTitleBar.ButtonInactiveBackgroundColor = Colors.Transparent; - Color systemBaseLowColor = (Color)App.Current.Resources["SystemBaseLowColor"]; + App app = Ioc.Default.GetRequiredService(); + + Color systemBaseLowColor = (Color)app.Resources["SystemBaseLowColor"]; appTitleBar.ButtonHoverBackgroundColor = systemBaseLowColor; - Color systemBaseMediumLowColor = (Color)App.Current.Resources["SystemBaseMediumLowColor"]; + Color systemBaseMediumLowColor = (Color)app.Resources["SystemBaseMediumLowColor"]; appTitleBar.ButtonPressedBackgroundColor = systemBaseMediumLowColor; // The Foreground doesn't accept Alpha channel. So we translate it to gray. @@ -127,7 +129,7 @@ internal sealed class WindowManager : IDisposable byte result = (byte)((systemBaseMediumLowColor.A / 255.0) * light); appTitleBar.ButtonInactiveForegroundColor = Color.FromArgb(0xFF, result, result, result); - Color systemBaseHighColor = (Color)App.Current.Resources["SystemBaseHighColor"]; + Color systemBaseHighColor = (Color)app.Resources["SystemBaseHighColor"]; appTitleBar.ButtonForegroundColor = systemBaseHighColor; appTitleBar.ButtonHoverForegroundColor = systemBaseHighColor; appTitleBar.ButtonPressedForegroundColor = systemBaseHighColor; diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Intrinsic/FightProperty.cs b/src/Snap.Hutao/Snap.Hutao/Model/Intrinsic/FightProperty.cs index 2b84fac8..6b46e62d 100644 --- a/src/Snap.Hutao/Snap.Hutao/Model/Intrinsic/FightProperty.cs +++ b/src/Snap.Hutao/Snap.Hutao/Model/Intrinsic/FightProperty.cs @@ -194,6 +194,8 @@ public enum FightProperty /// /// 草元素伤害加成 /// + [Description("草元素伤害加成")] + [Format(FormatMethod.Percent)] FIGHT_PROP_GRASS_ADD_HURT = 43, /// diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Converter/AvatarIconConverter.cs b/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Converter/AvatarIconConverter.cs index 57055dd6..07178fbe 100644 --- a/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Converter/AvatarIconConverter.cs +++ b/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Converter/AvatarIconConverter.cs @@ -10,7 +10,7 @@ namespace Snap.Hutao.Model.Metadata.Converter; /// internal class AvatarIconConverter : IValueConverter { - private const string BaseUrl = "https://upload-bbs.mihoyo.com/game_record/genshin/character_icon/{0}.png"; + private const string BaseUrl = "https://static.snapgenshin.com/AvatarIcon/{0}.png"; /// public object Convert(object value, Type targetType, object parameter, string language) diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Converter/AvatarSideIconConverter.cs b/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Converter/AvatarSideIconConverter.cs index be2ae510..43e29385 100644 --- a/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Converter/AvatarSideIconConverter.cs +++ b/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Converter/AvatarSideIconConverter.cs @@ -10,7 +10,7 @@ namespace Snap.Hutao.Model.Metadata.Converter; /// internal class AvatarSideIconConverter : IValueConverter { - private const string BaseUrl = "https://upload-bbs.mihoyo.com/game_record/genshin/character_side_icon/{0}.png"; + private const string BaseUrl = "https://static.snapgenshin.com/AvatarIcon/{0}.png"; /// public object Convert(object value, Type targetType, object parameter, string language) diff --git a/src/Snap.Hutao/Snap.Hutao/Program.cs b/src/Snap.Hutao/Snap.Hutao/Program.cs index 60c7c8a6..6fb20333 100644 --- a/src/Snap.Hutao/Snap.Hutao/Program.cs +++ b/src/Snap.Hutao/Snap.Hutao/Program.cs @@ -1,10 +1,14 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. +using CommunityToolkit.Mvvm.Messaging; +using Microsoft.Extensions.DependencyInjection; using Microsoft.UI.Dispatching; using Microsoft.UI.Xaml; +using Snap.Hutao.Core.Logging; using Snap.Hutao.Core.Threading; using System.Runtime.InteropServices; +using Windows.UI.ViewManagement; using WinRT; namespace Snap.Hutao; @@ -35,12 +39,44 @@ public static class Program XamlCheckProcessRequirements(); ComWrappersSupport.InitializeComWrappers(); - Application.Start(p => - { - dispatcherQueue = DispatcherQueue.GetForCurrentThread(); - DispatcherQueueSynchronizationContext context = new(dispatcherQueue); - SynchronizationContext.SetSynchronizationContext(context); - _ = new App(); - }); + InitializeDependencyInjection(); + + // In a Desktop app this runs a message pump internally, + // and does not return until the application shuts down. + Application.Start(InitializeApp); + } + + private static void InitializeApp(ApplicationInitializationCallbackParams param) + { + dispatcherQueue = DispatcherQueue.GetForCurrentThread(); + DispatcherQueueSynchronizationContext context = new(dispatcherQueue); + SynchronizationContext.SetSynchronizationContext(context); + + _ = Ioc.Default.GetRequiredService(); + } + + private static void InitializeDependencyInjection() + { + IServiceProvider services = new ServiceCollection() + + // Microsoft extension + .AddLogging(builder => builder + .AddDebug() + .AddDatabase()) + .AddMemoryCache() + + // Hutao extensions + .AddJsonSerializerOptions() + .AddDatebase() + .AddInjections() + .AddHttpClients() + + // Discrete services + .AddSingleton(WeakReferenceMessenger.Default) + .AddSingleton(new UISettings()) + + .BuildServiceProvider(); + + Ioc.Default.ConfigureServices(services); } } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Achievement/AchievementService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Achievement/AchievementService.cs index f87e5bf0..7a3cbeb5 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Achievement/AchievementService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Achievement/AchievementService.cs @@ -151,6 +151,12 @@ internal class AchievementService : IAchievementService } } + /// + public Task ImportFromUIAFAsync(EntityArchive archive, List list, ImportOption option) + { + return Task.Run(() => ImportFromUIAF(archive, list, option)); + } + /// public void SaveAchievements(EntityArchive archive, IList achievements) { diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Achievement/IAchievementService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Achievement/IAchievementService.cs index 40547697..8075562b 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Achievement/IAchievementService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Achievement/IAchievementService.cs @@ -40,9 +40,18 @@ internal interface IAchievementService /// 用户 /// UIAF数据 /// 选项 - /// 导入 + /// 导入结果 ImportResult ImportFromUIAF(EntityArchive archive, List list, ImportOption option); + /// + /// 异步导入UIAF数据 + /// + /// 用户 + /// UIAF数据 + /// 选项 + /// 导入结果 + Task ImportFromUIAFAsync(EntityArchive archive, List list, ImportOption option); + /// /// 异步移除存档 /// diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Achievement/ImportResult.cs b/src/Snap.Hutao/Snap.Hutao/Service/Achievement/ImportResult.cs index 02b8a283..5a02cea8 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Achievement/ImportResult.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Achievement/ImportResult.cs @@ -35,4 +35,10 @@ public struct ImportResult Update = update; Remove = remove; } + + /// + public override string ToString() + { + return $"新增:{Add} 个成就 | 更新:{Update} 个成就 | 删除{Remove} 个成就"; + } } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/View/MainView.xaml b/src/Snap.Hutao/Snap.Hutao/View/MainView.xaml index 349e2f87..b5e9c69a 100644 --- a/src/Snap.Hutao/Snap.Hutao/View/MainView.xaml +++ b/src/Snap.Hutao/Snap.Hutao/View/MainView.xaml @@ -50,7 +50,7 @@ diff --git a/src/Snap.Hutao/Snap.Hutao/View/MainView.xaml.cs b/src/Snap.Hutao/Snap.Hutao/View/MainView.xaml.cs index c17d50c5..0bdeb2e5 100644 --- a/src/Snap.Hutao/Snap.Hutao/View/MainView.xaml.cs +++ b/src/Snap.Hutao/Snap.Hutao/View/MainView.xaml.cs @@ -50,13 +50,15 @@ public sealed partial class MainView : UserControl { await Program.SwitchToMainThreadAsync(); - if (!ThemeHelper.Equals(App.Current.RequestedTheme, RequestedTheme)) + App current = Ioc.Default.GetRequiredService(); + + if (!ThemeHelper.Equals(current.RequestedTheme, RequestedTheme)) { ILogger logger = Ioc.Default.GetRequiredService>(); - logger.LogInformation(EventIds.CommonLog, "Element Theme [{element}] App Theme [{app}]", RequestedTheme, App.Current.RequestedTheme); + logger.LogInformation(EventIds.CommonLog, "Element Theme [{element}] App Theme [{app}]", RequestedTheme, current.RequestedTheme); // Update controls' theme which presents in the PopupRoot - RequestedTheme = ThemeHelper.ApplicationToElement(App.Current.RequestedTheme); + RequestedTheme = ThemeHelper.ApplicationToElement(current.RequestedTheme); } } } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/View/Page/AnnouncementContentPage.xaml.cs b/src/Snap.Hutao/Snap.Hutao/View/Page/AnnouncementContentPage.xaml.cs index cf3cecae..e489dcb1 100644 --- a/src/Snap.Hutao/Snap.Hutao/View/Page/AnnouncementContentPage.xaml.cs +++ b/src/Snap.Hutao/Snap.Hutao/View/Page/AnnouncementContentPage.xaml.cs @@ -4,6 +4,7 @@ using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Navigation; using Microsoft.Web.WebView2.Core; +using Snap.Hutao.Core; using Snap.Hutao.Extension; using Snap.Hutao.Service.Navigation; using Windows.System; @@ -21,7 +22,8 @@ public sealed partial class AnnouncementContentPage : Microsoft.UI.Xaml.Controls private const string LightColor3 = "color:rgba(204,204,204,1)"; private const string LightColor4 = "color:rgba(198,196,191,1)"; private const string LightColor5 = "color:rgba(170,170,170,1)"; - private const string LightAccentColor = "background-color: rgb(0,40,70)"; + private const string LightAccentColor1 = "background-color: rgb(0,40,70)"; + private const string LightAccentColor2 = "background-color: rgb(1,40,70)"; // find in content private const string DarkColor1 = "color:rgba(0,0,0,1)"; @@ -30,6 +32,7 @@ public sealed partial class AnnouncementContentPage : Microsoft.UI.Xaml.Controls private const string DarkColor4 = "color:rgba(57,59,64,1)"; private const string DarkColor5 = "color:rgba(85,85,85,1)"; private const string DarkAccentColor1 = "background-color: rgb(255, 215, 185);"; + private const string DarkAccentColor2 = "background-color: rgb(254, 245, 231);"; // support click open browser. private const string MihoyoSDKDefinition = @@ -66,25 +69,19 @@ openInWebview: function(url){ location.href = url }}"; return rawContent; } - bool isDarkMode = theme switch - { - ElementTheme.Default => App.Current.RequestedTheme == ApplicationTheme.Dark, - ElementTheme.Dark => true, - _ => false, - }; - - if (isDarkMode) + if (ThemeHelper.IsDarkMode(theme, Ioc.Default.GetRequiredService().RequestedTheme)) { rawContent = rawContent .Replace(DarkColor5, LightColor5) .Replace(DarkColor4, LightColor4) .Replace(DarkColor3, LightColor3) .Replace(DarkColor2, LightColor2) - .Replace(DarkAccentColor1, LightAccentColor); + .Replace(DarkAccentColor1, LightAccentColor1) + .Replace(DarkAccentColor2, LightAccentColor2); } // wrap a default color body around - return $@"{rawContent}"; + return $@"().RequestedTheme) ? LightColor1 : DarkColor1)}"">{rawContent}"; } private async Task LoadAnnouncementAsync(INavigationData data) diff --git a/src/Snap.Hutao/Snap.Hutao/View/Page/SettingPage.xaml b/src/Snap.Hutao/Snap.Hutao/View/Page/SettingPage.xaml index 2b45b625..065c4dff 100644 --- a/src/Snap.Hutao/Snap.Hutao/View/Page/SettingPage.xaml +++ b/src/Snap.Hutao/Snap.Hutao/View/Page/SettingPage.xaml @@ -25,9 +25,7 @@ - - + Description="根本没有检查更新选项"/> + Description="所有账号的所有角色都会签到,每次间隔 5-15s">