json handling
This commit is contained in:
+10
-1
@@ -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>
|
||||
|
||||
|
||||
@@ -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}";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user