diff --git a/SalmonEgg/SalmonEgg/Controls/ChatSkeleton.xaml.cs b/SalmonEgg/SalmonEgg/Controls/ChatSkeleton.xaml.cs index a7e3f8dc..fa2836d6 100644 --- a/SalmonEgg/SalmonEgg/Controls/ChatSkeleton.xaml.cs +++ b/SalmonEgg/SalmonEgg/Controls/ChatSkeleton.xaml.cs @@ -1,21 +1,20 @@ using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; -namespace SalmonEgg.Controls +namespace SalmonEgg.Controls; + +public sealed partial class ChatSkeleton : UserControl { - public sealed partial class ChatSkeleton : UserControl + public ChatSkeleton() { - public ChatSkeleton() - { - InitializeComponent(); - Loaded += OnLoaded; - Unloaded += OnUnloaded; - } + InitializeComponent(); + Loaded += OnLoaded; + Unloaded += OnUnloaded; + } - private void OnLoaded(object sender, RoutedEventArgs e) - => ShimmerStoryboard.Begin(); + private void OnLoaded(object sender, RoutedEventArgs e) + => ShimmerStoryboard.Begin(); - private void OnUnloaded(object sender, RoutedEventArgs e) - => ShimmerStoryboard.Stop(); - } + private void OnUnloaded(object sender, RoutedEventArgs e) + => ShimmerStoryboard.Stop(); } diff --git a/SalmonEgg/SalmonEgg/Presentation/Converters/BoolToVisibilityConverter.cs b/SalmonEgg/SalmonEgg/Presentation/Converters/BoolToVisibilityConverter.cs index 3a39b8d1..f08a706f 100644 --- a/SalmonEgg/SalmonEgg/Presentation/Converters/BoolToVisibilityConverter.cs +++ b/SalmonEgg/SalmonEgg/Presentation/Converters/BoolToVisibilityConverter.cs @@ -2,41 +2,40 @@ using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Data; -namespace SalmonEgg.Presentation.Converters +namespace SalmonEgg.Presentation.Converters; + +/// +/// 将布尔值转换为 Visibility +/// Requirements: 4.2 +/// +public class BoolToVisibilityConverter : IValueConverter { - /// - /// 将布尔值转换为 Visibility - /// Requirements: 4.2 - /// - public class BoolToVisibilityConverter : IValueConverter + public object Convert(object value, Type targetType, object parameter, string language) { - public object Convert(object value, Type targetType, object parameter, string language) + if (value is bool boolValue) { - if (value is bool boolValue) - { - bool invert = parameter?.ToString() == "Invert"; - if (invert) boolValue = !boolValue; - return boolValue ? Visibility.Visible : Visibility.Collapsed; - } - - if (value is string stringValue) - { - return string.IsNullOrWhiteSpace(stringValue) ? Visibility.Collapsed : Visibility.Visible; - } - - return Visibility.Collapsed; + bool invert = parameter?.ToString() == "Invert"; + if (invert) boolValue = !boolValue; + return boolValue ? Visibility.Visible : Visibility.Collapsed; } - public object ConvertBack(object value, Type targetType, object parameter, string language) + if (value is string stringValue) { - if (value is Visibility visibility) - { - var result = visibility == Visibility.Visible; - var invert = parameter?.ToString() == "Invert"; - return invert ? !result : result; - } + return string.IsNullOrWhiteSpace(stringValue) ? Visibility.Collapsed : Visibility.Visible; + } - return false; + return Visibility.Collapsed; + } + + public object ConvertBack(object value, Type targetType, object parameter, string language) + { + if (value is Visibility visibility) + { + var result = visibility == Visibility.Visible; + var invert = parameter?.ToString() == "Invert"; + return invert ? !result : result; } + + return false; } } diff --git a/SalmonEgg/SalmonEgg/Presentation/Converters/ConnectionStatusToColorConverter.cs b/SalmonEgg/SalmonEgg/Presentation/Converters/ConnectionStatusToColorConverter.cs index e00d23d9..5fbd4efe 100644 --- a/SalmonEgg/SalmonEgg/Presentation/Converters/ConnectionStatusToColorConverter.cs +++ b/SalmonEgg/SalmonEgg/Presentation/Converters/ConnectionStatusToColorConverter.cs @@ -3,33 +3,32 @@ using Microsoft.UI.Xaml.Media; using SalmonEgg.Domain.Models; -namespace SalmonEgg.Presentation.Converters +namespace SalmonEgg.Presentation.Converters; + +/// +/// 将连接状态转换为颜色 +/// Requirements: 4.2 +/// +public class ConnectionStatusToColorConverter : IValueConverter { - /// - /// 将连接状态转换为颜色 - /// Requirements: 4.2 - /// - public class ConnectionStatusToColorConverter : IValueConverter + public object Convert(object value, Type targetType, object parameter, string language) { - public object Convert(object value, Type targetType, object parameter, string language) + if (value is ConnectionStatus status) { - if (value is ConnectionStatus status) + return status switch { - return status switch - { - ConnectionStatus.Connected => new SolidColorBrush(Microsoft.UI.ColorHelper.FromArgb(255, 34, 197, 94)), // Green - ConnectionStatus.Connecting => new SolidColorBrush(Microsoft.UI.ColorHelper.FromArgb(255, 234, 179, 8)), // Yellow - ConnectionStatus.Reconnecting => new SolidColorBrush(Microsoft.UI.ColorHelper.FromArgb(255, 249, 115, 22)),// Orange - ConnectionStatus.Error => new SolidColorBrush(Microsoft.UI.ColorHelper.FromArgb(255, 239, 68, 68)), // Red - _ => new SolidColorBrush(Microsoft.UI.ColorHelper.FromArgb(255, 156, 163, 175)) // Gray - }; - } - return new SolidColorBrush(Microsoft.UI.ColorHelper.FromArgb(255, 156, 163, 175)); + ConnectionStatus.Connected => new SolidColorBrush(Microsoft.UI.ColorHelper.FromArgb(255, 34, 197, 94)), // Green + ConnectionStatus.Connecting => new SolidColorBrush(Microsoft.UI.ColorHelper.FromArgb(255, 234, 179, 8)), // Yellow + ConnectionStatus.Reconnecting => new SolidColorBrush(Microsoft.UI.ColorHelper.FromArgb(255, 249, 115, 22)),// Orange + ConnectionStatus.Error => new SolidColorBrush(Microsoft.UI.ColorHelper.FromArgb(255, 239, 68, 68)), // Red + _ => new SolidColorBrush(Microsoft.UI.ColorHelper.FromArgb(255, 156, 163, 175)) // Gray + }; } + return new SolidColorBrush(Microsoft.UI.ColorHelper.FromArgb(255, 156, 163, 175)); + } - public object ConvertBack(object value, Type targetType, object parameter, string language) - { - throw new NotImplementedException(); - } + public object ConvertBack(object value, Type targetType, object parameter, string language) + { + throw new NotImplementedException(); } } diff --git a/SalmonEgg/SalmonEgg/Presentation/Converters/InverseBoolConverter.cs b/SalmonEgg/SalmonEgg/Presentation/Converters/InverseBoolConverter.cs index f4ea2723..fb3f605d 100644 --- a/SalmonEgg/SalmonEgg/Presentation/Converters/InverseBoolConverter.cs +++ b/SalmonEgg/SalmonEgg/Presentation/Converters/InverseBoolConverter.cs @@ -2,29 +2,28 @@ using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Data; -namespace SalmonEgg.Presentation.Converters +namespace SalmonEgg.Presentation.Converters; + +/// +/// 将布尔值取反后转换为 Visibility +/// +public class InverseBoolConverter : IValueConverter { - /// - /// 将布尔值取反后转换为 Visibility - /// - public class InverseBoolConverter : IValueConverter + public object Convert(object value, Type targetType, object parameter, string language) { - public object Convert(object value, Type targetType, object parameter, string language) + if (value is bool boolValue) { - if (value is bool boolValue) - { - return boolValue ? Visibility.Collapsed : Visibility.Visible; - } - return Visibility.Visible; + return boolValue ? Visibility.Collapsed : Visibility.Visible; } + return Visibility.Visible; + } - public object ConvertBack(object value, Type targetType, object parameter, string language) + public object ConvertBack(object value, Type targetType, object parameter, string language) + { + if (value is Visibility visibility) { - if (value is Visibility visibility) - { - return visibility == Visibility.Collapsed; - } - return true; + return visibility == Visibility.Collapsed; } + return true; } } diff --git a/SalmonEgg/SalmonEgg/Presentation/Converters/InverseBooleanConverter.cs b/SalmonEgg/SalmonEgg/Presentation/Converters/InverseBooleanConverter.cs index a1970cd3..bcae5098 100644 --- a/SalmonEgg/SalmonEgg/Presentation/Converters/InverseBooleanConverter.cs +++ b/SalmonEgg/SalmonEgg/Presentation/Converters/InverseBooleanConverter.cs @@ -1,30 +1,29 @@ using System; using Microsoft.UI.Xaml.Data; -namespace SalmonEgg.Presentation.Converters +namespace SalmonEgg.Presentation.Converters; + +/// +/// 将布尔值取反(返回 bool,不是 Visibility) +/// 用于 IsEnabled 等需要 bool 的属性 +/// +public class InverseBooleanConverter : IValueConverter { - /// - /// 将布尔值取反(返回 bool,不是 Visibility) - /// 用于 IsEnabled 等需要 bool 的属性 - /// - public class InverseBooleanConverter : IValueConverter + public object Convert(object value, Type targetType, object parameter, string language) { - public object Convert(object value, Type targetType, object parameter, string language) + if (value is bool boolValue) { - if (value is bool boolValue) - { - return !boolValue; - } - return true; + return !boolValue; } + return true; + } - public object ConvertBack(object value, Type targetType, object parameter, string language) + public object ConvertBack(object value, Type targetType, object parameter, string language) + { + if (value is bool boolValue) { - if (value is bool boolValue) - { - return !boolValue; - } - return false; + return !boolValue; } + return false; } } diff --git a/SalmonEgg/SalmonEgg/Presentation/Converters/MessageDirectionToAlignmentConverter.cs b/SalmonEgg/SalmonEgg/Presentation/Converters/MessageDirectionToAlignmentConverter.cs index 0aef72f5..0add733d 100644 --- a/SalmonEgg/SalmonEgg/Presentation/Converters/MessageDirectionToAlignmentConverter.cs +++ b/SalmonEgg/SalmonEgg/Presentation/Converters/MessageDirectionToAlignmentConverter.cs @@ -2,26 +2,25 @@ using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Data; -namespace SalmonEgg.Presentation.Converters +namespace SalmonEgg.Presentation.Converters; + +/// +/// 将消息方向转换为对齐方式 +/// Requirements: 4.2 +/// +public class MessageDirectionToAlignmentConverter : IValueConverter { - /// - /// 将消息方向转换为对齐方式 - /// Requirements: 4.2 - /// - public class MessageDirectionToAlignmentConverter : IValueConverter + public object Convert(object value, Type targetType, object parameter, string language) { - public object Convert(object value, Type targetType, object parameter, string language) + if (value is bool isOutgoing) { - if (value is bool isOutgoing) - { - return isOutgoing ? HorizontalAlignment.Right : HorizontalAlignment.Left; - } - return HorizontalAlignment.Left; + return isOutgoing ? HorizontalAlignment.Right : HorizontalAlignment.Left; } + return HorizontalAlignment.Left; + } - public object ConvertBack(object value, Type targetType, object parameter, string language) - { - throw new NotImplementedException(); - } + public object ConvertBack(object value, Type targetType, object parameter, string language) + { + throw new NotImplementedException(); } } diff --git a/SalmonEgg/SalmonEgg/Presentation/Converters/MessageDirectionToBackgroundConverter.cs b/SalmonEgg/SalmonEgg/Presentation/Converters/MessageDirectionToBackgroundConverter.cs index c63efb26..1ae8e53a 100644 --- a/SalmonEgg/SalmonEgg/Presentation/Converters/MessageDirectionToBackgroundConverter.cs +++ b/SalmonEgg/SalmonEgg/Presentation/Converters/MessageDirectionToBackgroundConverter.cs @@ -3,42 +3,41 @@ using Microsoft.UI.Xaml.Data; using Microsoft.UI.Xaml.Media; -namespace SalmonEgg.Presentation.Converters +namespace SalmonEgg.Presentation.Converters; + +/// +/// 将消息方向转换为背景色画刷 +/// 用户发出(True)返回 AccentFillColorDefaultBrush +/// AI接收(False)返回 CardBackgroundFillColorDefaultBrush +/// +public class MessageDirectionToBackgroundConverter : IValueConverter { - /// - /// 将消息方向转换为背景色画刷 - /// 用户发出(True)返回 AccentFillColorDefaultBrush - /// AI接收(False)返回 CardBackgroundFillColorDefaultBrush - /// - public class MessageDirectionToBackgroundConverter : IValueConverter + public object Convert(object value, Type targetType, object parameter, string language) { - public object Convert(object value, Type targetType, object parameter, string language) + if (value is bool isOutgoing) { - if (value is bool isOutgoing) + if (isOutgoing) { - if (isOutgoing) + if (Microsoft.UI.Xaml.Application.Current.Resources.TryGetValue("AccentFillColorDefaultBrush", out var accentBrush)) { - if (Microsoft.UI.Xaml.Application.Current.Resources.TryGetValue("AccentFillColorDefaultBrush", out var accentBrush)) - { - return accentBrush; - } + return accentBrush; } - else + } + else + { + if (Microsoft.UI.Xaml.Application.Current.Resources.TryGetValue("ControlFillColorSecondaryBrush", out var cardBrush)) { - if (Microsoft.UI.Xaml.Application.Current.Resources.TryGetValue("ControlFillColorSecondaryBrush", out var cardBrush)) - { - return cardBrush; - } + return cardBrush; } } - - // Fallback - return Microsoft.UI.Xaml.Application.Current.Resources["LayerOnAcrylicFillColorDefaultBrush"]; } - public object ConvertBack(object value, Type targetType, object parameter, string language) - { - throw new NotImplementedException(); - } + // Fallback + return Microsoft.UI.Xaml.Application.Current.Resources["LayerOnAcrylicFillColorDefaultBrush"]; + } + + public object ConvertBack(object value, Type targetType, object parameter, string language) + { + throw new NotImplementedException(); } } diff --git a/SalmonEgg/SalmonEgg/Presentation/Converters/MessageDirectionToBorderThicknessConverter.cs b/SalmonEgg/SalmonEgg/Presentation/Converters/MessageDirectionToBorderThicknessConverter.cs index 519db77d..2240c57a 100644 --- a/SalmonEgg/SalmonEgg/Presentation/Converters/MessageDirectionToBorderThicknessConverter.cs +++ b/SalmonEgg/SalmonEgg/Presentation/Converters/MessageDirectionToBorderThicknessConverter.cs @@ -2,28 +2,27 @@ using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Data; -namespace SalmonEgg.Presentation.Converters +namespace SalmonEgg.Presentation.Converters; + +/// +/// 将消息方向转换为边框粗细 +/// 用户发出(True)返回 0 (无边框,颜色深不需要) +/// AI接收(False)返回 1 (浅色模式下需要边框建立层级感) +/// +public class MessageDirectionToBorderThicknessConverter : IValueConverter { - /// - /// 将消息方向转换为边框粗细 - /// 用户发出(True)返回 0 (无边框,颜色深不需要) - /// AI接收(False)返回 1 (浅色模式下需要边框建立层级感) - /// - public class MessageDirectionToBorderThicknessConverter : IValueConverter + public object Convert(object value, Type targetType, object parameter, string language) { - public object Convert(object value, Type targetType, object parameter, string language) + if (value is bool isOutgoing) { - if (value is bool isOutgoing) - { - // AI 消息返回 1,用户消息返回 0 - return isOutgoing ? new Thickness(0) : new Thickness(1); - } - return new Thickness(0); + // AI 消息返回 1,用户消息返回 0 + return isOutgoing ? new Thickness(0) : new Thickness(1); } + return new Thickness(0); + } - public object ConvertBack(object value, Type targetType, object parameter, string language) - { - throw new NotImplementedException(); - } + public object ConvertBack(object value, Type targetType, object parameter, string language) + { + throw new NotImplementedException(); } } diff --git a/SalmonEgg/SalmonEgg/Presentation/Converters/MessageDirectionToCornerRadiusConverter.cs b/SalmonEgg/SalmonEgg/Presentation/Converters/MessageDirectionToCornerRadiusConverter.cs index c6f61a63..d1841a9f 100644 --- a/SalmonEgg/SalmonEgg/Presentation/Converters/MessageDirectionToCornerRadiusConverter.cs +++ b/SalmonEgg/SalmonEgg/Presentation/Converters/MessageDirectionToCornerRadiusConverter.cs @@ -2,28 +2,27 @@ using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Data; -namespace SalmonEgg.Presentation.Converters +namespace SalmonEgg.Presentation.Converters; + +/// +/// 将消息方向转换为气泡的非对称圆角 +/// 用户发出(True)为右下直角,左下圆角 +/// AI接收(False)为左下直角,右下圆角 +/// +public class MessageDirectionToCornerRadiusConverter : IValueConverter { - /// - /// 将消息方向转换为气泡的非对称圆角 - /// 用户发出(True)为右下直角,左下圆角 - /// AI接收(False)为左下直角,右下圆角 - /// - public class MessageDirectionToCornerRadiusConverter : IValueConverter + public object Convert(object value, Type targetType, object parameter, string language) { - public object Convert(object value, Type targetType, object parameter, string language) + if (value is bool isOutgoing) { - if (value is bool isOutgoing) - { - // 左上, 右上, 右下, 左下 - return isOutgoing ? new CornerRadius(12, 12, 0, 12) : new CornerRadius(12, 12, 12, 0); - } - return new CornerRadius(12); + // 左上, 右上, 右下, 左下 + return isOutgoing ? new CornerRadius(12, 12, 0, 12) : new CornerRadius(12, 12, 12, 0); } + return new CornerRadius(12); + } - public object ConvertBack(object value, Type targetType, object parameter, string language) - { - throw new NotImplementedException(); - } + public object ConvertBack(object value, Type targetType, object parameter, string language) + { + throw new NotImplementedException(); } } diff --git a/SalmonEgg/SalmonEgg/Presentation/Converters/MessageDirectionToForegroundConverter.cs b/SalmonEgg/SalmonEgg/Presentation/Converters/MessageDirectionToForegroundConverter.cs index 5a7f6ed8..bdedd40d 100644 --- a/SalmonEgg/SalmonEgg/Presentation/Converters/MessageDirectionToForegroundConverter.cs +++ b/SalmonEgg/SalmonEgg/Presentation/Converters/MessageDirectionToForegroundConverter.cs @@ -3,42 +3,41 @@ using Microsoft.UI.Xaml.Data; using Microsoft.UI.Xaml.Media; -namespace SalmonEgg.Presentation.Converters +namespace SalmonEgg.Presentation.Converters; + +/// +/// 将消息方向转换为前景色(文本色)画刷 +/// 用户发出(True)返回 TextOnAccentFillColorPrimaryBrush +/// AI接收(False)返回 TextFillColorPrimaryBrush +/// +public class MessageDirectionToForegroundConverter : IValueConverter { - /// - /// 将消息方向转换为前景色(文本色)画刷 - /// 用户发出(True)返回 TextOnAccentFillColorPrimaryBrush - /// AI接收(False)返回 TextFillColorPrimaryBrush - /// - public class MessageDirectionToForegroundConverter : IValueConverter + public object Convert(object value, Type targetType, object parameter, string language) { - public object Convert(object value, Type targetType, object parameter, string language) + if (value is bool isOutgoing) { - if (value is bool isOutgoing) + if (isOutgoing) { - if (isOutgoing) + if (Microsoft.UI.Xaml.Application.Current.Resources.TryGetValue("TextOnAccentFillColorPrimaryBrush", out var textOnAccent)) { - if (Microsoft.UI.Xaml.Application.Current.Resources.TryGetValue("TextOnAccentFillColorPrimaryBrush", out var textOnAccent)) - { - return textOnAccent; - } + return textOnAccent; } - else + } + else + { + if (Microsoft.UI.Xaml.Application.Current.Resources.TryGetValue("TextFillColorPrimaryBrush", out var textPrimary)) { - if (Microsoft.UI.Xaml.Application.Current.Resources.TryGetValue("TextFillColorPrimaryBrush", out var textPrimary)) - { - return textPrimary; - } + return textPrimary; } } - - // Fallback - return Microsoft.UI.Xaml.Application.Current.Resources["TextFillColorPrimaryBrush"]; } - public object ConvertBack(object value, Type targetType, object parameter, string language) - { - throw new NotImplementedException(); - } + // Fallback + return Microsoft.UI.Xaml.Application.Current.Resources["TextFillColorPrimaryBrush"]; + } + + public object ConvertBack(object value, Type targetType, object parameter, string language) + { + throw new NotImplementedException(); } } diff --git a/SalmonEgg/SalmonEgg/Presentation/Converters/MessageTemplateSelector.cs b/SalmonEgg/SalmonEgg/Presentation/Converters/MessageTemplateSelector.cs index 28ff6982..796a8ae5 100644 --- a/SalmonEgg/SalmonEgg/Presentation/Converters/MessageTemplateSelector.cs +++ b/SalmonEgg/SalmonEgg/Presentation/Converters/MessageTemplateSelector.cs @@ -1,6 +1,6 @@ +using System; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; -using System; using SalmonEgg.Presentation.ViewModels.Chat; namespace SalmonEgg.Presentation.Converters; diff --git a/SalmonEgg/SalmonEgg/Presentation/Converters/PlanStatusToColorConverter.cs b/SalmonEgg/SalmonEgg/Presentation/Converters/PlanStatusToColorConverter.cs index 1fd29337..265e7945 100644 --- a/SalmonEgg/SalmonEgg/Presentation/Converters/PlanStatusToColorConverter.cs +++ b/SalmonEgg/SalmonEgg/Presentation/Converters/PlanStatusToColorConverter.cs @@ -4,32 +4,31 @@ using Microsoft.UI.Xaml.Media; using SalmonEgg.Domain.Models.Plan; -namespace SalmonEgg.Presentation.Converters +namespace SalmonEgg.Presentation.Converters; + +/// +/// 将计划条目状态转换为对应的颜色 +/// +public class PlanStatusToColorConverter : IValueConverter { - /// - /// 将计划条目状态转换为对应的颜色 - /// - public class PlanStatusToColorConverter : IValueConverter + public object Convert(object value, Type targetType, object parameter, string language) { - public object Convert(object value, Type targetType, object parameter, string language) + if (value is PlanEntryStatus status) { - if (value is PlanEntryStatus status) + return status switch { - return status switch - { - PlanEntryStatus.Pending => new SolidColorBrush(Microsoft.UI.Colors.Gray), - PlanEntryStatus.InProgress => new SolidColorBrush(Microsoft.UI.ColorHelper.FromArgb(255, 0, 120, 215)), - PlanEntryStatus.Completed => new SolidColorBrush(Microsoft.UI.ColorHelper.FromArgb(255, 0, 180, 0)), - PlanEntryStatus.Failed => new SolidColorBrush(Microsoft.UI.ColorHelper.FromArgb(255, 200, 40, 40)), - _ => new SolidColorBrush(Microsoft.UI.Colors.Gray) - }; - } - return new SolidColorBrush(Microsoft.UI.Colors.Gray); + PlanEntryStatus.Pending => new SolidColorBrush(Microsoft.UI.Colors.Gray), + PlanEntryStatus.InProgress => new SolidColorBrush(Microsoft.UI.ColorHelper.FromArgb(255, 0, 120, 215)), + PlanEntryStatus.Completed => new SolidColorBrush(Microsoft.UI.ColorHelper.FromArgb(255, 0, 180, 0)), + PlanEntryStatus.Failed => new SolidColorBrush(Microsoft.UI.ColorHelper.FromArgb(255, 200, 40, 40)), + _ => new SolidColorBrush(Microsoft.UI.Colors.Gray) + }; } + return new SolidColorBrush(Microsoft.UI.Colors.Gray); + } - public object ConvertBack(object value, Type targetType, object parameter, string language) - { - throw new NotImplementedException(); - } + public object ConvertBack(object value, Type targetType, object parameter, string language) + { + throw new NotImplementedException(); } } diff --git a/SalmonEgg/SalmonEgg/Presentation/Converters/TimeFormatConverter.cs b/SalmonEgg/SalmonEgg/Presentation/Converters/TimeFormatConverter.cs index 71f7f198..950767ed 100644 --- a/SalmonEgg/SalmonEgg/Presentation/Converters/TimeFormatConverter.cs +++ b/SalmonEgg/SalmonEgg/Presentation/Converters/TimeFormatConverter.cs @@ -1,25 +1,24 @@ using System; using Microsoft.UI.Xaml.Data; -namespace SalmonEgg.Presentation.Converters +namespace SalmonEgg.Presentation.Converters; + +/// +/// 将 DateTime 转换为时间字符串格式 (HH:mm:ss) +/// +public class TimeFormatConverter : IValueConverter { - /// - /// 将 DateTime 转换为时间字符串格式 (HH:mm:ss) - /// - public class TimeFormatConverter : IValueConverter + public object Convert(object value, Type targetType, object parameter, string language) { - public object Convert(object value, Type targetType, object parameter, string language) + if (value is DateTime dateTime) { - if (value is DateTime dateTime) - { - return dateTime.ToString("HH:mm:ss"); - } - return string.Empty; + return dateTime.ToString("HH:mm:ss"); } + return string.Empty; + } - public object ConvertBack(object value, Type targetType, object parameter, string language) - { - throw new NotImplementedException(); - } + public object ConvertBack(object value, Type targetType, object parameter, string language) + { + throw new NotImplementedException(); } } diff --git a/SalmonEgg/SalmonEgg/Presentation/Views/GeneralSettingsPage.xaml.cs b/SalmonEgg/SalmonEgg/Presentation/Views/GeneralSettingsPage.xaml.cs index e1a2ed15..80a98fac 100644 --- a/SalmonEgg/SalmonEgg/Presentation/Views/GeneralSettingsPage.xaml.cs +++ b/SalmonEgg/SalmonEgg/Presentation/Views/GeneralSettingsPage.xaml.cs @@ -1,8 +1,8 @@ using Microsoft.UI.Xaml.Controls; using SalmonEgg.Presentation.ViewModels.Settings; -namespace SalmonEgg.Presentation.Views -{ +namespace SalmonEgg.Presentation.Views; + public sealed partial class GeneralSettingsPage : SettingsPageBase { public GeneralSettingsViewModel ViewModel { get; } @@ -14,4 +14,3 @@ public GeneralSettingsPage() SetSettingsBreadcrumbFromResource("SettingsNav_General.Content", "常规"); } } -} diff --git a/SalmonEgg/SalmonEgg/SalmonEgg.csproj b/SalmonEgg/SalmonEgg/SalmonEgg.csproj index a40ec36c..b26d30fd 100644 --- a/SalmonEgg/SalmonEgg/SalmonEgg.csproj +++ b/SalmonEgg/SalmonEgg/SalmonEgg.csproj @@ -1,5 +1,6 @@ + true BrowserWasm false browser-wasm diff --git a/src/SalmonEgg.Infrastructure.Desktop/Services/PlatformShellService.cs b/src/SalmonEgg.Infrastructure.Desktop/Services/PlatformShellService.cs index 57ab9bd0..c05daf8b 100644 --- a/src/SalmonEgg.Infrastructure.Desktop/Services/PlatformShellService.cs +++ b/src/SalmonEgg.Infrastructure.Desktop/Services/PlatformShellService.cs @@ -55,13 +55,27 @@ private Task OpenWithShellAsync(string path) return Task.FromResult(true); } + var sanitizedPath = path.StartsWith("-") ? $"./{path}" : path; + if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) { - Process.Start("open", path); + var psi = new ProcessStartInfo + { + FileName = "open", + UseShellExecute = false + }; + psi.ArgumentList.Add(sanitizedPath); + Process.Start(psi); return Task.FromResult(true); } - Process.Start("xdg-open", path); + var linuxPsi = new ProcessStartInfo + { + FileName = "xdg-open", + UseShellExecute = false + }; + linuxPsi.ArgumentList.Add(sanitizedPath); + Process.Start(linuxPsi); return Task.FromResult(true); } catch diff --git a/tests/SalmonEgg.Presentation.Core.Tests/SalmonEgg.Presentation.Core.Tests.csproj b/tests/SalmonEgg.Presentation.Core.Tests/SalmonEgg.Presentation.Core.Tests.csproj index 7ee9a2af..b9e81011 100644 --- a/tests/SalmonEgg.Presentation.Core.Tests/SalmonEgg.Presentation.Core.Tests.csproj +++ b/tests/SalmonEgg.Presentation.Core.Tests/SalmonEgg.Presentation.Core.Tests.csproj @@ -1,5 +1,6 @@ + true net10.0 enable enable