Add local mail pinning support

This commit is contained in:
Burak Kaan Köse
2026-04-21 23:17:08 +02:00
parent c0023614ad
commit 09820dda71
19 changed files with 531 additions and 53 deletions
@@ -1,7 +1,8 @@
using System;
using System;
using System.Collections.Generic;
using Wino.Core.Domain.Entities.Mail;
using Wino.Core.Domain.Interfaces;
using Wino.Core.Domain.Models.MailItem;
public class ListItemComparer : IComparer<object>
{
@@ -9,14 +10,48 @@ public class ListItemComparer : IComparer<object>
public int Compare(object x, object y)
{
if (x is MailListGroupKey xGroupKey && y is MailListGroupKey yGroupKey)
{
if (xGroupKey.IsPinned != yGroupKey.IsPinned)
return yGroupKey.IsPinned.CompareTo(xGroupKey.IsPinned);
if (xGroupKey.IsPinned && yGroupKey.IsPinned)
return 0;
return CompareSortValues(xGroupKey.Value, yGroupKey.Value);
}
if (x is IMailListItemSorting xSorting && y is IMailListItemSorting ySorting)
return SortByName ? string.Compare(xSorting.SortingName, ySorting.SortingName, StringComparison.OrdinalIgnoreCase) : DateTime.Compare(ySorting.SortingDate, xSorting.SortingDate);
else if (x is MailCopy xMail && y is MailCopy yMail)
return SortByName ? string.Compare(xMail.FromName, yMail.FromName, StringComparison.OrdinalIgnoreCase) : DateTime.Compare(yMail.CreationDate, xMail.CreationDate);
else if (x is DateTime dateX && y is DateTime dateY)
{
if (xSorting.IsPinned != ySorting.IsPinned)
return ySorting.IsPinned.CompareTo(xSorting.IsPinned);
return SortByName
? string.Compare(xSorting.SortingName, ySorting.SortingName, StringComparison.OrdinalIgnoreCase)
: DateTime.Compare(ySorting.SortingDate, xSorting.SortingDate);
}
if (x is MailCopy xMail && y is MailCopy yMail)
{
if (xMail.IsPinned != yMail.IsPinned)
return yMail.IsPinned.CompareTo(xMail.IsPinned);
return SortByName
? string.Compare(xMail.FromName, yMail.FromName, StringComparison.OrdinalIgnoreCase)
: DateTime.Compare(yMail.CreationDate, xMail.CreationDate);
}
return CompareSortValues(x, y);
}
private static int CompareSortValues(object x, object y)
{
if (x is DateTime dateX && y is DateTime dateY)
return DateTime.Compare(dateY, dateX);
else if (x is string stringX && y is string stringY)
if (x is string stringX && y is string stringY)
return stringY.CompareTo(stringX);
return 0;
}
}
@@ -0,0 +1,6 @@
namespace Wino.Core.Domain.Models.MailItem;
public sealed record MailListGroupKey(bool IsPinned, object Value)
{
public static MailListGroupKey Pinned { get; } = new(true, null);
}