diff --git a/Source/LibationWinForms/AvaloniaUI/Assets/DataGridTheme.xaml b/Source/LibationWinForms/AvaloniaUI/Assets/DataGridTheme.xaml
index 22e58146..904b6a2b 100644
--- a/Source/LibationWinForms/AvaloniaUI/Assets/DataGridTheme.xaml
+++ b/Source/LibationWinForms/AvaloniaUI/Assets/DataGridTheme.xaml
@@ -87,13 +87,6 @@
-
-
-
(form.GetType().Name);
if (savedState is null)
@@ -64,6 +66,8 @@ namespace LibationWinForms.AvaloniaUI
}
public static void SaveSizeAndLocation(this Window form, Configuration config)
{
+ if (Design.IsDesignMode) return;
+
var saveState = new FormSizeAndPosition();
saveState.IsMaximized = form.WindowState == WindowState.Maximized;
diff --git a/Source/LibationWinForms/AvaloniaUI/Views/Dialogs/AccountsDialog.axaml b/Source/LibationWinForms/AvaloniaUI/Views/Dialogs/AccountsDialog.axaml
new file mode 100644
index 00000000..70e8ff87
--- /dev/null
+++ b/Source/LibationWinForms/AvaloniaUI/Views/Dialogs/AccountsDialog.axaml
@@ -0,0 +1,132 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Source/LibationWinForms/AvaloniaUI/Views/Dialogs/AccountsDialog.axaml.cs b/Source/LibationWinForms/AvaloniaUI/Views/Dialogs/AccountsDialog.axaml.cs
new file mode 100644
index 00000000..d12640b4
--- /dev/null
+++ b/Source/LibationWinForms/AvaloniaUI/Views/Dialogs/AccountsDialog.axaml.cs
@@ -0,0 +1,270 @@
+using AudibleUtilities;
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Markup.Xaml;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.IO;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace LibationWinForms.AvaloniaUI.Views.Dialogs
+{
+ public partial class AccountsDialog : DialogWindow
+ {
+ public ObservableCollection Accounts { get; } = new();
+ public class AccountDto
+ {
+ public IList Locales { get; init; }
+ public bool LibraryScan { get; set; } = true;
+ public string AccountId { get; set; }
+ public AudibleApi.Locale SelectedLocale { get; set; }
+ public string AccountName { get; set; }
+ public bool IsDefault => AccountId is null && SelectedLocale is null && AccountName is null;
+ }
+
+ private static string GetAudibleCliAppDataPath()
+ => Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Audible");
+
+ private List Locales => AudibleApi.Localization.Locales.OrderBy(l => l.Name).ToList();
+ public AccountsDialog()
+ {
+ InitializeComponent();
+
+ // WARNING: accounts persister will write ANY EDIT to object immediately to file
+ // here: copy strings and dispose of persister
+ // only persist in 'save' step
+ using var persister = AudibleApiStorage.GetAccountsSettingsPersister();
+ var accounts = persister.AccountsSettings.Accounts;
+ if (!accounts.Any())
+ return;
+
+
+ ControlToFocusOnShow = this.FindControl