Files
FASS/2.0.0/src/backend/FASS.Simulator/Utility/Message.cs
T

134 lines
6.3 KiB
C#
Raw Normal View History

2026-07-21 19:00:11 +08:00
using Common.NETCore.Timing;
2026-07-14 21:33:39 +08:00
using Common.WindowsDesktop.Consts;
using Common.WindowsDesktop.Enums;
using FASS.Simulator.Models.Message;
using Wpf.Ui;
using Wpf.Ui.Controls;
namespace FASS.Simulator.Utility
{
public static class Message
{
private const string TimestampFormat = "yyyy-MM-dd HH:mm:ss.fff";
private static readonly SolidColorBrush InfoBrush = CreateBrush(AppConst.Color.Info);
private static readonly SolidColorBrush SuccessBrush = CreateBrush(AppConst.Color.Success);
private static readonly SolidColorBrush WarningBrush = CreateBrush(AppConst.Color.Warning);
private static readonly SolidColorBrush ErrorBrush = CreateBrush(AppConst.Color.Error);
private static readonly SolidColorBrush TextBrush = CreateBrush(AppConst.Color.Text);
public static void ShowSnackbar(string title, string message, ControlAppearance appearance, SymbolRegular symbol = SymbolRegular.Fluent24, int timeout = 2)
{
App.Current.GetRequiredService<ISnackbarService>()
.Show(message, title, appearance, new SymbolIcon(symbol), TimeSpan.FromSeconds(timeout));
}
public static void ShowSnackbarInfo(string message, SymbolRegular symbol = SymbolRegular.Info24, int timeout = 2) =>
ShowSnackbar(message, "信息", ControlAppearance.Info, symbol, timeout);
public static void ShowSnackbarSuccess(string message, SymbolRegular symbol = SymbolRegular.CheckmarkCircle24, int timeout = 2) =>
ShowSnackbar(message, "成功", ControlAppearance.Success, symbol, timeout);
public static void ShowSnackbarWarning(string message, SymbolRegular symbol = SymbolRegular.Warning24, int timeout = 2) =>
ShowSnackbar(message, "警告", ControlAppearance.Caution, symbol, timeout);
public static void ShowSnackbarError(string message, SymbolRegular symbol = SymbolRegular.DismissCircle24, int timeout = 2) =>
ShowSnackbar(message, "错误", ControlAppearance.Danger, symbol, timeout);
public static Task<Wpf.Ui.Controls.MessageBoxResult> ShowMessage(string message, string title)
{
var messageBox = new Wpf.Ui.Controls.MessageBox
{
Title = title,
Content = message,
CloseButtonText = "关闭"
};
return messageBox.ShowDialogAsync();
}
public static Task<Wpf.Ui.Controls.MessageBoxResult> ShowMessageInfo(string message) => ShowMessage(message, "信息");
public static Task<Wpf.Ui.Controls.MessageBoxResult> ShowMessageSuccess(string message) => ShowMessage(message, "成功");
public static Task<Wpf.Ui.Controls.MessageBoxResult> ShowMessageWarning(string message) => ShowMessage(message, "警告");
public static Task<Wpf.Ui.Controls.MessageBoxResult> ShowMessageError(string message) => ShowMessage(message, "错误");
public static async Task<Wpf.Ui.Controls.MessageBoxResult> ShowMessageConfirm(string message, Action? ok = null, Action? cancel = null)
{
var messageBox = new Wpf.Ui.Controls.MessageBox
{
Content = message,
Title = "确认",
IsPrimaryButtonEnabled = true,
PrimaryButtonText = "确定",
CloseButtonText = "取消"
};
var result = await messageBox.ShowDialogAsync();
if (result == Wpf.Ui.Controls.MessageBoxResult.Primary)
{
ok?.Invoke();
}
else
{
cancel?.Invoke();
}
return result;
}
public static Task AddMessage(MessageType type, string message, Action<MessageItem> action) =>
type switch
{
MessageType.Info => AddMessageInfo(message, action),
MessageType.Success => AddMessageSuccess(message, action),
MessageType.Warning => AddMessageWarning(message, action),
MessageType.Error => AddMessageError(message, action),
_ => Task.CompletedTask
};
public static Task AddMessageInfo(string message, Action<MessageItem> action) =>
AddMessageInternal(message, InfoBrush, action, includeTimestamp: true);
public static Task AddMessageSuccess(string message, Action<MessageItem> action) =>
AddMessageInternal(message, SuccessBrush, action, includeTimestamp: true);
public static Task AddMessageWarning(string message, Action<MessageItem> action) =>
AddMessageInternal(message, WarningBrush, action, includeTimestamp: true);
public static Task AddMessageError(string message, Action<MessageItem> action) =>
AddMessageInternal(message, ErrorBrush, action, includeTimestamp: true);
public static Task AddText(string text, Action<MessageItem> action, string textColor = AppConst.Color.Text)
{
var brush = textColor == AppConst.Color.Text ? TextBrush : CreateBrush(textColor);
return AddMessageInternal(text, brush, action, includeTimestamp: false);
}
public static Task AddTextInfo(string text, Action<MessageItem> action, string textColor = AppConst.Color.Info) =>
AddText(text, action, textColor);
public static Task AddTextSuccess(string text, Action<MessageItem> action, string textColor = AppConst.Color.Success) =>
AddText(text, action, textColor);
public static Task AddTextWarning(string text, Action<MessageItem> action, string textColor = AppConst.Color.Warning) =>
AddText(text, action, textColor);
public static Task AddTextError(string text, Action<MessageItem> action, string textColor = AppConst.Color.Error) =>
AddText(text, action, textColor);
private static Task AddMessageInternal(string message, Brush brush, Action<MessageItem> action, bool includeTimestamp)
{
2026-07-21 19:00:11 +08:00
var text = includeTimestamp ? $"[ {Clock.Now.ToString(TimestampFormat)} ]=>[ {message} ]" : message;
2026-07-14 21:33:39 +08:00
action(new MessageItem(text, brush));
return Task.CompletedTask;
}
private static SolidColorBrush CreateBrush(string color)
{
var brush = new SolidColorBrush((Color)ColorConverter.ConvertFromString(color));
brush.Freeze();
return brush;
}
}
}