fix a issue where taskbaricon launchgame will open mainwindow

This commit is contained in:
DismissedLight
2023-09-04 23:27:01 +08:00
parent 2316a5beaf
commit cc41037a2b
6 changed files with 49 additions and 21 deletions

View File

@@ -3,6 +3,7 @@
using CommunityToolkit.WinUI.Notifications;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.UI.Xaml;
using Microsoft.Windows.AppLifecycle;
using Snap.Hutao.Core.Setting;
using Snap.Hutao.Service.DailyNote;
@@ -18,9 +19,10 @@ namespace Snap.Hutao.Core.LifeCycle;
/// 激活
/// </summary>
[HighQuality]
[ConstructorGenerated]
[Injection(InjectAs.Singleton, typeof(IActivation))]
[SuppressMessage("", "CA1001")]
internal sealed class Activation : IActivation
internal sealed partial class Activation : IActivation
{
/// <summary>
/// 操作
@@ -48,20 +50,11 @@ internal sealed class Activation : IActivation
private const string UrlActionRefresh = "/REFRESH";
private readonly IServiceProvider serviceProvider;
private readonly ICurrentWindowReference currentWindowReference;
private readonly ITaskContext taskContext;
private readonly WeakReference<MainWindow> mainWindowReference = new(default!);
//private readonly WeakReference<MainWindow> mainWindowReference = new(default!);
private readonly SemaphoreSlim activateSemaphore = new(1);
/// <summary>
/// 构造一个新的激活
/// </summary>
/// <param name="serviceProvider">服务提供器</param>
public Activation(IServiceProvider serviceProvider)
{
taskContext = serviceProvider.GetRequiredService<ITaskContext>();
this.serviceProvider = serviceProvider;
}
/// <inheritdoc/>
public void Activate(object? sender, AppActivationArguments args)
{
@@ -163,11 +156,11 @@ internal sealed class Activation : IActivation
private async ValueTask WaitMainWindowAsync()
{
if (!mainWindowReference.TryGetTarget(out _))
if (currentWindowReference.Window is null)
{
await taskContext.SwitchToMainThreadAsync();
mainWindowReference.SetTarget(serviceProvider.GetRequiredService<MainWindow>());
currentWindowReference.Window = serviceProvider.GetRequiredService<MainWindow>();
serviceProvider
.GetRequiredService<IMetadataService>()
@@ -272,9 +265,9 @@ internal sealed class Activation : IActivation
await taskContext.SwitchToMainThreadAsync();
if (!mainWindowReference.TryGetTarget(out _))
if (currentWindowReference.Window is null)
{
_ = serviceProvider.GetRequiredService<LaunchGameWindow>();
currentWindowReference.Window = serviceProvider.GetRequiredService<LaunchGameWindow>();
}
else
{

View File

@@ -0,0 +1,22 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using CommunityToolkit.WinUI.Notifications;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.UI.Xaml;
using Microsoft.Windows.AppLifecycle;
using Snap.Hutao.Core.Setting;
using Snap.Hutao.Service.DailyNote;
using Snap.Hutao.Service.Hutao;
using Snap.Hutao.Service.Metadata;
using Snap.Hutao.Service.Navigation;
using Snap.Hutao.ViewModel.Guide;
using System.Diagnostics;
namespace Snap.Hutao.Core.LifeCycle;
[Injection(InjectAs.Singleton, typeof(ICurrentWindowReference))]
internal sealed class CurrentWindowReference : ICurrentWindowReference
{
public Window Window { get; set; } = default!;
}

View File

@@ -1,6 +1,7 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Microsoft.UI.Xaml;
using Microsoft.Windows.AppLifecycle;
namespace Snap.Hutao.Core.LifeCycle;

View File

@@ -0,0 +1,11 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Microsoft.UI.Xaml;
namespace Snap.Hutao.Core.LifeCycle;
internal interface ICurrentWindowReference
{
public Window Window { get; set; }
}

View File

@@ -2,6 +2,7 @@
// Licensed under the MIT license.
using Microsoft.UI.Xaml.Controls;
using Snap.Hutao.Core.LifeCycle;
using Snap.Hutao.Factory.Abstraction;
namespace Snap.Hutao.Factory;
@@ -14,7 +15,7 @@ internal sealed partial class ContentDialogFactory : IContentDialogFactory
{
private readonly IServiceProvider serviceProvider;
private readonly ITaskContext taskContext;
private readonly MainWindow mainWindow;
private readonly ICurrentWindowReference currentWindowReference;
/// <inheritdoc/>
public async ValueTask<ContentDialogResult> CreateForConfirmAsync(string title, string content)
@@ -22,7 +23,7 @@ internal sealed partial class ContentDialogFactory : IContentDialogFactory
await taskContext.SwitchToMainThreadAsync();
ContentDialog dialog = new()
{
XamlRoot = mainWindow.Content.XamlRoot,
XamlRoot = currentWindowReference.Window.Content.XamlRoot,
Title = title,
Content = content,
DefaultButton = ContentDialogButton.Primary,
@@ -38,7 +39,7 @@ internal sealed partial class ContentDialogFactory : IContentDialogFactory
await taskContext.SwitchToMainThreadAsync();
ContentDialog dialog = new()
{
XamlRoot = mainWindow.Content.XamlRoot,
XamlRoot = currentWindowReference.Window.Content.XamlRoot,
Title = title,
Content = content,
DefaultButton = defaultButton,
@@ -55,7 +56,7 @@ internal sealed partial class ContentDialogFactory : IContentDialogFactory
await taskContext.SwitchToMainThreadAsync();
ContentDialog dialog = new()
{
XamlRoot = mainWindow.Content.XamlRoot,
XamlRoot = currentWindowReference.Window.Content.XamlRoot,
Title = title,
Content = new ProgressBar() { IsIndeterminate = true },
};

View File

@@ -3,7 +3,7 @@
"Snap.Hutao": {
"commandName": "MsixPackage",
"nativeDebugging": false,
"doNotLaunchApp": false,
"doNotLaunchApp": true,
"allowLocalNetworkLoopbackProperty": true
},
"[Unpackaged] Snap.Hutao": {