mirror of
https://jihulab.com/DGP-Studio/Snap.Hutao.git
synced 2025-11-19 21:02:53 +08:00
fix a issue where taskbaricon launchgame will open mainwindow
This commit is contained in:
@@ -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
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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!;
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
|||||||
@@ -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; }
|
||||||
|
}
|
||||||
@@ -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 },
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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": {
|
||||||
|
|||||||
Reference in New Issue
Block a user