Files
Libation/Source/LibationAvalonia/Dialogs/SettingsDialog.axaml.cs
Michael Bucari-Tovo 69a8eaad4a Add mock LibraryBook and Configuration capabilities
- Added `MockLibraryBook` which contains factories for easily creating mock LibraryBooks and Books
- Added mock Configuration
  - New `IPersistentDictionary` interface
  - New `MockPersistentDictionary` class which uses a `JObject` as its data store
  - Added `public static Configuration CreateMockInstance()`
    - This method returns a mock Configuration instance **and also sets the `Configuration.Instance` property**
    - Throws an exception if not in debug
- Updated all chardonnay controls to use the mocks in design mode. Previously I was using my actual database and settings file, but that approach is fragile and is unfriendly towards anyone else trying to work on it.
2025-11-05 13:28:49 -07:00

60 lines
1.6 KiB
C#

using Avalonia.Controls;
using FileManager;
using LibationAvalonia.ViewModels.Settings;
using LibationFileManager;
using LibationUiBase.Forms;
using System;
using System.Threading.Tasks;
namespace LibationAvalonia.Dialogs
{
public partial class SettingsDialog : DialogWindow
{
private SettingsVM settingsDisp;
private readonly Configuration config = Design.IsDesignMode ? Configuration.CreateMockInstance() : Configuration.Instance;
public SettingsDialog()
{
InitializeComponent();
DataContext = settingsDisp = new(config);
}
protected override async Task SaveAndCloseAsync()
{
#region validation
if (string.IsNullOrWhiteSpace(settingsDisp.ImportantSettings.BooksDirectory))
{
await MessageBox.Show(this.GetParentWindow(), "Cannot set Books Location to blank", "Location is blank", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
#endregion
settingsDisp.SaveSettings(config);
await MessageBox.VerboseLoggingWarning_ShowIfTrue();
await base.SaveAndCloseAsync();
}
public async void SaveButton_Clicked(object sender, Avalonia.Interactivity.RoutedEventArgs e)
{
LongPath lonNewBooks = settingsDisp.ImportantSettings.GetBooksDirectory();
if (!System.IO.Directory.Exists(lonNewBooks))
{
try
{
System.IO.Directory.CreateDirectory(lonNewBooks);
}
catch (Exception ex)
{
await MessageBox.Show(this, $"Error creating Books Location:\n\n{ex.Message}", "Error creating directory", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
await SaveAndCloseAsync();
}
}
}