Proper cleanup of account on the UI when its deleted.

This commit is contained in:
Burak Kaan Köse
2026-02-16 01:56:22 +01:00
parent 31a7faeef9
commit fec49ce6f8
6 changed files with 185 additions and 18 deletions
@@ -20,6 +20,7 @@ using Wino.Core.ViewModels;
using Wino.Messaging.Client.Calendar;
using Wino.Messaging.Client.Navigation;
using Wino.Messaging.Server;
using Wino.Messaging.UI;
namespace Wino.Calendar.ViewModels;
@@ -27,7 +28,8 @@ public partial class CalendarAppShellViewModel : CalendarBaseViewModel,
IRecipient<VisibleDateRangeChangedMessage>,
IRecipient<CalendarEnableStatusChangedMessage>,
IRecipient<NavigateManageAccountsRequested>,
IRecipient<CalendarDisplayTypeChangedMessage>
IRecipient<CalendarDisplayTypeChangedMessage>,
IRecipient<AccountRemovedMessage>
{
public IPreferencesService PreferencesService { get; }
public IStatePersistanceService StatePersistenceService { get; }
@@ -110,7 +112,12 @@ public partial class CalendarAppShellViewModel : CalendarBaseViewModel,
{
base.OnNavigatedTo(mode, parameters);
if (mode == NavigationMode.Back) return;
// Account list may have changed while this shell was inactive.
if (mode == NavigationMode.Back)
{
await InitializeAccountCalendarsAsync();
return;
}
UpdateDateNavigationHeaderItems();
@@ -300,6 +307,7 @@ public partial class CalendarAppShellViewModel : CalendarBaseViewModel,
Messenger.Register<CalendarEnableStatusChangedMessage>(this);
Messenger.Register<NavigateManageAccountsRequested>(this);
Messenger.Register<CalendarDisplayTypeChangedMessage>(this);
Messenger.Register<AccountRemovedMessage>(this);
}
protected override void UnregisterRecipients()
@@ -310,6 +318,7 @@ public partial class CalendarAppShellViewModel : CalendarBaseViewModel,
Messenger.Unregister<CalendarEnableStatusChangedMessage>(this);
Messenger.Unregister<NavigateManageAccountsRequested>(this);
Messenger.Unregister<CalendarDisplayTypeChangedMessage>(this);
Messenger.Unregister<AccountRemovedMessage>(this);
}
public void Receive(VisibleDateRangeChangedMessage message) => HighlightedDateRange = message.DateRange;
@@ -403,4 +412,7 @@ public partial class CalendarAppShellViewModel : CalendarBaseViewModel,
OnPropertyChanged(nameof(IsVerticalCalendar));
UpdateDateNavigationHeaderItems();
}
public async void Receive(AccountRemovedMessage message)
=> await InitializeAccountCalendarsAsync();
}
@@ -22,6 +22,7 @@ using Wino.Core.Domain.Models.Calendar.CalendarTypeStrategies;
using Wino.Core.Domain.Models.Navigation;
using Wino.Core.ViewModels;
using Wino.Messaging.Client.Calendar;
using Wino.Messaging.UI;
namespace Wino.Calendar.ViewModels;
@@ -31,7 +32,8 @@ public partial class CalendarPageViewModel : CalendarBaseViewModel,
IRecipient<CalendarSettingsUpdatedMessage>,
IRecipient<CalendarItemTappedMessage>,
IRecipient<CalendarItemDoubleTappedMessage>,
IRecipient<CalendarItemRightTappedMessage>
IRecipient<CalendarItemRightTappedMessage>,
IRecipient<AccountRemovedMessage>
{
#region Quick Event Creation
@@ -177,6 +179,7 @@ public partial class CalendarPageViewModel : CalendarBaseViewModel,
Messenger.Register<CalendarItemTappedMessage>(this);
Messenger.Register<CalendarItemDoubleTappedMessage>(this);
Messenger.Register<CalendarItemRightTappedMessage>(this);
Messenger.Register<AccountRemovedMessage>(this);
}
protected override void UnregisterRecipients()
{
@@ -187,6 +190,7 @@ public partial class CalendarPageViewModel : CalendarBaseViewModel,
Messenger.Unregister<CalendarItemTappedMessage>(this);
Messenger.Unregister<CalendarItemDoubleTappedMessage>(this);
Messenger.Unregister<CalendarItemRightTappedMessage>(this);
Messenger.Unregister<AccountRemovedMessage>(this);
}
private void AccountCalendarStateCollectivelyChanged(object sender, GroupedAccountCalendarViewModel e)
@@ -928,6 +932,29 @@ public partial class CalendarPageViewModel : CalendarBaseViewModel,
public void Receive(CalendarItemRightTappedMessage message) { }
public async void Receive(AccountRemovedMessage message)
{
var removedAccountId = message.Account.Id;
await ExecuteUIThread(() =>
{
foreach (var dayRange in DayRanges)
{
foreach (var calendarDay in dayRange.CalendarDays)
{
calendarDay.EventsCollection.RemoveCalendarItems(item => item.AssignedCalendar?.AccountId == removedAccountId);
}
}
if (DisplayDetailsCalendarItemViewModel?.AssignedCalendar?.AccountId == removedAccountId)
{
DisplayDetailsCalendarItemViewModel = null;
}
SelectedQuickEventAccountCalendar = AccountCalendarStateService.ActiveCalendars.FirstOrDefault(a => a.IsPrimary);
});
}
protected override async void OnCalendarItemDeleted(CalendarItem calendarItem)
{
base.OnCalendarItemDeleted(calendarItem);