json handling

This commit is contained in:
grimsace
2026-07-01 15:03:12 -05:00
parent 6520e215ba
commit 6c306a4a0f
3 changed files with 199 additions and 4 deletions
+10 -1
View File
@@ -63,8 +63,17 @@
<Button Content="Generate" HorizontalAlignment="Stretch" HorizontalContentAlignment="Center"
Command="{Binding GenerateCommand}" FontWeight="Bold"/>
<TextBlock Text="{Binding StatusMessage}" TextWrapping="Wrap" Margin="0,10,0,0"/>
<StackPanel Spacing="5" Margin="0,10,0,0" IsVisible="{Binding IsNpcSelected}">
<Label Content="Generated NPC JSON:"/>
<TextBox Text="{Binding GeneratedNpcJson}" AcceptsReturn="True" Height="200" IsReadOnly="True" />
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Spacing="5">
<Button Content="Save NPC..." Click="SaveNpc_Click"/>
<Button Content="Open Temp Folder" Click="OpenTempFolder_Click"/>
</StackPanel>
</StackPanel>
</StackPanel>
</ScrollViewer>
+73
View File
@@ -10,6 +10,7 @@ using Avalonia.Interactivity;
using Avalonia.Platform.Storage;
using Avalonia.Media.Imaging;
using finder2e_foundry_converter.ViewModels;
using System.Diagnostics;
namespace finder2e_foundry_converter.Views
{
@@ -175,5 +176,77 @@ namespace finder2e_foundry_converter.Views
}
}
private async void SaveNpc_Click(object? sender, RoutedEventArgs e)
{
var vm = DataContext as MainWindowViewModel;
if (vm == null)
return;
if (string.IsNullOrWhiteSpace(vm.GeneratedNpcJson))
{
vm.StatusMessage = "No generated NPC to save.";
return;
}
var topLevel = GetTopLevel(this);
if (topLevel == null) return;
var save = await topLevel.StorageProvider.SaveFilePickerAsync(new FilePickerSaveOptions
{
Title = "Save NPC JSON",
SuggestedFileName = string.IsNullOrWhiteSpace(vm.Name) ? "npc.json" : vm.Name + ".json",
FileTypeChoices = new[]
{
new FilePickerFileType("JSON") { Patterns = new[] { "*.json" } }
}
});
if (save != null)
{
try
{
using var stream = await save.OpenWriteAsync();
using var writer = new StreamWriter(stream);
await writer.WriteAsync(vm.GeneratedNpcJson);
vm.StatusMessage = $"Saved NPC to {save.Path?.LocalPath ?? "(unknown)"}";
}
catch (Exception ex)
{
vm.StatusMessage = $"Error saving NPC: {ex.Message}";
}
}
}
private void OpenTempFolder_Click(object? sender, RoutedEventArgs e)
{
var vm = DataContext as MainWindowViewModel;
if (vm == null || string.IsNullOrWhiteSpace(vm.TemporaryNpcPath))
{
if (vm != null) vm.StatusMessage = "No temporary NPC file available.";
return;
}
try
{
var folder = Path.GetDirectoryName(vm.TemporaryNpcPath);
if (!string.IsNullOrWhiteSpace(folder) && Directory.Exists(folder))
{
Process.Start(new ProcessStartInfo
{
FileName = folder,
UseShellExecute = true
});
}
else
{
vm.StatusMessage = "Temporary folder not found.";
}
}
catch (Exception ex)
{
vm.StatusMessage = $"Error opening folder: {ex.Message}";
}
}
}
}