Mail update source.
This commit is contained in:
@@ -0,0 +1,17 @@
|
|||||||
|
namespace Wino.Core.Domain.Enums;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Indicates the source of a mail update.
|
||||||
|
/// </summary>
|
||||||
|
public enum MailUpdateSource
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Update originated from client-side UI changes (ApplyUIChanges/RevertUIChanges).
|
||||||
|
/// </summary>
|
||||||
|
Client,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Update originated from server synchronization or database operations.
|
||||||
|
/// </summary>
|
||||||
|
Server
|
||||||
|
}
|
||||||
@@ -17,7 +17,7 @@ public record MarkFolderAsReadRequest(MailItemFolder Folder, List<MailCopy> Mail
|
|||||||
{
|
{
|
||||||
item.IsRead = true;
|
item.IsRead = true;
|
||||||
|
|
||||||
WeakReferenceMessenger.Default.Send(new MailUpdatedMessage(item));
|
WeakReferenceMessenger.Default.Send(new MailUpdatedMessage(item, MailUpdateSource.Client));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -27,7 +27,7 @@ public record MarkFolderAsReadRequest(MailItemFolder Folder, List<MailCopy> Mail
|
|||||||
{
|
{
|
||||||
item.IsRead = false;
|
item.IsRead = false;
|
||||||
|
|
||||||
WeakReferenceMessenger.Default.Send(new MailUpdatedMessage(item));
|
WeakReferenceMessenger.Default.Send(new MailUpdatedMessage(item, MailUpdateSource.Client));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,14 +22,14 @@ public record ChangeFlagRequest(MailCopy Item, bool IsFlagged) : MailRequestBase
|
|||||||
{
|
{
|
||||||
Item.IsFlagged = IsFlagged;
|
Item.IsFlagged = IsFlagged;
|
||||||
|
|
||||||
WeakReferenceMessenger.Default.Send(new MailUpdatedMessage(Item));
|
WeakReferenceMessenger.Default.Send(new MailUpdatedMessage(Item, MailUpdateSource.Client));
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void RevertUIChanges()
|
public override void RevertUIChanges()
|
||||||
{
|
{
|
||||||
Item.IsFlagged = !IsFlagged;
|
Item.IsFlagged = !IsFlagged;
|
||||||
|
|
||||||
WeakReferenceMessenger.Default.Send(new MailUpdatedMessage(Item));
|
WeakReferenceMessenger.Default.Send(new MailUpdatedMessage(Item, MailUpdateSource.Client));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,14 +21,14 @@ public record MarkReadRequest(MailCopy Item, bool IsRead) : MailRequestBase(Item
|
|||||||
{
|
{
|
||||||
Item.IsRead = IsRead;
|
Item.IsRead = IsRead;
|
||||||
|
|
||||||
WeakReferenceMessenger.Default.Send(new MailUpdatedMessage(Item));
|
WeakReferenceMessenger.Default.Send(new MailUpdatedMessage(Item, MailUpdateSource.Client));
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void RevertUIChanges()
|
public override void RevertUIChanges()
|
||||||
{
|
{
|
||||||
Item.IsRead = !IsRead;
|
Item.IsRead = !IsRead;
|
||||||
|
|
||||||
WeakReferenceMessenger.Default.Send(new MailUpdatedMessage(Item));
|
WeakReferenceMessenger.Default.Send(new MailUpdatedMessage(Item, MailUpdateSource.Client));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -633,9 +633,9 @@ public partial class ComposePageViewModel : MailBaseViewModel
|
|||||||
_dialogService.InfoBarMessage(Translator.Info_InvalidAddressTitle, string.Format(Translator.Info_InvalidAddressMessage, address), InfoBarMessageType.Warning);
|
_dialogService.InfoBarMessage(Translator.Info_InvalidAddressTitle, string.Format(Translator.Info_InvalidAddressMessage, address), InfoBarMessageType.Warning);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override async void OnMailUpdated(MailCopy updatedMail)
|
protected override async void OnMailUpdated(MailCopy updatedMail, MailUpdateSource source)
|
||||||
{
|
{
|
||||||
base.OnMailUpdated(updatedMail);
|
base.OnMailUpdated(updatedMail, source);
|
||||||
|
|
||||||
if (CurrentMailDraftItem == null) return;
|
if (CurrentMailDraftItem == null) return;
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using CommunityToolkit.Mvvm.Messaging;
|
using CommunityToolkit.Mvvm.Messaging;
|
||||||
using Wino.Core.Domain.Entities.Mail;
|
using Wino.Core.Domain.Entities.Mail;
|
||||||
using Wino.Core.Domain.Entities.Shared;
|
using Wino.Core.Domain.Entities.Shared;
|
||||||
|
using Wino.Core.Domain.Enums;
|
||||||
using Wino.Core.Domain.Models.Folders;
|
using Wino.Core.Domain.Models.Folders;
|
||||||
using Wino.Core.ViewModels;
|
using Wino.Core.ViewModels;
|
||||||
using Wino.Messaging.UI;
|
using Wino.Messaging.UI;
|
||||||
@@ -20,7 +21,7 @@ public class MailBaseViewModel : CoreBaseViewModel,
|
|||||||
{
|
{
|
||||||
protected virtual void OnMailAdded(MailCopy addedMail) { }
|
protected virtual void OnMailAdded(MailCopy addedMail) { }
|
||||||
protected virtual void OnMailRemoved(MailCopy removedMail) { }
|
protected virtual void OnMailRemoved(MailCopy removedMail) { }
|
||||||
protected virtual void OnMailUpdated(MailCopy updatedMail) { }
|
protected virtual void OnMailUpdated(MailCopy updatedMail, MailUpdateSource source) { }
|
||||||
protected virtual void OnMailDownloaded(MailCopy downloadedMail) { }
|
protected virtual void OnMailDownloaded(MailCopy downloadedMail) { }
|
||||||
protected virtual void OnDraftCreated(MailCopy draftMail, MailAccount account) { }
|
protected virtual void OnDraftCreated(MailCopy draftMail, MailAccount account) { }
|
||||||
protected virtual void OnDraftFailed(MailCopy draftMail, MailAccount account) { }
|
protected virtual void OnDraftFailed(MailCopy draftMail, MailAccount account) { }
|
||||||
@@ -30,7 +31,7 @@ public class MailBaseViewModel : CoreBaseViewModel,
|
|||||||
|
|
||||||
void IRecipient<MailAddedMessage>.Receive(MailAddedMessage message) => OnMailAdded(message.AddedMail);
|
void IRecipient<MailAddedMessage>.Receive(MailAddedMessage message) => OnMailAdded(message.AddedMail);
|
||||||
void IRecipient<MailRemovedMessage>.Receive(MailRemovedMessage message) => OnMailRemoved(message.RemovedMail);
|
void IRecipient<MailRemovedMessage>.Receive(MailRemovedMessage message) => OnMailRemoved(message.RemovedMail);
|
||||||
void IRecipient<MailUpdatedMessage>.Receive(MailUpdatedMessage message) => OnMailUpdated(message.UpdatedMail);
|
void IRecipient<MailUpdatedMessage>.Receive(MailUpdatedMessage message) => OnMailUpdated(message.UpdatedMail, message.Source);
|
||||||
void IRecipient<MailDownloadedMessage>.Receive(MailDownloadedMessage message) => OnMailDownloaded(message.DownloadedMail);
|
void IRecipient<MailDownloadedMessage>.Receive(MailDownloadedMessage message) => OnMailDownloaded(message.DownloadedMail);
|
||||||
|
|
||||||
void IRecipient<DraftMapped>.Receive(DraftMapped message) => OnDraftMapped(message.LocalDraftCopyId, message.RemoteDraftCopyId);
|
void IRecipient<DraftMapped>.Receive(DraftMapped message) => OnDraftMapped(message.LocalDraftCopyId, message.RemoteDraftCopyId);
|
||||||
|
|||||||
@@ -664,9 +664,9 @@ public partial class MailListPageViewModel : MailBaseViewModel,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override async void OnMailUpdated(MailCopy updatedMail)
|
protected override async void OnMailUpdated(MailCopy updatedMail, MailUpdateSource source)
|
||||||
{
|
{
|
||||||
base.OnMailUpdated(updatedMail);
|
base.OnMailUpdated(updatedMail, source);
|
||||||
|
|
||||||
await MailCollection.UpdateMailCopy(updatedMail);
|
await MailCollection.UpdateMailCopy(updatedMail);
|
||||||
|
|
||||||
|
|||||||
@@ -618,9 +618,9 @@ public partial class MailRenderingPageViewModel : MailBaseViewModel,
|
|||||||
MenuItems.Add(MailOperationMenuItem.Create(MailOperation.MarkAsRead, true, false));
|
MenuItems.Add(MailOperationMenuItem.Create(MailOperation.MarkAsRead, true, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override async void OnMailUpdated(MailCopy updatedMail)
|
protected override async void OnMailUpdated(MailCopy updatedMail, MailUpdateSource source)
|
||||||
{
|
{
|
||||||
base.OnMailUpdated(updatedMail);
|
base.OnMailUpdated(updatedMail, source);
|
||||||
|
|
||||||
if (initializedMailItemViewModel == null) return;
|
if (initializedMailItemViewModel == null) return;
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using Wino.Core.Domain.Entities.Mail;
|
using Wino.Core.Domain.Entities.Mail;
|
||||||
|
using Wino.Core.Domain.Enums;
|
||||||
|
|
||||||
namespace Wino.Messaging.UI;
|
namespace Wino.Messaging.UI;
|
||||||
|
|
||||||
public record MailUpdatedMessage(MailCopy UpdatedMail) : UIMessageBase<MailUpdatedMessage>;
|
public record MailUpdatedMessage(MailCopy UpdatedMail, MailUpdateSource Source) : UIMessageBase<MailUpdatedMessage>;
|
||||||
|
|||||||
@@ -543,7 +543,7 @@ public class MailService : BaseDatabaseService, IMailService
|
|||||||
|
|
||||||
await Connection.UpdateAsync(mailCopy, typeof(MailCopy)).ConfigureAwait(false);
|
await Connection.UpdateAsync(mailCopy, typeof(MailCopy)).ConfigureAwait(false);
|
||||||
|
|
||||||
ReportUIChange(new MailUpdatedMessage(mailCopy));
|
ReportUIChange(new MailUpdatedMessage(mailCopy, MailUpdateSource.Server));
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task DeleteMailInternalAsync(MailCopy mailCopy, bool preserveMimeFile)
|
private async Task DeleteMailInternalAsync(MailCopy mailCopy, bool preserveMimeFile)
|
||||||
|
|||||||
Reference in New Issue
Block a user