fix(ui): avoid int CommandParameter cast crash in usage monitor presets

RelayCommand<int> casts its object parameter directly rather than
converting it, so a string CommandParameter ("7"/"30") would throw
InvalidCastException at runtime. Split into two parameterless commands.
This commit is contained in:
mika kuns
2026-08-05 13:58:40 +02:00
parent 8103006e26
commit 57326f1d3b
3 changed files with 8 additions and 3 deletions
@@ -89,6 +89,11 @@ public sealed partial class UsageMonitorModalViewModel : ViewModelBase
} }
[RelayCommand] [RelayCommand]
private Task SetPreset7Days() => SetPreset(7);
[RelayCommand]
private Task SetPreset30Days() => SetPreset(30);
private Task SetPreset(int days) private Task SetPreset(int days)
{ {
ApplyPresetRange(days); ApplyPresetRange(days);
@@ -92,9 +92,9 @@
<StackPanel DockPanel.Dock="Top" Orientation="Horizontal" Spacing="8" Margin="20,12,20,0"> <StackPanel DockPanel.Dock="Top" Orientation="Horizontal" Spacing="8" Margin="20,12,20,0">
<TextBlock Classes="meta" Text="{loc:Tr modals.usageMonitor.period}" VerticalAlignment="Center"/> <TextBlock Classes="meta" Text="{loc:Tr modals.usageMonitor.period}" VerticalAlignment="Center"/>
<Button Classes="btn" Content="{loc:Tr modals.usageMonitor.last7Days}" <Button Classes="btn" Content="{loc:Tr modals.usageMonitor.last7Days}"
Command="{Binding SetPresetCommand}" CommandParameter="7"/> Command="{Binding SetPreset7DaysCommand}"/>
<Button Classes="btn" Content="{loc:Tr modals.usageMonitor.last30Days}" <Button Classes="btn" Content="{loc:Tr modals.usageMonitor.last30Days}"
Command="{Binding SetPresetCommand}" CommandParameter="30"/> Command="{Binding SetPreset30DaysCommand}"/>
<TextBlock Classes="meta" Text="{loc:Tr modals.usageMonitor.fromDate}" VerticalAlignment="Center"/> <TextBlock Classes="meta" Text="{loc:Tr modals.usageMonitor.fromDate}" VerticalAlignment="Center"/>
<ctl:ThemedDatePicker SelectedDate="{Binding StartDate}"/> <ctl:ThemedDatePicker SelectedDate="{Binding StartDate}"/>
<TextBlock Classes="meta" Text="{loc:Tr modals.usageMonitor.toDate}" VerticalAlignment="Center"/> <TextBlock Classes="meta" Text="{loc:Tr modals.usageMonitor.toDate}" VerticalAlignment="Center"/>
@@ -258,7 +258,7 @@ public class UsageMonitorModalViewModelTests
await vm.LoadAsync(); await vm.LoadAsync();
var callsAfterInitialLoad = worker.ModelUsageCalls; var callsAfterInitialLoad = worker.ModelUsageCalls;
await vm.SetPresetCommand.ExecuteAsync(30); await vm.SetPreset30DaysCommand.ExecuteAsync(null);
Assert.Equal(callsAfterInitialLoad + 1, worker.ModelUsageCalls); Assert.Equal(callsAfterInitialLoad + 1, worker.ModelUsageCalls);
Assert.Equal(callsAfterInitialLoad + 1, worker.TaskUsageCalls); Assert.Equal(callsAfterInitialLoad + 1, worker.TaskUsageCalls);