Auto mark as read fix and del keyboard accelerator.

This commit is contained in:
Burak Kaan Köse
2025-10-28 16:47:06 +01:00
parent d02205fba3
commit abaab18eb7
2 changed files with 37 additions and 34 deletions
+10 -9
View File
@@ -326,16 +326,16 @@ public partial class MailListPageViewModel : MailBaseViewModel,
if (markAsPreference == MailMarkAsOption.WhenSelected)
{
//var operation = MailOperation.MarkAsRead;
//var package = new MailOperationPreperationRequest(operation, _activeMailItem.MailCopy);
var operation = MailOperation.MarkAsRead;
var package = new MailOperationPreperationRequest(operation, _activeMailItem.MailCopy);
//if (ActiveFolder?.SpecialFolderType == SpecialFolderType.Unread &&
// !gmailUnreadFolderMarkedAsReadUniqueIds.Contains(_activeMailItem.UniqueId))
//{
// gmailUnreadFolderMarkedAsReadUniqueIds.Add(_activeMailItem.UniqueId);
//}
if (ActiveFolder?.SpecialFolderType == SpecialFolderType.Unread &&
!gmailUnreadFolderMarkedAsReadUniqueIds.Contains(_activeMailItem.UniqueId))
{
gmailUnreadFolderMarkedAsReadUniqueIds.Add(_activeMailItem.UniqueId);
}
//await ExecuteMailOperationAsync(package);
await ExecuteMailOperationAsync(package);
}
else if (markAsPreference == MailMarkAsOption.AfterDelay && PreferencesService.MarkAsDelay >= 0)
{
@@ -582,6 +582,7 @@ public partial class MailListPageViewModel : MailBaseViewModel,
public void RemoveFirst()
{
var fi = MailCollection.GetFirst();
if (fi == null) return;
Messenger.Send(new MailRemovedMessage(fi.MailCopy));
}
@@ -1134,7 +1135,7 @@ public partial class MailListPageViewModel : MailBaseViewModel,
// Get mail copies based on the mail item type
IEnumerable<MailCopy> mailCopies;
if (message.MailItem is MailItemViewModel singleItem)
{
mailCopies = new[] { singleItem.MailCopy };
+27 -25
View File
@@ -14,6 +14,7 @@ using Microsoft.UI.Xaml.Navigation;
using MoreLinq;
using Windows.Foundation;
using Windows.System;
using Wino.Controls;
using Wino.Core.Domain;
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Interfaces;
@@ -163,33 +164,26 @@ public sealed partial class MailListPage : MailListPageAbstract,
args.IsContainerPrepared = false;
}
private async void MailItemContextRequested(UIElement sender, ContextRequestedEventArgs args)
{
// TODO: New ItemsView implementation.
// Context is requested from a single mail point, but we might have multiple selected items.
// This menu should be calculated based on all selected items by providers.
//if (sender is MailItemDisplayInformationControl control && args.TryGetPosition(sender, out Point p))
//{
// if (control.DataContext is MailItemViewModel clickedMailItemContext)
// {
// var targetItems = ViewModel.MailCollection.AllItems.Where(a => a.IsSelected);
// var availableActions = ViewModel.GetAvailableMailActions(targetItems);
if (sender is MailItemDisplayInformationControl control && args.TryGetPosition(sender, out Point p))
{
var targetItems = ViewModel.MailCollection.SelectedItems;
var availableActions = ViewModel.GetAvailableMailActions(targetItems);
// if (!availableActions?.Any() ?? false) return;
if (!availableActions?.Any() ?? false) return;
// var clickedOperation = await GetMailOperationFromFlyoutAsync(availableActions, control, p.X, p.Y);
var clickedOperation = await GetMailOperationFromFlyoutAsync(availableActions, control, p.X, p.Y);
// if (clickedOperation == null) return;
if (clickedOperation == null) return;
// var prepRequest = new MailOperationPreperationRequest(clickedOperation.Operation, targetItems.Select(a => a.MailCopy));
var prepRequest = new MailOperationPreperationRequest(clickedOperation.Operation, targetItems.Select(a => a.MailCopy));
// await ViewModel.ExecuteMailOperationAsync(prepRequest);
// }
//}
await ViewModel.ExecuteMailOperationAsync(prepRequest);
}
}
private async Task<MailOperationMenuItem> GetMailOperationFromFlyoutAsync(IEnumerable<MailOperationMenuItem> availableActions,
@@ -210,9 +204,9 @@ public sealed partial class MailListPage : MailListPageAbstract,
return await source.Task;
}
void IRecipient<ClearMailSelectionsRequested>.Receive(ClearMailSelectionsRequested message)
async void IRecipient<ClearMailSelectionsRequested>.Receive(ClearMailSelectionsRequested message)
{
// MailListView.ClearSelections(null, preserveThreadExpanding: true);
await ViewModel.MailCollection.UnselectAllAsync();
}
void IRecipient<ActiveMailItemChangedEvent>.Receive(ActiveMailItemChangedEvent message)
@@ -465,6 +459,7 @@ public sealed partial class MailListPage : MailListPageAbstract,
public void Receive(DisposeRenderingFrameRequested message)
{
ViewModel.NavigationService.Navigate(WinoPage.IdlePage, null, NavigationReferenceFrame.RenderingFrame, NavigationTransitionType.DrillIn);
UpdateAdaptiveness();
}
protected override void RegisterRecipients()
@@ -525,8 +520,7 @@ public sealed partial class MailListPage : MailListPageAbstract,
}
}
private void DeleteAllInvoked(KeyboardAccelerator sender, KeyboardAcceleratorInvokedEventArgs args)
=> ViewModel.ExecuteMailOperationCommand.Execute(MailOperation.SoftDelete);
private void WinoMailCollectionSelectionChanged(object? sender, EventArgs args)
{
@@ -536,14 +530,14 @@ public sealed partial class MailListPage : MailListPageAbstract,
private async void WinoListViewProcessKeyboardAccelerators(UIElement sender, ProcessKeyboardAcceleratorEventArgs args)
{
args.Handled = true;
if (args.Key == VirtualKey.Delete)
{
ViewModel.ExecuteMailOperationCommand.Execute(MailOperation.SoftDelete);
}
else
else if (args.Key == VirtualKey.A && args.Modifiers.HasFlag(VirtualKeyModifiers.Control))
{
args.Handled = true;
await ViewModel.MailCollection.ToggleSelectAllAsync();
}
}
@@ -627,6 +621,14 @@ public sealed partial class MailListPage : MailListPageAbstract,
{
// No Ctrl pressed, toggle expansion state (default behavior)
threadMailItemViewModel.IsThreadExpanded = !threadMailItemViewModel.IsThreadExpanded;
// Select the first item in the thread if none is selected
if (!threadMailItemViewModel.IsSelected)
{
threadMailItemViewModel.IsSelected = true;
var firstEmail = threadMailItemViewModel.ThreadEmails.FirstOrDefault();
firstEmail?.IsSelected = true;
}
}
}
}