Immidiate ui reflection for calendar events and some more error handling.

This commit is contained in:
Burak Kaan Köse
2026-04-07 16:48:46 +02:00
parent 3db54023a4
commit 71fc883e47
53 changed files with 1482 additions and 393 deletions
@@ -530,7 +530,7 @@ public class WinoMailCollection : ObservableRecipient, IRecipient<SelectedItemsC
private async Task UpdateExistingItemAsync(MailItemContainer itemContainer,
MailCopy updatedItem,
MailUpdateSource mailUpdateSource = MailUpdateSource.Server,
EntityUpdateSource mailUpdateSource = EntityUpdateSource.Server,
MailCopyChangeFlags changeHint = MailCopyChangeFlags.None)
{
if (itemContainer?.ItemViewModel == null)
@@ -559,7 +559,7 @@ public class WinoMailCollection : ObservableRecipient, IRecipient<SelectedItemsC
itemContainer.ThreadViewModel?.ResumeChildPropertyNotifications();
}
existingItem.IsBusy = mailUpdateSource == MailUpdateSource.ClientUpdated;
existingItem.IsBusy = mailUpdateSource == EntityUpdateSource.ClientUpdated;
UpdateUniqueIdHashes(existingItem, true);
UpdateThreadIdCache(threadOwner, true);
@@ -849,7 +849,7 @@ public class WinoMailCollection : ObservableRecipient, IRecipient<SelectedItemsC
/// </summary>
/// <param name="updatedMailCopy">Updated mail copy.</param>
/// <returns></returns>
public Task UpdateMailCopy(MailCopy updatedMailCopy, MailUpdateSource mailUpdateSource, MailCopyChangeFlags changedProperties = MailCopyChangeFlags.None)
public Task UpdateMailCopy(MailCopy updatedMailCopy, EntityUpdateSource mailUpdateSource, MailCopyChangeFlags changedProperties = MailCopyChangeFlags.None)
=> RunSerializedAsync(() =>
{
var itemContainer = GetMailItemContainer(updatedMailCopy.UniqueId);
+1 -1
View File
@@ -874,7 +874,7 @@ public partial class ComposePageViewModel : MailBaseViewModel,
_dialogService.InfoBarMessage(Translator.Info_InvalidAddressTitle, string.Format(Translator.Info_InvalidAddressMessage, address), InfoBarMessageType.Warning);
}
protected override async void OnMailUpdated(MailCopy updatedMail, MailUpdateSource source, MailCopyChangeFlags changedProperties)
protected override async void OnMailUpdated(MailCopy updatedMail, EntityUpdateSource source, MailCopyChangeFlags changedProperties)
{
base.OnMailUpdated(updatedMail, source, changedProperties);
+5 -5
View File
@@ -20,9 +20,9 @@ public class MailBaseViewModel : CoreBaseViewModel,
IRecipient<FolderDeleted>,
IRecipient<FolderSynchronizationEnabled>
{
protected virtual void OnMailAdded(MailCopy addedMail) { }
protected virtual void OnMailRemoved(MailCopy removedMail) { }
protected virtual void OnMailUpdated(MailCopy updatedMail, MailUpdateSource source, MailCopyChangeFlags changedProperties) { }
protected virtual void OnMailAdded(MailCopy addedMail, EntityUpdateSource source) { }
protected virtual void OnMailRemoved(MailCopy removedMail, EntityUpdateSource source) { }
protected virtual void OnMailUpdated(MailCopy updatedMail, EntityUpdateSource source, MailCopyChangeFlags changedProperties) { }
protected virtual void OnMailDownloaded(MailCopy downloadedMail) { }
protected virtual void OnDraftCreated(MailCopy draftMail, MailAccount account) { }
protected virtual void OnDraftFailed(MailCopy draftMail, MailAccount account) { }
@@ -31,8 +31,8 @@ public class MailBaseViewModel : CoreBaseViewModel,
protected virtual void OnFolderDeleted(MailItemFolder folder) { }
protected virtual void OnFolderSynchronizationEnabled(IMailItemFolder mailItemFolder) { }
void IRecipient<MailAddedMessage>.Receive(MailAddedMessage message) => OnMailAdded(message.AddedMail);
void IRecipient<MailRemovedMessage>.Receive(MailRemovedMessage message) => OnMailRemoved(message.RemovedMail);
void IRecipient<MailAddedMessage>.Receive(MailAddedMessage message) => OnMailAdded(message.AddedMail, message.Source);
void IRecipient<MailRemovedMessage>.Receive(MailRemovedMessage message) => OnMailRemoved(message.RemovedMail, message.Source);
void IRecipient<MailUpdatedMessage>.Receive(MailUpdatedMessage message) => OnMailUpdated(message.UpdatedMail, message.Source, message.ChangedProperties);
void IRecipient<MailDownloadedMessage>.Receive(MailDownloadedMessage message) => OnMailDownloaded(message.DownloadedMail);
+15 -6
View File
@@ -745,7 +745,7 @@ public partial class MailListPageViewModel : MailBaseViewModel,
var fi = MailCollection.GetFirst();
if (fi == null) return;
Messenger.Send(new MailRemovedMessage(fi.MailCopy));
Messenger.Send(new MailRemovedMessage(fi.MailCopy, EntityUpdateSource.Server));
}
/// <summary>
@@ -758,9 +758,9 @@ public partial class MailListPageViewModel : MailBaseViewModel,
return MailCollection.ContainsThreadId(mailItem.ThreadId);
}
protected override async void OnMailAdded(MailCopy addedMail)
protected override async void OnMailAdded(MailCopy addedMail, EntityUpdateSource source)
{
base.OnMailAdded(addedMail);
base.OnMailAdded(addedMail, source);
if (addedMail.AssignedAccount == null || addedMail.AssignedFolder == null) return;
@@ -847,6 +847,15 @@ public partial class MailListPageViewModel : MailBaseViewModel,
// AddAsync already handles UI threading internally, no need to wrap it
await MailCollection.AddAsync(addedMail);
if (source == EntityUpdateSource.ClientUpdated)
{
var addedContainer = MailCollection.GetMailItemContainer(addedMail.UniqueId);
if (addedContainer?.ItemViewModel != null)
{
addedContainer.ItemViewModel.IsBusy = true;
}
}
await ExecuteUIThread(() =>
{
NotifyItemFoundState();
@@ -862,7 +871,7 @@ public partial class MailListPageViewModel : MailBaseViewModel,
}
}
protected override async void OnMailUpdated(MailCopy updatedMail, MailUpdateSource source, MailCopyChangeFlags changedProperties)
protected override async void OnMailUpdated(MailCopy updatedMail, EntityUpdateSource source, MailCopyChangeFlags changedProperties)
{
base.OnMailUpdated(updatedMail, source, changedProperties);
@@ -890,9 +899,9 @@ public partial class MailListPageViewModel : MailBaseViewModel,
await ExecuteUIThread(() => { SetupTopBarActions(); });
}
protected override async void OnMailRemoved(MailCopy removedMail)
protected override async void OnMailRemoved(MailCopy removedMail, EntityUpdateSource source)
{
base.OnMailRemoved(removedMail);
base.OnMailRemoved(removedMail, source);
if (removedMail.AssignedAccount == null) return;
@@ -639,7 +639,7 @@ public partial class MailRenderingPageViewModel : MailBaseViewModel,
MenuItems.Add(MailOperationMenuItem.Create(MailOperation.MarkAsRead, true, false));
}
protected override async void OnMailUpdated(MailCopy updatedMail, MailUpdateSource source, MailCopyChangeFlags changedProperties)
protected override async void OnMailUpdated(MailCopy updatedMail, EntityUpdateSource source, MailCopyChangeFlags changedProperties)
{
base.OnMailUpdated(updatedMail, source, changedProperties);