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 CommunityToolkit.WinUI.Notifications;
using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Caching.Memory;
using Microsoft.UI.Xaml;
using Microsoft.Windows.AppLifecycle; using Microsoft.Windows.AppLifecycle;
using Snap.Hutao.Core.Setting; using Snap.Hutao.Core.Setting;
using Snap.Hutao.Service.DailyNote; using Snap.Hutao.Service.DailyNote;
@@ -18,9 +19,10 @@ namespace Snap.Hutao.Core.LifeCycle;
/// 激活 /// 激活
/// </summary> /// </summary>
[HighQuality] [HighQuality]
[ConstructorGenerated]
[Injection(InjectAs.Singleton, typeof(IActivation))] [Injection(InjectAs.Singleton, typeof(IActivation))]
[SuppressMessage("", "CA1001")] [SuppressMessage("", "CA1001")]
internal sealed class Activation : IActivation internal sealed partial class Activation : IActivation
{ {
/// <summary> /// <summary>
/// 操作 /// 操作
@@ -48,20 +50,11 @@ internal sealed class Activation : IActivation
private const string UrlActionRefresh = "/REFRESH"; private const string UrlActionRefresh = "/REFRESH";
private readonly IServiceProvider serviceProvider; private readonly IServiceProvider serviceProvider;
private readonly ICurrentWindowReference currentWindowReference;
private readonly ITaskContext taskContext; private readonly ITaskContext taskContext;
private readonly WeakReference<MainWindow> mainWindowReference = new(default!); //private readonly WeakReference<MainWindow> mainWindowReference = new(default!);
private readonly SemaphoreSlim activateSemaphore = new(1); private readonly SemaphoreSlim activateSemaphore = new(1);
/// <summary>
/// 构造一个新的激活
/// </summary>
/// <param name="serviceProvider">服务提供器</param>
public Activation(IServiceProvider serviceProvider)
{
taskContext = serviceProvider.GetRequiredService<ITaskContext>();
this.serviceProvider = serviceProvider;
}
/// <inheritdoc/> /// <inheritdoc/>
public void Activate(object? sender, AppActivationArguments args) public void Activate(object? sender, AppActivationArguments args)
{ {
@@ -163,11 +156,11 @@ internal sealed class Activation : IActivation
private async ValueTask WaitMainWindowAsync() private async ValueTask WaitMainWindowAsync()
{ {
if (!mainWindowReference.TryGetTarget(out _)) if (currentWindowReference.Window is null)
{ {
await taskContext.SwitchToMainThreadAsync(); await taskContext.SwitchToMainThreadAsync();
mainWindowReference.SetTarget(serviceProvider.GetRequiredService<MainWindow>()); currentWindowReference.Window = serviceProvider.GetRequiredService<MainWindow>();
serviceProvider serviceProvider
.GetRequiredService<IMetadataService>() .GetRequiredService<IMetadataService>()
@@ -272,9 +265,9 @@ internal sealed class Activation : IActivation
await taskContext.SwitchToMainThreadAsync(); await taskContext.SwitchToMainThreadAsync();
if (!mainWindowReference.TryGetTarget(out _)) if (currentWindowReference.Window is null)
{ {
_ = serviceProvider.GetRequiredService<LaunchGameWindow>(); currentWindowReference.Window = serviceProvider.GetRequiredService<LaunchGameWindow>();
} }
else 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. // Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license. // Licensed under the MIT license.
using Microsoft.UI.Xaml;
using Microsoft.Windows.AppLifecycle; using Microsoft.Windows.AppLifecycle;
namespace Snap.Hutao.Core.LifeCycle; 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. // Licensed under the MIT license.
using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Controls;
using Snap.Hutao.Core.LifeCycle;
using Snap.Hutao.Factory.Abstraction; using Snap.Hutao.Factory.Abstraction;
namespace Snap.Hutao.Factory; namespace Snap.Hutao.Factory;
@@ -14,7 +15,7 @@ internal sealed partial class ContentDialogFactory : IContentDialogFactory
{ {
private readonly IServiceProvider serviceProvider; private readonly IServiceProvider serviceProvider;
private readonly ITaskContext taskContext; private readonly ITaskContext taskContext;
private readonly MainWindow mainWindow; private readonly ICurrentWindowReference currentWindowReference;
/// <inheritdoc/> /// <inheritdoc/>
public async ValueTask<ContentDialogResult> CreateForConfirmAsync(string title, string content) public async ValueTask<ContentDialogResult> CreateForConfirmAsync(string title, string content)
@@ -22,7 +23,7 @@ internal sealed partial class ContentDialogFactory : IContentDialogFactory
await taskContext.SwitchToMainThreadAsync(); await taskContext.SwitchToMainThreadAsync();
ContentDialog dialog = new() ContentDialog dialog = new()
{ {
XamlRoot = mainWindow.Content.XamlRoot, XamlRoot = currentWindowReference.Window.Content.XamlRoot,
Title = title, Title = title,
Content = content, Content = content,
DefaultButton = ContentDialogButton.Primary, DefaultButton = ContentDialogButton.Primary,
@@ -38,7 +39,7 @@ internal sealed partial class ContentDialogFactory : IContentDialogFactory
await taskContext.SwitchToMainThreadAsync(); await taskContext.SwitchToMainThreadAsync();
ContentDialog dialog = new() ContentDialog dialog = new()
{ {
XamlRoot = mainWindow.Content.XamlRoot, XamlRoot = currentWindowReference.Window.Content.XamlRoot,
Title = title, Title = title,
Content = content, Content = content,
DefaultButton = defaultButton, DefaultButton = defaultButton,
@@ -55,7 +56,7 @@ internal sealed partial class ContentDialogFactory : IContentDialogFactory
await taskContext.SwitchToMainThreadAsync(); await taskContext.SwitchToMainThreadAsync();
ContentDialog dialog = new() ContentDialog dialog = new()
{ {
XamlRoot = mainWindow.Content.XamlRoot, XamlRoot = currentWindowReference.Window.Content.XamlRoot,
Title = title, Title = title,
Content = new ProgressBar() { IsIndeterminate = true }, Content = new ProgressBar() { IsIndeterminate = true },
}; };

View File

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