Partial Busy state for mark as read requests

This commit is contained in:
Burak Kaan Köse
2026-02-05 12:48:38 +01:00
parent 0eba778158
commit 2fd600d47d
15 changed files with 266 additions and 420 deletions
@@ -15,9 +15,12 @@ public record MarkFolderAsReadRequest(MailItemFolder Folder, List<MailCopy> Mail
{
foreach (var item in MailsToMarkRead)
{
// Skip if already read
if (item.IsRead) continue;
item.IsRead = true;
WeakReferenceMessenger.Default.Send(new MailUpdatedMessage(item, MailUpdateSource.Client));
WeakReferenceMessenger.Default.Send(new MailUpdatedMessage(item, MailUpdateSource.ClientUpdated));
}
}
@@ -25,9 +28,12 @@ public record MarkFolderAsReadRequest(MailItemFolder Folder, List<MailCopy> Mail
{
foreach (var item in MailsToMarkRead)
{
// Skip if already unread (wasn't changed by ApplyUIChanges)
if (!item.IsRead) continue;
item.IsRead = false;
WeakReferenceMessenger.Default.Send(new MailUpdatedMessage(item, MailUpdateSource.Client));
WeakReferenceMessenger.Default.Send(new MailUpdatedMessage(item, MailUpdateSource.ClientReverted));
}
}
+14 -2
View File
@@ -18,18 +18,30 @@ public record ChangeFlagRequest(MailCopy Item, bool IsFlagged) : MailRequestBase
public override MailSynchronizerOperation Operation => MailSynchronizerOperation.ChangeFlag;
/// <summary>
/// Gets whether this request represents an actual state change.
/// If the mail is already in the desired flagged state, no change is needed.
/// </summary>
public bool IsNoOp => Item.IsFlagged == IsFlagged;
public override void ApplyUIChanges()
{
// Skip UI update if the mail is already in the desired state
if (IsNoOp) return;
Item.IsFlagged = IsFlagged;
WeakReferenceMessenger.Default.Send(new MailUpdatedMessage(Item, MailUpdateSource.Client));
WeakReferenceMessenger.Default.Send(new MailUpdatedMessage(Item, MailUpdateSource.ClientUpdated));
}
public override void RevertUIChanges()
{
// Skip UI revert if this was a no-op request
if (IsNoOp) return;
Item.IsFlagged = !IsFlagged;
WeakReferenceMessenger.Default.Send(new MailUpdatedMessage(Item, MailUpdateSource.Client));
WeakReferenceMessenger.Default.Send(new MailUpdatedMessage(Item, MailUpdateSource.ClientReverted));
}
}
+14 -2
View File
@@ -17,18 +17,30 @@ public record MarkReadRequest(MailCopy Item, bool IsRead) : MailRequestBase(Item
public bool ExcludeMustHaveFolders => true;
/// <summary>
/// Gets whether this request represents an actual state change.
/// If the mail is already in the desired read state, no change is needed.
/// </summary>
public bool IsNoOp => Item.IsRead == IsRead;
public override void ApplyUIChanges()
{
// Skip UI update if the mail is already in the desired state
if (IsNoOp) return;
Item.IsRead = IsRead;
WeakReferenceMessenger.Default.Send(new MailUpdatedMessage(Item, MailUpdateSource.Client));
WeakReferenceMessenger.Default.Send(new MailUpdatedMessage(Item, MailUpdateSource.ClientUpdated));
}
public override void RevertUIChanges()
{
// Skip UI revert if this was a no-op request
if (IsNoOp) return;
Item.IsRead = !IsRead;
WeakReferenceMessenger.Default.Send(new MailUpdatedMessage(Item, MailUpdateSource.Client));
WeakReferenceMessenger.Default.Send(new MailUpdatedMessage(Item, MailUpdateSource.ClientReverted));
}
}