2024-04-18 01:44:37 +02:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using Wino.Core.Domain.Models.MailItem;
|
|
|
|
|
|
|
2025-02-16 11:54:23 +01:00
|
|
|
|
namespace Wino.Core.Domain.Models.Comparers;
|
|
|
|
|
|
|
|
|
|
|
|
public class ListItemComparer : IComparer<object>
|
2024-04-18 01:44:37 +02:00
|
|
|
|
{
|
2025-02-16 11:54:23 +01:00
|
|
|
|
public bool SortByName { get; set; }
|
2024-04-18 01:44:37 +02:00
|
|
|
|
|
2025-02-16 11:54:23 +01:00
|
|
|
|
public DateComparer DateComparer = new DateComparer();
|
|
|
|
|
|
public readonly NameComparer NameComparer = new NameComparer();
|
2024-04-18 01:44:37 +02:00
|
|
|
|
|
2025-02-16 11:54:23 +01:00
|
|
|
|
public int Compare(object x, object y)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (x is IMailItem xMail && y is IMailItem yMail)
|
2024-04-18 01:44:37 +02:00
|
|
|
|
{
|
2025-02-16 11:54:23 +01:00
|
|
|
|
var itemComparer = GetItemComparer();
|
2024-04-18 01:44:37 +02:00
|
|
|
|
|
2025-02-16 11:54:23 +01:00
|
|
|
|
return itemComparer.Compare(xMail, yMail);
|
2025-02-16 11:43:30 +01:00
|
|
|
|
}
|
2025-02-16 11:54:23 +01:00
|
|
|
|
else if (x is DateTime dateX && y is DateTime dateY)
|
|
|
|
|
|
return DateTime.Compare(dateY, dateX);
|
|
|
|
|
|
else if (x is string stringX && y is string stringY)
|
|
|
|
|
|
return stringY.CompareTo(stringX);
|
2025-02-16 11:35:43 +01:00
|
|
|
|
|
2025-02-16 11:54:23 +01:00
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public IComparer<IMailItem> GetItemComparer()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (SortByName)
|
|
|
|
|
|
return NameComparer;
|
|
|
|
|
|
else
|
|
|
|
|
|
return DateComparer;
|
2024-04-18 01:44:37 +02:00
|
|
|
|
}
|
|
|
|
|
|
}
|