Small refactor to NotificationHelper

This commit is contained in:
Mr-Quin
2024-03-30 15:23:53 -07:00
parent 63bec641af
commit 97f2dc4550
7 changed files with 42 additions and 57 deletions

View File

@@ -70,7 +70,7 @@ public class AutoDomainTask
}
Init();
NotificationHelper.NotifyUsing(t => t.Domain().Started().Build());
NotificationHelper.SendTaskNotificationWithScreenshotUsing(b => b.Domain().Started().Build());
var combatScenes = new CombatScenes().InitializeTeam(GetContentFromDispatcher());
// 前置进入秘境
@@ -114,22 +114,22 @@ public class AutoDomainTask
{
Logger.LogInformation("体力已经耗尽,结束自动秘境");
}
NotificationHelper.NotifyUsing(t => t.Domain().Success().Build());
NotificationHelper.SendTaskNotificationWithScreenshotUsing(b => b.Domain().Success().Build());
break;
}
NotificationHelper.NotifyUsing(t => t.Domain().Progress().Build());
NotificationHelper.SendTaskNotificationWithScreenshotUsing(b => b.Domain().Progress().Build());
}
}
catch (NormalEndException e)
{
Logger.LogInformation("自动秘境中断:" + e.Message);
NotificationHelper.NotifyUsing(t => t.Domain().Cancelled().Build());
NotificationHelper.SendTaskNotificationWithScreenshotUsing(b => b.Domain().Cancelled().Build());
}
catch (Exception e)
{
Logger.LogError(e.Message);
Logger.LogDebug(e.StackTrace);
NotificationHelper.NotifyUsing(t => t.Domain().Failure().Build());
NotificationHelper.SendTaskNotificationWithScreenshotUsing(b => b.Domain().Failure().Build());
}
finally
{

View File

@@ -74,7 +74,7 @@ public class Duel
LogScreenResolution();
_logger.LogInformation("========================================");
_logger.LogInformation("→ {Text}", "全自动七圣召唤,启动!");
NotificationHelper.NotifyUsing(t => t.GeniusInvocation().Started().Build());
NotificationHelper.SendTaskNotificationUsing(b => b.GeniusInvocation().Started().WithScreenshot(taskParam.Dispatcher.GameCapture?.Capture()).Build());
GeniusInvokationControl.GetInstance().Init(taskParam);
SystemControl.ActivateWindow();
@@ -300,13 +300,13 @@ public class Duel
catch (TaskCanceledException ex)
{
_logger.LogInformation(ex.Message);
NotificationHelper.NotifyUsing(t => t.GeniusInvocation().Cancelled().Build());
NotificationHelper.SendTaskNotificationUsing(b => b.GeniusInvocation().Cancelled().WithScreenshot(taskParam.Dispatcher.GameCapture?.Capture()).Build());
}
catch (NormalEndException ex)
{
_logger.LogInformation(ex.Message);
_logger.LogInformation("对局结束");
NotificationHelper.NotifyUsing(t => t.GeniusInvocation().Success().Build());
NotificationHelper.SendTaskNotificationUsing(b => b.GeniusInvocation().Success().WithScreenshot(taskParam.Dispatcher.GameCapture?.Capture()).Build());
}
catch (System.Exception ex)
{
@@ -316,7 +316,7 @@ public class Duel
{
_logger.LogError(ex.StackTrace);
}
NotificationHelper.NotifyUsing(t => t.GeniusInvocation().Failure().Build());
NotificationHelper.SendTaskNotificationUsing(b => b.GeniusInvocation().Failure().WithScreenshot(taskParam.Dispatcher.GameCapture?.Capture()).Build());
}
finally
{

View File

@@ -2,9 +2,7 @@
namespace BetterGenshinImpact.Service.Notification.Builder;
public interface INotificationDataBuilder
public interface INotificationDataBuilder<TNotificationData> where TNotificationData : INotificationData
{
INotificationData Build();
void Send();
TNotificationData Build();
}

View File

@@ -1,26 +1,13 @@
using System.Drawing;
using BetterGenshinImpact.Service.Notification.Model;
using BetterGenshinImpact.Service.Notification.Model.Enum;
using BetterGenshinImpact.Service.Notification.Model;
namespace BetterGenshinImpact.Service.Notification.Builder;
public class LifecycleNotificationBuilder : INotificationDataBuilder
public class LifecycleNotificationBuilder : INotificationDataBuilder<LifecycleNotificationData>
{
private LifecycleNotificationData _notificationData = new();
private readonly LifecycleNotificationData _notificationData = new();
public LifecycleNotificationBuilder AddPayload(string payload)
{
_notificationData.Payload = payload;
return this;
}
public INotificationData Build()
public LifecycleNotificationData Build()
{
return _notificationData;
}
public void Send()
{
NotificationService.Instance().NotifyAllNotifiers(Build());
}
}

View File

@@ -4,23 +4,23 @@ using BetterGenshinImpact.Service.Notification.Model.Enum;
namespace BetterGenshinImpact.Service.Notification.Builder;
public class TaskNotificationBuilder : INotificationDataBuilder
public class TaskNotificationBuilder : INotificationDataBuilder<TaskNotificationData>
{
private TaskNotificationData _notificationData = new();
private readonly TaskNotificationData _notificationData = new();
public TaskNotificationBuilder AddEvent(NotificationEvent notificationEvent)
public TaskNotificationBuilder WithEvent(NotificationEvent notificationEvent)
{
_notificationData.Event = notificationEvent;
return this;
}
public TaskNotificationBuilder AddAction(NotificationAction notificationAction)
public TaskNotificationBuilder WithAction(NotificationAction notificationAction)
{
_notificationData.Action = notificationAction;
return this;
}
public TaskNotificationBuilder AddConclusion(NotificationConclusion? conclusion)
public TaskNotificationBuilder WithConclusion(NotificationConclusion? conclusion)
{
_notificationData.Conclusion = conclusion;
return this;
@@ -28,48 +28,48 @@ public class TaskNotificationBuilder : INotificationDataBuilder
public TaskNotificationBuilder GeniusInvocation()
{
return AddEvent(NotificationEvent.GeniusInvocation);
return WithEvent(NotificationEvent.GeniusInvocation);
}
public TaskNotificationBuilder Domain()
{
return AddEvent(NotificationEvent.Domain);
return WithEvent(NotificationEvent.Domain);
}
public TaskNotificationBuilder Started()
{
return AddAction(NotificationAction.Started);
return WithAction(NotificationAction.Started);
}
public TaskNotificationBuilder Completed()
{
return AddAction(NotificationAction.Completed);
return WithAction(NotificationAction.Completed);
}
public TaskNotificationBuilder Progress()
{
return AddAction(NotificationAction.Progress);
return WithAction(NotificationAction.Progress);
}
public TaskNotificationBuilder Success()
{
return AddAction(NotificationAction.Completed)
.AddConclusion(NotificationConclusion.Success);
return WithAction(NotificationAction.Completed)
.WithConclusion(NotificationConclusion.Success);
}
public TaskNotificationBuilder Failure()
{
return AddAction(NotificationAction.Completed)
.AddConclusion(NotificationConclusion.Failure);
return WithAction(NotificationAction.Completed)
.WithConclusion(NotificationConclusion.Failure);
}
public TaskNotificationBuilder Cancelled()
{
return AddAction(NotificationAction.Completed)
.AddConclusion(NotificationConclusion.Cancelled);
return WithAction(NotificationAction.Completed)
.WithConclusion(NotificationConclusion.Cancelled);
}
public TaskNotificationBuilder AddScreenshot(Image screenshot)
public TaskNotificationBuilder WithScreenshot(Image? screenshot)
{
_notificationData.Screenshot = screenshot;
return this;
@@ -81,13 +81,8 @@ public class TaskNotificationBuilder : INotificationDataBuilder
return this;
}
public INotificationData Build()
public TaskNotificationData Build()
{
return _notificationData;
}
public void Send()
{
NotificationService.Instance().NotifyAllNotifiers(Build());
}
}

View File

@@ -8,8 +8,6 @@ public record LifecycleNotificationData : INotificationData
[JsonConverter(typeof(JsonStringEnumConverter))]
public NotificationEvent Event { get; set; }
public object? Payload { get; set; }
public static LifecycleNotificationData Test()
{
return new LifecycleNotificationData() { Event = NotificationEvent.Test };

View File

@@ -13,9 +13,16 @@ public class NotificationHelper
NotificationService.Instance().NotifyAllNotifiers(notificationData);
}
public static void NotifyUsing(Func<TaskNotificationBuilder, INotificationData> func)
public static void SendTaskNotificationUsing(Func<TaskNotificationBuilder, INotificationData> builderFunc)
{
var builder = new TaskNotificationBuilder();
Notify(builderFunc(builder));
}
public static void SendTaskNotificationWithScreenshotUsing(Func<TaskNotificationBuilder, INotificationData> builderFunc)
{
var builder = new TaskNotificationBuilder();
var screenShot = (Bitmap)TaskControl.GetContentFromDispatcher().SrcBitmap.Clone();
Notify(func(new TaskNotificationBuilder().AddScreenshot(screenShot)));
Notify(builderFunc(builder.WithScreenshot(screenShot)));
}
}