polish account summary layout and email count

This commit is contained in:
2026-04-30 10:31:53 +02:00
parent f853008ee6
commit 0ffbde80b3
2 changed files with 38 additions and 11 deletions

View File

@@ -44,6 +44,8 @@ public partial class AccountManagementViewModel : AccountManagementPageViewModel
private readonly ICalDavClient _calDavClient;
private readonly IMimeStorageService _mimeStorageService;
private readonly ICalendarService _calendarService;
private readonly IMailService _mailService;
private readonly IFolderService _folderService;
public IMailDialogService MailDialogService { get; }
@@ -73,6 +75,8 @@ public partial class AccountManagementViewModel : AccountManagementPageViewModel
ICalDavClient calDavClient,
IMimeStorageService mimeStorageService,
ICalendarService calendarService,
IMailService mailService,
IFolderService folderService,
IAuthenticationProvider authenticationProvider,
IPreferencesService preferencesService) : base(dialogService, navigationService, accountService, providerService, winoAccountProfileService, authenticationProvider, preferencesService)
{
@@ -83,6 +87,8 @@ public partial class AccountManagementViewModel : AccountManagementPageViewModel
_calDavClient = calDavClient;
_mimeStorageService = mimeStorageService;
_calendarService = calendarService;
_mailService = mailService;
_folderService = folderService;
}
[ObservableProperty]
@@ -449,6 +455,7 @@ public partial class AccountManagementViewModel : AccountManagementPageViewModel
var totalStorageBytes = storageSizes.Values.DefaultIfEmpty(0L).Sum();
var totalCalendarCount = 0;
var uniqueMessageIds = new HashSet<Guid>();
foreach (var account in accounts)
{
@@ -461,11 +468,30 @@ public partial class AccountManagementViewModel : AccountManagementPageViewModel
{
// Keep partial summary data if a specific account calendar lookup fails.
}
try
{
var folders = await _folderService.GetFoldersAsync(account.Id).ConfigureAwait(false);
foreach (var folder in folders)
{
var mails = await _mailService.GetMailsByFolderIdAsync(folder.Id).ConfigureAwait(false);
foreach (var mail in mails)
{
uniqueMessageIds.Add(mail.UniqueId);
}
}
}
catch
{
// Keep partial summary data if a specific account mail lookup fails.
}
}
await ExecuteUIThread(() =>
{
SummaryEmailCountText = SummaryUnavailable;
SummaryEmailCountText = uniqueMessageIds.Count > 0
? uniqueMessageIds.Count.ToString("N0", CultureInfo.CurrentCulture)
: "0";
SummaryStorageText = totalStorageBytes > 0
? totalStorageBytes.GetBytesReadable()
: "0 B";

View File

@@ -118,10 +118,11 @@
<winuiControls:SettingsCard
Grid.Column="1"
Margin="0,12,0,0"
MinHeight="200"
Description="{x:Bind domain:Translator.WinoAccount_Management_SummarySectionDescription}"
Header="{x:Bind domain:Translator.WinoAccount_Management_SummarySectionTitle}">
<StackPanel Spacing="12">
<Grid ColumnSpacing="12" RowSpacing="12">
<StackPanel Spacing="10">
<Grid ColumnSpacing="10" RowSpacing="10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
@@ -134,48 +135,48 @@
<Border
Grid.Row="0"
Grid.Column="0"
Padding="12"
Padding="10"
Background="{ThemeResource CardBackgroundFillColorSecondaryBrush}"
CornerRadius="8">
<StackPanel Spacing="4">
<TextBlock Style="{StaticResource CaptionTextBlockStyle}" Text="{x:Bind domain:Translator.WinoAccount_Management_SummaryAccountsLabel}" />
<TextBlock FontSize="24" FontWeight="SemiBold" Text="{x:Bind ViewModel.SummaryAccountCountText, Mode=OneWay}" />
<TextBlock FontSize="22" FontWeight="SemiBold" Text="{x:Bind ViewModel.SummaryAccountCountText, Mode=OneWay}" />
</StackPanel>
</Border>
<Border
Grid.Row="0"
Grid.Column="1"
Padding="12"
Padding="10"
Background="{ThemeResource CardBackgroundFillColorSecondaryBrush}"
CornerRadius="8">
<StackPanel Spacing="4">
<TextBlock Style="{StaticResource CaptionTextBlockStyle}" Text="{x:Bind domain:Translator.WinoAccount_Management_SummaryEmailsLabel}" />
<TextBlock FontSize="24" FontWeight="SemiBold" Text="{x:Bind ViewModel.SummaryEmailCountText, Mode=OneWay}" />
<TextBlock FontSize="22" FontWeight="SemiBold" Text="{x:Bind ViewModel.SummaryEmailCountText, Mode=OneWay}" />
</StackPanel>
</Border>
<Border
Grid.Row="1"
Grid.Column="0"
Padding="12"
Padding="10"
Background="{ThemeResource CardBackgroundFillColorSecondaryBrush}"
CornerRadius="8">
<StackPanel Spacing="4">
<TextBlock Style="{StaticResource CaptionTextBlockStyle}" Text="{x:Bind domain:Translator.WinoAccount_Management_SummaryStorageLabel}" />
<TextBlock FontSize="24" FontWeight="SemiBold" Text="{x:Bind ViewModel.SummaryStorageText, Mode=OneWay}" />
<TextBlock FontSize="22" FontWeight="SemiBold" Text="{x:Bind ViewModel.SummaryStorageText, Mode=OneWay}" />
</StackPanel>
</Border>
<Border
Grid.Row="1"
Grid.Column="1"
Padding="12"
Padding="10"
Background="{ThemeResource CardBackgroundFillColorSecondaryBrush}"
CornerRadius="8">
<StackPanel Spacing="4">
<TextBlock Style="{StaticResource CaptionTextBlockStyle}" Text="{x:Bind domain:Translator.WinoAccount_Management_SummaryCalendarsLabel}" />
<TextBlock FontSize="24" FontWeight="SemiBold" Text="{x:Bind ViewModel.SummaryCalendarCountText, Mode=OneWay}" />
<TextBlock FontSize="22" FontWeight="SemiBold" Text="{x:Bind ViewModel.SummaryCalendarCountText, Mode=OneWay}" />
</StackPanel>
</Border>
</Grid>