using System.Globalization; using System.Text.Json.Serialization; using System.Windows; using CommunityToolkit.Mvvm.ComponentModel; using JetBrains.Annotations; namespace Livia.Models.Data; public record DataHistory { [JsonPropertyName("key"), UsedImplicitly] public string? Key { get; init; } [JsonPropertyName("import_time"), UsedImplicitly] public string? ImportTimeString { get; init; } public DateTime? ImportTime { get { if (ImportTimeString == null) return null; if (DateTime.TryParseExact(ImportTimeString, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime dateTime)) return dateTime; return null; } } [JsonPropertyName("errno"), UsedImplicitly] public int? ErrNo { get; init; } [JsonPropertyName("status"), UsedImplicitly] public int Status { get; init; } public string StatusString => (string)Application.Current.TryFindResource($"ServerJobStatus{Status}"); public string Tooltip => (string)(Application.Current.TryFindResource($"ServerError{ErrNo}") ?? StatusString); } [UsedImplicitly] public class ServerJobData : ObservableObject { public string? Key => HistoryList?.FirstOrDefault(item => item.Status == 4)?.Key ?? FirstHistory?.Key ?? null; public DateTime? ImportTime => FirstHistory?.ImportTime ?? null; public int Status => _canceled ? 5 : FirstHistory?.Status ?? -1; [JsonPropertyName("id"), UsedImplicitly] public int? Id { get; init; } [JsonPropertyName("patient_name"), UsedImplicitly] public string? PatientName { get; init; } [JsonPropertyName("patient_id"), UsedImplicitly] public string? PatientId { get; init; } [JsonPropertyName("patient_age"), UsedImplicitly] public int? PatientAge { get; init; } [JsonPropertyName("patient_sex"), UsedImplicitly] public string? PatientSex { get; init; } [JsonPropertyName("study_date"), UsedImplicitly] public string? StudyDateString { get; init; } public DateTime? StudyDate { get { if (StudyDateString == null) return null; if (DateTime.TryParseExact(StudyDateString, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime dateTime)) return dateTime; return null; } } [JsonPropertyName("sequence"), UsedImplicitly] public List? Sequence { get; init; } [JsonPropertyName("history"), UsedImplicitly] public List? HistoryList { get; init; } public bool JobSuccess => HistoryList?.Any(item => item.Status == 4) ?? false; public bool ContainsMultipleHistory => (HistoryList?.Count ?? 0) > 1; public bool CancelButtonVisible => Status < 4 && !_canceled; public bool DeleteButtonVisible => Status >= 4; public bool SelectSeriesButtonVisible => Status == 6; public string Tooltip => FirstHistory?.Tooltip ?? ""; public string StatusString => FirstHistory?.StatusString ?? ""; private DataHistory? FirstHistory => HistoryList?.Count > 0 ? HistoryList[0] : null; private bool _canceled; public void SetJobCanceled() { _canceled = true; OnPropertyChanged(nameof(Status)); OnPropertyChanged(nameof(CancelButtonVisible)); OnPropertyChanged(nameof(Tooltip)); OnPropertyChanged(nameof(StatusString)); } }