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
@@ -12,6 +12,7 @@ using Serilog;
using Wino.Core.Domain.Entities.Mail;
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Interfaces;
using Wino.Core.Domain.Models.MailItem;
using Wino.Mail.ViewModels.Data;
using Wino.Messaging.Client.Mails;
using Wino.Messaging.UI;
@@ -139,10 +140,24 @@ public class WinoMailCollection : ObservableRecipient, IRecipient<SelectedItemsC
private object GetGroupingKey(IMailListItem mailItem)
{
if (mailItem.IsPinned)
return MailListGroupKey.Pinned;
if (SortingType == SortingOptionType.ReceiveDate)
return mailItem.CreationDate.ToLocalTime().Date;
else
return mailItem.FromName;
return new MailListGroupKey(false, mailItem.CreationDate.ToLocalTime().Date);
return new MailListGroupKey(false, mailItem.FromName);
}
private bool ShouldReinsertForChanges(MailCopyChangeFlags changedProperties)
{
if ((changedProperties & (MailCopyChangeFlags.ThreadId | MailCopyChangeFlags.IsPinned)) != 0)
return true;
if (SortingType == SortingOptionType.ReceiveDate)
return (changedProperties & MailCopyChangeFlags.CreationDate) != 0;
return (changedProperties & (MailCopyChangeFlags.FromName | MailCopyChangeFlags.FromAddress)) != 0;
}
private void UpdateUniqueIdHashes(IMailHashContainer itemContainer, bool isAdd)
@@ -608,7 +623,7 @@ public class WinoMailCollection : ObservableRecipient, IRecipient<SelectedItemsC
}
});
if ((appliedChanges & MailCopyChangeFlags.ThreadId) != 0)
if (ShouldReinsertForChanges(appliedChanges))
{
await ReinsertUpdatedItemAsync(updatedItem, wasSelected, existingItem.IsBusy);
return;
@@ -993,6 +1008,16 @@ public class WinoMailCollection : ObservableRecipient, IRecipient<SelectedItemsC
if (updates.Count == 0)
return;
if (changedProperties == MailCopyChangeFlags.None || ShouldReinsertForChanges(changedProperties))
{
foreach (var update in updates)
{
await UpdateExistingItemAsync(update.ItemContainer, update.UpdatedMail, mailUpdateSource, changedProperties);
}
return;
}
await ExecuteUIThread(() =>
{
foreach (var update in updates)