This commit is contained in:
xzeck 2025-07-05 18:13:29 +02:00 committed by GitHub
commit 7653f035ac
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 79 additions and 1 deletions

View file

@ -176,6 +176,14 @@
Content=""
ToolTipService.ToolTip="{utils:ResourceString Name=ClearHistory/[using:Windows.UI.Xaml.Controls]ToolTipService/ToolTip}"
Visibility="{x:Bind Model.ItemsCount, Mode=OneWay, Converter={StaticResource ItemSizeToVisibilityNegationConverter}}"/>
<Button x:Name="ExportButton"
Grid.Row="0"
Style="{ThemeResource HistoryButtonStyle}"
AutomationProperties.Name="Export History"
Click="ExportButton_Click">
<SymbolIcon Symbol="Download"/>
</Button>
</Grid>
</Grid>
</UserControl>

View file

@ -1,6 +1,11 @@
using CalculatorApp.ViewModel;
using CalculatorApp.ViewModel.Common;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using Windows.Storage;
using Windows.Storage.Pickers;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
@ -77,6 +82,71 @@ namespace CalculatorApp
Model.DeleteItem(swipedItem);
}
}
private async void ExportButton_Click(object sender, RoutedEventArgs e)
{
var history = (CalculatorApp.ViewModel.HistoryViewModel)this.DataContext;
if (history.ItemsCount == 0)
{
return; // No history to export
}
Debug.WriteLine("Opening save picker");
var savePicker = new FileSavePicker
{
SuggestedStartLocation = PickerLocationId.DocumentsLibrary,
SuggestedFileName = "CalculatorHistory"
};
Debug.WriteLine("Adding choice");
savePicker.FileTypeChoices.Add("Plain Text", new List<string> { ".txt" });
savePicker.FileTypeChoices.Add("CSV File", new List<string> { ".csv" });
StorageFile file = await savePicker.PickSaveFileAsync();
if (file == null)
{
return; // User cancelled
}
try
{
var content = new StringBuilder();
bool isCsv = file.FileType.Equals(".csv", System.StringComparison.OrdinalIgnoreCase);
if (isCsv)
{
content.AppendLine("Expression,Result");
}
foreach (var item in history.Items)
{
if (isCsv)
{
// Escape quotes and commas for CSV
var expression = item.Expression.Replace("\"", "\"\"");
var result = item.Result.Replace("\"", "\"\"");
content.AppendLine($"\"{expression}\",\"{result}\"");
}
else
{
content.AppendLine($"{item.Expression} = {item.Result}");
}
}
await FileIO.WriteTextAsync(file, content.ToString());
}
catch (Exception ex)
{
// Log error and show user-friendly message
Debug.WriteLine($"Error exporting history: {ex.Message}");
// You might want to show a dialog here to inform the user
}
}
}
}