diff --git a/Source/LibationAvalonia/App.axaml.cs b/Source/LibationAvalonia/App.axaml.cs index 1c8b2187..e31714b4 100644 --- a/Source/LibationAvalonia/App.axaml.cs +++ b/Source/LibationAvalonia/App.axaml.cs @@ -39,18 +39,15 @@ namespace LibationAvalonia } public static Task> LibraryTask; - public static bool SetupRequired; public override void OnFrameworkInitializationCompleted() { - LoadStyles(); - if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) { - if (SetupRequired) - { - var config = Configuration.Instance; + var config = Configuration.Instance; + if (!config.LibationSettingsAreValid) + { var defaultLibationFilesDir = Configuration.UserProfile; // check for existing settings in default location @@ -86,11 +83,29 @@ namespace LibationAvalonia { // all returns should be preceded by either: // - if config.LibationSettingsAreValid - // - error message, Exit() + // - error message, Exit() if (setupDialog.IsNewUser) { Configuration.SetLibationFiles(Configuration.UserProfile); - ShowSettingsWindow(desktop, setupDialog.Config, OnSettingsCompleted); + setupDialog.Config.Books = Path.Combine(Configuration.UserProfile, nameof(Configuration.Books)); + + if (setupDialog.Config.LibationSettingsAreValid) + { + var theme + = setupDialog.SelectedTheme.Content is nameof(ThemeVariant.Dark) + ? nameof(ThemeVariant.Dark) + : nameof(ThemeVariant.Light); + + setupDialog.Config.SetString(theme, nameof(ThemeVariant)); + + + await RunMigrationsAsync(setupDialog.Config); + LibraryTask = Task.Run(() => DbContexts.GetLibrary_Flat_NoTracking(includeParents: true)); + AudibleUtilities.AudibleApiStorage.EnsureAccountsSettingsFileExists(); + ShowMainWindow(desktop); + } + else + await CancelInstallation(); } else if (setupDialog.IsReturningUser) { @@ -130,40 +145,6 @@ namespace LibationAvalonia AppScaffolding.LibationScaffolding.RunPostMigrationScaffolding(config); } - private void ShowSettingsWindow(IClassicDesktopStyleApplicationLifetime desktop, Configuration config, Action OnClose) - { - config.Books ??= Path.Combine(Configuration.UserProfile, "Books"); - - var settingsDialog = new SettingsDialog(); - desktop.MainWindow = settingsDialog; - settingsDialog.RestoreSizeAndLocation(Configuration.Instance); - settingsDialog.Show(); - - void WindowClosing(object sender, System.ComponentModel.CancelEventArgs e) - { - settingsDialog.Closing -= WindowClosing; - e.Cancel = true; - OnClose?.Invoke(desktop, settingsDialog, config); - } - settingsDialog.Closing += WindowClosing; - } - - private async void OnSettingsCompleted(IClassicDesktopStyleApplicationLifetime desktop, SettingsDialog settingsDialog, Configuration config) - { - if (config.LibationSettingsAreValid) - { - await RunMigrationsAsync(config); - LibraryTask = Task.Run(() => DbContexts.GetLibrary_Flat_NoTracking(includeParents: true)); - AudibleUtilities.AudibleApiStorage.EnsureAccountsSettingsFileExists(); - ShowMainWindow(desktop); - } - else - await CancelInstallation(); - - settingsDialog.Close(); - } - - private void ShowLibationFilesDialog(IClassicDesktopStyleApplicationLifetime desktop, Configuration config, Action OnClose) { var libationFilesDialog = new LibationFilesDialog(); @@ -200,11 +181,23 @@ namespace LibationAvalonia MessageBoxIcon.Question); if (continueResult == DialogResult.Yes) - ShowSettingsWindow(desktop, config, OnSettingsCompleted); + { + config.Books = Path.Combine(libationFilesDialog.SelectedDirectory, nameof(Configuration.Books)); + + if (config.LibationSettingsAreValid) + { + await RunMigrationsAsync(config); + LibraryTask = Task.Run(() => DbContexts.GetLibrary_Flat_NoTracking(includeParents: true)); + AudibleUtilities.AudibleApiStorage.EnsureAccountsSettingsFileExists(); + ShowMainWindow(desktop); + } + else + await CancelInstallation(); + } else await CancelInstallation(); - } + libationFilesDialog.Close(); } @@ -230,11 +223,11 @@ namespace LibationAvalonia private static void LoadStyles() { - ProcessQueueBookFailedBrush = AvaloniaUtils.GetBrushFromResources("ProcessQueueBookFailedBrush"); - ProcessQueueBookCompletedBrush = AvaloniaUtils.GetBrushFromResources("ProcessQueueBookCompletedBrush"); - ProcessQueueBookCancelledBrush = AvaloniaUtils.GetBrushFromResources("ProcessQueueBookCancelledBrush"); - SeriesEntryGridBackgroundBrush = AvaloniaUtils.GetBrushFromResources("SeriesEntryGridBackgroundBrush"); - ProcessQueueBookDefaultBrush = AvaloniaUtils.GetBrushFromResources("ProcessQueueBookDefaultBrush"); + ProcessQueueBookFailedBrush = AvaloniaUtils.GetBrushFromResources(nameof(ProcessQueueBookFailedBrush)); + ProcessQueueBookCompletedBrush = AvaloniaUtils.GetBrushFromResources(nameof(ProcessQueueBookCompletedBrush)); + ProcessQueueBookCancelledBrush = AvaloniaUtils.GetBrushFromResources(nameof(ProcessQueueBookCancelledBrush)); + SeriesEntryGridBackgroundBrush = AvaloniaUtils.GetBrushFromResources(nameof(SeriesEntryGridBackgroundBrush)); + ProcessQueueBookDefaultBrush = AvaloniaUtils.GetBrushFromResources(nameof(ProcessQueueBookDefaultBrush)); HyperlinkVisited = AvaloniaUtils.GetBrushFromResources(nameof(HyperlinkVisited)); } } diff --git a/Source/LibationAvalonia/Dialogs/EditReplacementChars.axaml b/Source/LibationAvalonia/Dialogs/EditReplacementChars.axaml index e23fb97d..0fbd9f70 100644 --- a/Source/LibationAvalonia/Dialogs/EditReplacementChars.axaml +++ b/Source/LibationAvalonia/Dialogs/EditReplacementChars.axaml @@ -4,6 +4,7 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignWidth="500" d:DesignHeight="450" MinWidth="500" MinHeight="450" + Width="500" Height="450" x:Class="LibationAvalonia.Dialogs.EditReplacementChars" Title="Illegal Character Replacement" Icon="/Assets/libation.ico"> diff --git a/Source/LibationAvalonia/Dialogs/EditTemplateDialog.axaml b/Source/LibationAvalonia/Dialogs/EditTemplateDialog.axaml index 4723e4d0..db5dfe22 100644 --- a/Source/LibationAvalonia/Dialogs/EditTemplateDialog.axaml +++ b/Source/LibationAvalonia/Dialogs/EditTemplateDialog.axaml @@ -3,6 +3,7 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" + Width="800" Height="450" x:Class="LibationAvalonia.Dialogs.EditTemplateDialog" xmlns:dialogs="clr-namespace:LibationAvalonia.Dialogs" Icon="/Assets/libation.ico" diff --git a/Source/LibationAvalonia/Dialogs/ImageDisplayDialog.axaml b/Source/LibationAvalonia/Dialogs/ImageDisplayDialog.axaml index a6f0cfd7..46654fb7 100644 --- a/Source/LibationAvalonia/Dialogs/ImageDisplayDialog.axaml +++ b/Source/LibationAvalonia/Dialogs/ImageDisplayDialog.axaml @@ -5,6 +5,7 @@ mc:Ignorable="d" d:DesignWidth="500" d:DesignHeight="500" x:Class="LibationAvalonia.Dialogs.ImageDisplayDialog" MinWidth="500" MinHeight="500" + Width="500" Height="520" Title="Cover" WindowStartupLocation="CenterOwner" Icon="/Assets/libation.ico"> diff --git a/Source/LibationAvalonia/Dialogs/LiberatedStatusBatchAutoDialog.axaml b/Source/LibationAvalonia/Dialogs/LiberatedStatusBatchAutoDialog.axaml index 8430a7c5..05ffd5d0 100644 --- a/Source/LibationAvalonia/Dialogs/LiberatedStatusBatchAutoDialog.axaml +++ b/Source/LibationAvalonia/Dialogs/LiberatedStatusBatchAutoDialog.axaml @@ -8,6 +8,7 @@ Title="Liberated status: Whether the book has been downloaded" MinHeight="100" MaxHeight="165" MinWidth="600" MaxWidth="800" + Width="600" WindowStartupLocation="CenterOwner" Icon="/Assets/libation.ico"> diff --git a/Source/LibationAvalonia/Dialogs/LiberatedStatusBatchManualDialog.axaml b/Source/LibationAvalonia/Dialogs/LiberatedStatusBatchManualDialog.axaml index bdb39d0c..a0a294ab 100644 --- a/Source/LibationAvalonia/Dialogs/LiberatedStatusBatchManualDialog.axaml +++ b/Source/LibationAvalonia/Dialogs/LiberatedStatusBatchManualDialog.axaml @@ -8,6 +8,7 @@ Title="Liberated status: Whether the book has been downloaded" MinWidth="400" MinHeight="120" MaxWidth="400" MaxHeight="120" + Width="400" Height="120" WindowStartupLocation="CenterOwner" Icon="/Assets/libation.ico"> diff --git a/Source/LibationAvalonia/Dialogs/ScanAccountsDialog.axaml b/Source/LibationAvalonia/Dialogs/ScanAccountsDialog.axaml index a7cf73a3..2c67cec8 100644 --- a/Source/LibationAvalonia/Dialogs/ScanAccountsDialog.axaml +++ b/Source/LibationAvalonia/Dialogs/ScanAccountsDialog.axaml @@ -5,7 +5,7 @@ mc:Ignorable="d" d:DesignWidth="500" d:DesignHeight="185" x:Class="LibationAvalonia.Dialogs.ScanAccountsDialog" MinWidth="500" MinHeight="160" - MaxWidth="500" MaxHeight="185" + Width="500" Height="200" Title="Which Accounts?" WindowStartupLocation="CenterOwner" Icon="/Assets/libation.ico"> diff --git a/Source/LibationAvalonia/Dialogs/SearchSyntaxDialog.axaml b/Source/LibationAvalonia/Dialogs/SearchSyntaxDialog.axaml index 0e769a26..ccadfc6f 100644 --- a/Source/LibationAvalonia/Dialogs/SearchSyntaxDialog.axaml +++ b/Source/LibationAvalonia/Dialogs/SearchSyntaxDialog.axaml @@ -5,6 +5,7 @@ mc:Ignorable="d" d:DesignWidth="950" d:DesignHeight="650" MinWidth="950" MinHeight="650" MaxWidth="950" MaxHeight="650" + Width="950" Height="650" x:Class="LibationAvalonia.Dialogs.SearchSyntaxDialog" Title="Filter Options" WindowStartupLocation="CenterOwner" diff --git a/Source/LibationAvalonia/Dialogs/SettingsDialog.axaml b/Source/LibationAvalonia/Dialogs/SettingsDialog.axaml index d984dc3b..0f1207dc 100644 --- a/Source/LibationAvalonia/Dialogs/SettingsDialog.axaml +++ b/Source/LibationAvalonia/Dialogs/SettingsDialog.axaml @@ -4,6 +4,7 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignWidth="900" d:DesignHeight="750" MinWidth="900" MinHeight="700" + Width="900" Height="700" x:Class="LibationAvalonia.Dialogs.SettingsDialog" xmlns:controls="clr-namespace:LibationAvalonia.Controls" Title="Edit Settings" diff --git a/Source/LibationAvalonia/Dialogs/SetupDialog.axaml b/Source/LibationAvalonia/Dialogs/SetupDialog.axaml index 92a9d968..2a246e89 100644 --- a/Source/LibationAvalonia/Dialogs/SetupDialog.axaml +++ b/Source/LibationAvalonia/Dialogs/SetupDialog.axaml @@ -3,14 +3,16 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignWidth="500" d:DesignHeight="350" - MinWidth="500" MinHeight="350" - MaxWidth="500" MaxHeight="350" x:Class="LibationAvalonia.Dialogs.SetupDialog" WindowStartupLocation="CenterScreen" + Width="500" Height="350" Icon="/Assets/libation.ico" Title="Welcome to Libation"> - + - - + + + + VerticalAlignment="Top" + Text="Theme: " /> - + + + + + + + + +