using CommunityToolkit.Mvvm.Messaging; using System.Collections.Generic; using Wino.Core.Domain.Entities.Mail; using Wino.Core.Domain.Entities.Shared; using Wino.Core.Domain.Enums; using Wino.Core.Domain.Models.Folders; using Wino.Core.ViewModels; using Wino.Messaging.UI; namespace Wino.Mail.ViewModels; public class MailBaseViewModel : CoreBaseViewModel, IRecipient, IRecipient, IRecipient, IRecipient, IRecipient, IRecipient, IRecipient, IRecipient, IRecipient, IRecipient, IRecipient, IRecipient, IRecipient, IRecipient, IRecipient { protected virtual void OnMailAdded(MailCopy addedMail, EntityUpdateSource source) { } protected virtual void OnBulkMailAdded(IReadOnlyList addedMails, EntityUpdateSource source) { foreach (var addedMail in addedMails ?? []) { OnMailAdded(addedMail, source); } } protected virtual void OnMailRemoved(MailCopy removedMail, EntityUpdateSource source) { } protected virtual void OnBulkMailRemoved(IReadOnlyList removedMails, EntityUpdateSource source) { foreach (var removedMail in removedMails ?? []) { OnMailRemoved(removedMail, source); } } protected virtual void OnMailStateUpdated(MailStateChange updatedState, EntityUpdateSource source) { } protected virtual void OnBulkMailStateUpdated(IReadOnlyList updatedStates, EntityUpdateSource source) { foreach (var updatedState in updatedStates ?? []) { OnMailStateUpdated(updatedState, source); } } protected virtual void OnMailUpdated(MailCopy updatedMail, EntityUpdateSource source, MailCopyChangeFlags changedProperties) { } protected virtual void OnBulkMailUpdated(IReadOnlyList updatedMails, EntityUpdateSource source, MailCopyChangeFlags changedProperties) { foreach (var updatedMail in updatedMails ?? []) { OnMailUpdated(updatedMail, source, changedProperties); } } protected virtual void OnMailDownloaded(MailCopy downloadedMail) { } protected virtual void OnDraftCreated(MailCopy draftMail, MailAccount account) { } protected virtual void OnDraftFailed(MailCopy draftMail, MailAccount account) { } protected virtual void OnDraftMapped(string localDraftCopyId, string remoteDraftCopyId) { } protected virtual void OnFolderRenamed(IMailItemFolder mailItemFolder) { } protected virtual void OnFolderDeleted(MailItemFolder folder) { } protected virtual void OnFolderSynchronizationEnabled(IMailItemFolder mailItemFolder) { } void IRecipient.Receive(MailAddedMessage message) => OnMailAdded(message.AddedMail, message.Source); void IRecipient.Receive(BulkMailAddedMessage message) => OnBulkMailAdded(message.AddedMails, message.Source); void IRecipient.Receive(MailRemovedMessage message) => OnMailRemoved(message.RemovedMail, message.Source); void IRecipient.Receive(BulkMailRemovedMessage message) => OnBulkMailRemoved(message.RemovedMails, message.Source); void IRecipient.Receive(MailStateUpdatedMessage message) => OnMailStateUpdated(message.UpdatedState, message.Source); void IRecipient.Receive(BulkMailStateUpdatedMessage message) => OnBulkMailStateUpdated(message.UpdatedStates, message.Source); void IRecipient.Receive(MailUpdatedMessage message) => OnMailUpdated(message.UpdatedMail, message.Source, message.ChangedProperties); void IRecipient.Receive(BulkMailUpdatedMessage message) => OnBulkMailUpdated(message.UpdatedMails, message.Source, message.ChangedProperties); void IRecipient.Receive(MailDownloadedMessage message) => OnMailDownloaded(message.DownloadedMail); void IRecipient.Receive(DraftMapped message) => OnDraftMapped(message.LocalDraftCopyId, message.RemoteDraftCopyId); void IRecipient.Receive(DraftFailed message) => OnDraftFailed(message.DraftMail, message.Account); void IRecipient.Receive(DraftCreated message) => OnDraftCreated(message.DraftMail, message.Account); void IRecipient.Receive(FolderRenamed message) => OnFolderRenamed(message.MailItemFolder); void IRecipient.Receive(FolderDeleted message) => OnFolderDeleted(message.MailItemFolder); void IRecipient.Receive(FolderSynchronizationEnabled message) => OnFolderSynchronizationEnabled(message.MailItemFolder); protected override void RegisterRecipients() { base.RegisterRecipients(); UnregisterRecipients(); Messenger.Register(this); Messenger.Register(this); Messenger.Register(this); Messenger.Register(this); Messenger.Register(this); Messenger.Register(this); Messenger.Register(this); Messenger.Register(this); Messenger.Register(this); Messenger.Register(this); Messenger.Register(this); Messenger.Register(this); Messenger.Register(this); Messenger.Register(this); Messenger.Register(this); } protected override void UnregisterRecipients() { base.UnregisterRecipients(); Messenger.Unregister(this); Messenger.Unregister(this); Messenger.Unregister(this); Messenger.Unregister(this); Messenger.Unregister(this); Messenger.Unregister(this); Messenger.Unregister(this); Messenger.Unregister(this); Messenger.Unregister(this); Messenger.Unregister(this); Messenger.Unregister(this); Messenger.Unregister(this); Messenger.Unregister(this); Messenger.Unregister(this); Messenger.Unregister(this); } }