csharpdeeb25a2 | 1 | using System.Collections.ObjectModel; |
| 2 | using CascadeIDE.Cockpit.Channels.Eicas; |
| 3 | using CascadeIDE.Cockpit.Composition.WorkspaceHealth; |
| 4 | |
| 5 | namespace CascadeIDE.Cockpit.Composition.Eicas; |
| 6 | |
| 7 | /// <summary> |
| 8 | /// Композитор поверхности для канала EICAS (ADR 0036 п.3): упорядочивает <see cref="EicasMessage"/> по серьёзности и времени |
| 9 | /// перед привязкой к полосе/представлению. Отделён от <see cref="IdeHealthSurfaceCompositor"/> (композитор канала Workspace Health). |
| 10 | /// </summary> |
| 11 | public static class EicasMessageSorter |
| 12 | { |
| 13 | /// <summary>Порядок: Warning → Caution → Advisory; внутри уровня — по времени (старше раньше), без времени — по тексту.</summary> |
| 14 | public static void Rebuild(ObservableCollection<EicasMessage> target, IReadOnlyList<EicasMessage> source) |
| 15 | { |
| 16 | target.Clear(); |
| 17 | foreach (var m in source.OrderBy(Ordinal).ThenBy(m => m.CreatedUtc ?? DateTimeOffset.MinValue).ThenBy(m => m.Text, StringComparer.Ordinal)) |
| 18 | target.Add(m); |
| 19 | } |
| 20 | |
| 21 | private static int Ordinal(EicasMessage m) => |
| 22 | m.Severity switch |
| 23 | { |
| 24 | EicasSeverity.Warning => 0, |
| 25 | EicasSeverity.Caution => 1, |
| 26 | _ => 2, |
| 27 | }; |
| 28 | } |
| 29 | |
View only · write via MCP/CIDE