using CommunityToolkit.Mvvm.ComponentModel; namespace CloudPrint.Client.Models; public enum PrinterStatus { Idle = 0, Printing = 1, Offline = 2, Error = 3, Unknown = 99 } public sealed partial class PrinterInfo : ObservableObject { [ObservableProperty] [NotifyPropertyChangedFor(nameof(DisplayText))] private int queueCount; [ObservableProperty] [NotifyPropertyChangedFor(nameof(DisplayText))] private string statusMessage = string.Empty; [ObservableProperty] [NotifyPropertyChangedFor(nameof(StatusText))] [NotifyPropertyChangedFor(nameof(DisplayText))] private PrinterStatus status; public int Id { get; init; } public string Name { get; init; } = string.Empty; public string DisplayName { get; init; } = string.Empty; public bool IsActive { get; init; } = true; public string ApiKey { get; init; } = string.Empty; public DateTime? LastHeartbeat { get; set; } partial void OnQueueCountChanged(int value) { if (value < 0) { QueueCount = 0; } } public string StatusText => Status switch { PrinterStatus.Idle => "空闲", PrinterStatus.Printing => "打印中", PrinterStatus.Offline => "离线", PrinterStatus.Error => "异常", _ => "未知" }; public string DisplayText { get { var queueText = QueueCount > 0 ? $",队列 {QueueCount}" : string.Empty; var messageText = string.IsNullOrWhiteSpace(StatusMessage) ? string.Empty : $",{StatusMessage}"; return $"{DisplayName}({StatusText}{queueText}{messageText})"; } } }