Code/InteractiveComputer/Core/TaskManagerProcessSortPolicy.cs
using System;
using System.Collections.Generic;
using System.Linq;
namespace PaneOS.InteractiveComputer.Core;
public enum TaskManagerProcessSortField
{
Process,
Status,
Cpu,
Ram,
Startup
}
public sealed class TaskManagerProcessSortItem
{
public string InstanceId { get; set; } = "";
public string ProcessName { get; set; } = "";
public string Status { get; set; } = "";
public float CpuPercent { get; set; }
public float RamPercent { get; set; }
public bool StartupProcess { get; set; }
}
public static class TaskManagerProcessSortPolicy
{
public static IReadOnlyList<TaskManagerProcessSortItem> Sort( IEnumerable<TaskManagerProcessSortItem> items, TaskManagerProcessSortField field, bool descending )
{
var ordered = field switch
{
TaskManagerProcessSortField.Status => descending
? items.OrderByDescending( x => x.Status, StringComparer.OrdinalIgnoreCase ).ThenBy( x => x.ProcessName, StringComparer.OrdinalIgnoreCase )
: items.OrderBy( x => x.Status, StringComparer.OrdinalIgnoreCase ).ThenBy( x => x.ProcessName, StringComparer.OrdinalIgnoreCase ),
TaskManagerProcessSortField.Cpu => descending
? items.OrderByDescending( x => x.CpuPercent ).ThenBy( x => x.ProcessName, StringComparer.OrdinalIgnoreCase )
: items.OrderBy( x => x.CpuPercent ).ThenBy( x => x.ProcessName, StringComparer.OrdinalIgnoreCase ),
TaskManagerProcessSortField.Ram => descending
? items.OrderByDescending( x => x.RamPercent ).ThenBy( x => x.ProcessName, StringComparer.OrdinalIgnoreCase )
: items.OrderBy( x => x.RamPercent ).ThenBy( x => x.ProcessName, StringComparer.OrdinalIgnoreCase ),
TaskManagerProcessSortField.Startup => descending
? items.OrderByDescending( x => x.StartupProcess ).ThenBy( x => x.ProcessName, StringComparer.OrdinalIgnoreCase )
: items.OrderBy( x => x.StartupProcess ).ThenBy( x => x.ProcessName, StringComparer.OrdinalIgnoreCase ),
_ => descending
? items.OrderByDescending( x => x.ProcessName, StringComparer.OrdinalIgnoreCase )
: items.OrderBy( x => x.ProcessName, StringComparer.OrdinalIgnoreCase )
};
return ordered.ToArray();
}
}