show warning if discord is not available

This commit is contained in:
qhy040404
2024-02-17 14:00:23 +08:00
parent 22251ca937
commit 75c25cec53
2 changed files with 60 additions and 25 deletions

View File

@@ -132,27 +132,6 @@ internal static class DiscordController
return;
}
// Actually requires a discord client to be running on Windows platform.
// If not, the following creation code will throw.
System.Diagnostics.Process[] discordProcesses = System.Diagnostics.Process.GetProcessesByName("Discord");
if (discordProcesses.Length <= 0)
{
return;
}
foreach (System.Diagnostics.Process process in discordProcesses)
{
try
{
_ = process.Handle;
}
catch (Win32Exception)
{
return;
}
}
lock (SyncRoot)
{
DiscordCreateParams @params = default;

View File

@@ -2,6 +2,7 @@
// Licensed under the MIT license.
using Snap.Hutao.Core;
using Snap.Hutao.Service.Notification;
namespace Snap.Hutao.Service.Discord;
@@ -9,22 +10,77 @@ namespace Snap.Hutao.Service.Discord;
[Injection(InjectAs.Singleton, typeof(IDiscordService))]
internal sealed partial class DiscordService : IDiscordService, IDisposable
{
private readonly IInfoBarService infoBarService;
private readonly RuntimeOptions runtimeOptions;
private bool isInitialized;
public async ValueTask SetPlayingActivityAsync(bool isOversea)
{
_ = isOversea
? await DiscordController.SetPlayingGenshinImpactAsync().ConfigureAwait(false)
: await DiscordController.SetPlayingYuanShenAsync().ConfigureAwait(false);
if (CheckDiscordStatus())
{
_ = isOversea
? await DiscordController.SetPlayingGenshinImpactAsync().ConfigureAwait(false)
: await DiscordController.SetPlayingYuanShenAsync().ConfigureAwait(false);
}
}
public async ValueTask SetNormalActivityAsync()
{
_ = await DiscordController.SetDefaultActivityAsync(runtimeOptions.AppLaunchTime).ConfigureAwait(false);
if (CheckDiscordStatus())
{
_ = await DiscordController.SetDefaultActivityAsync(runtimeOptions.AppLaunchTime).ConfigureAwait(false);
}
}
public void Dispose()
{
DiscordController.Stop();
}
private bool CheckDiscordStatus()
{
try
{
// Actually requires a discord client to be running on Windows platform.
// If not, discord core creation code will throw.
System.Diagnostics.Process[] discordProcesses = System.Diagnostics.Process.GetProcessesByName("Discord");
if (discordProcesses.Length <= 0)
{
if (!isInitialized)
{
infoBarService.Warning("Discord 未运行,将无法设置 Discord Activity 状态。");
}
return false;
}
foreach (System.Diagnostics.Process process in discordProcesses)
{
try
{
_ = process.Handle;
}
catch (Win32Exception)
{
if (!isInitialized)
{
infoBarService.Warning("权限不足,将无法设置 Discord Activity 状态。");
}
return false;
}
}
return true;
}
finally
{
if (!isInitialized)
{
isInitialized = true;
}
}
}
}