diff --git a/Source/HangoverAvalonia/HangoverAvalonia.csproj b/Source/HangoverAvalonia/HangoverAvalonia.csproj index e9473042..fa9d602a 100644 --- a/Source/HangoverAvalonia/HangoverAvalonia.csproj +++ b/Source/HangoverAvalonia/HangoverAvalonia.csproj @@ -6,7 +6,7 @@ copyused true true - + Hangover true false false diff --git a/Source/HangoverAvalonia/Properties/PublishProfiles/LinuxProfile.pubxml b/Source/HangoverAvalonia/Properties/PublishProfiles/LinuxProfile.pubxml index a846a327..11791d50 100644 --- a/Source/HangoverAvalonia/Properties/PublishProfiles/LinuxProfile.pubxml +++ b/Source/HangoverAvalonia/Properties/PublishProfiles/LinuxProfile.pubxml @@ -3,14 +3,15 @@ https://go.microsoft.com/fwlink/?LinkID=208121. --> - - Release - Any CPU - ..\bin\Release\linux-chardonnay - FileSystem - net6.0 - linux-x64 - false - false - + + Release + Any CPU + ..\bin\Release\linux-chardonnay + FileSystem + net6.0 + linux-x64 + true + false + false + \ No newline at end of file diff --git a/Source/HangoverAvalonia/Properties/PublishProfiles/MacOSProfile.pubxml b/Source/HangoverAvalonia/Properties/PublishProfiles/MacOSProfile.pubxml index 5d1e98f9..b982645c 100644 --- a/Source/HangoverAvalonia/Properties/PublishProfiles/MacOSProfile.pubxml +++ b/Source/HangoverAvalonia/Properties/PublishProfiles/MacOSProfile.pubxml @@ -10,7 +10,8 @@ https://go.microsoft.com/fwlink/?LinkID=208121. FileSystem net6.0 osx-x64 - false - false + true + false + false \ No newline at end of file diff --git a/Source/LibationAvalonia/App.axaml.cs b/Source/LibationAvalonia/App.axaml.cs index 016c1f28..c32d82f4 100644 --- a/Source/LibationAvalonia/App.axaml.cs +++ b/Source/LibationAvalonia/App.axaml.cs @@ -72,7 +72,6 @@ namespace LibationAvalonia var SEGOEUI = new Typeface(new FontFamily(new Uri("avares://Libation/Assets/WINGDING.TTF"), "SEGOEUI_Local")); var gtf = FontManager.Current.GetOrAddGlyphTypeface(SEGOEUI); - if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) { if (SetupRequired) @@ -115,28 +114,21 @@ namespace LibationAvalonia // all returns should be preceded by either: // - if config.LibationSettingsAreValid // - error message, Exit() - - if ((!setupDialog.IsNewUser - && !setupDialog.IsReturningUser) || - !await RunInstall(setupDialog)) + if (setupDialog.IsNewUser) + { + setupDialog.Config.SetLibationFiles(Configuration.UserProfile); + ShowSettingsWindow(desktop, setupDialog.Config, OnSettingsCompleted); + } + else if (setupDialog.IsReturningUser) + { + ShowLibationFilesDialog(desktop, setupDialog.Config, OnLibationFilesCompleted); + } + else { await CancelInstallation(); return; } - - // most migrations go in here - AppScaffolding.LibationScaffolding.RunPostConfigMigrations(setupDialog.Config); - - await MessageBox.VerboseLoggingWarning_ShowIfTrue(); - -#if !DEBUG - //AutoUpdater.NET only works for WinForms or WPF application projects. - //checkForUpdate(); -#endif - // logging is init'd here - AppScaffolding.LibationScaffolding.RunPostMigrationScaffolding(setupDialog.Config); - } catch (Exception ex) { @@ -152,32 +144,83 @@ namespace LibationAvalonia } return; } - - LibraryTask = Task.Run(() => DbContexts.GetLibrary_Flat_NoTracking(includeParents: true)); - AudibleUtilities.AudibleApiStorage.EnsureAccountsSettingsFileExists(); - ShowMainWindow(desktop); } - private static async Task RunInstall(SetupDialog setupDialog) + private async Task RunMigrationsAsync(Configuration config) { - var config = setupDialog.Config; + // most migrations go in here + AppScaffolding.LibationScaffolding.RunPostConfigMigrations(config); - if (setupDialog.IsNewUser) + await MessageBox.VerboseLoggingWarning_ShowIfTrue(); + + // logging is init'd here + AppScaffolding.LibationScaffolding.RunPostMigrationScaffolding(config); + } + + private void ShowSettingsWindow(IClassicDesktopStyleApplicationLifetime desktop, Configuration config, Action OnClose) + { + config.Books ??= Path.Combine(Configuration.UserProfile, "Books"); + + AppScaffolding.LibationScaffolding.PopulateMissingConfigValues(config); + + var settingsDialog = new SettingsDialog(); + desktop.MainWindow = settingsDialog; + settingsDialog.RestoreSizeAndLocation(Configuration.Instance); + settingsDialog.Show(); + + void WindowClosing(object sender, System.ComponentModel.CancelEventArgs e) { - config.SetLibationFiles(Configuration.UserProfile); + settingsDialog.Closing -= WindowClosing; + e.Cancel = true; + OnClose?.Invoke(desktop, settingsDialog, config); } - else if (setupDialog.IsReturningUser) + 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(); - var libationFilesDialog = new LibationFilesDialog(); + settingsDialog.Close(); + } - if (await libationFilesDialog.ShowDialog(setupDialog) != DialogResult.OK) - return false; - config.SetLibationFiles(libationFilesDialog.SelectedDirectory); - if (config.LibationSettingsAreValid) - return true; + private void ShowLibationFilesDialog(IClassicDesktopStyleApplicationLifetime desktop, Configuration config, Action OnClose) + { + var libationFilesDialog = new LibationFilesDialog(); + desktop.MainWindow = libationFilesDialog; + libationFilesDialog.Show(); + void WindowClosing(object sender, System.ComponentModel.CancelEventArgs e) + { + libationFilesDialog.Closing -= WindowClosing; + e.Cancel = true; + OnClose?.Invoke(desktop, libationFilesDialog, config); + } + libationFilesDialog.Closing += WindowClosing; + } + + private async void OnLibationFilesCompleted(IClassicDesktopStyleApplicationLifetime desktop, LibationFilesDialog libationFilesDialog, Configuration config) + { + config.SetLibationFiles(libationFilesDialog.SelectedDirectory); + if (config.LibationSettingsAreValid) + { + await RunMigrationsAsync(config); + + LibraryTask = Task.Run(() => DbContexts.GetLibrary_Flat_NoTracking(includeParents: true)); + AudibleUtilities.AudibleApiStorage.EnsureAccountsSettingsFileExists(); + ShowMainWindow(desktop); + } + else + { // path did not result in valid settings var continueResult = await MessageBox.Show( $"No valid settings were found at this location.\r\nWould you like to create a new install settings in this folder?\r\n\r\n{libationFilesDialog.SelectedDirectory}", @@ -185,17 +228,13 @@ namespace LibationAvalonia MessageBoxButtons.YesNo, MessageBoxIcon.Question); - if (continueResult != DialogResult.Yes) - return false; + if (continueResult == DialogResult.Yes) + ShowSettingsWindow(desktop, config, OnSettingsCompleted); + else + await CancelInstallation(); + } - - // INIT DEFAULT SETTINGS - // if 'new user' was clicked, or if 'returning user' chose new install: show basic settings dialog - config.Books ??= Path.Combine(Configuration.UserProfile, "Books"); - - AppScaffolding.LibationScaffolding.PopulateMissingConfigValues(config); - return await new SettingsDialog().ShowDialog(setupDialog) == DialogResult.OK - && config.LibationSettingsAreValid; + libationFilesDialog.Close(); } static async Task CancelInstallation() diff --git a/Source/LibationAvalonia/Dialogs/LibationFilesDialog.axaml b/Source/LibationAvalonia/Dialogs/LibationFilesDialog.axaml index 0ddabd5e..b394e510 100644 --- a/Source/LibationAvalonia/Dialogs/LibationFilesDialog.axaml +++ b/Source/LibationAvalonia/Dialogs/LibationFilesDialog.axaml @@ -7,6 +7,7 @@ MinWidth="800" MaxWidth="800" x:Class="LibationAvalonia.Dialogs.LibationFilesDialog" xmlns:controls="clr-namespace:LibationAvalonia.Controls" + WindowStartupLocation="CenterScreen" Title="Book Details" Icon="/Assets/libation.ico"> diff --git a/Source/LibationAvalonia/Dialogs/LibationFilesDialog.axaml.cs b/Source/LibationAvalonia/Dialogs/LibationFilesDialog.axaml.cs index a1ba044f..bdc73730 100644 --- a/Source/LibationAvalonia/Dialogs/LibationFilesDialog.axaml.cs +++ b/Source/LibationAvalonia/Dialogs/LibationFilesDialog.axaml.cs @@ -23,6 +23,7 @@ namespace LibationAvalonia.Dialogs } private DirSelectOptions dirSelectOptions; public string SelectedDirectory => dirSelectOptions.Directory; + public DialogResult DialogResult { get; private set; } public LibationFilesDialog() { InitializeComponent(); @@ -44,7 +45,8 @@ namespace LibationAvalonia.Dialogs return; } - Close(DialogResult.OK); + DialogResult = DialogResult.OK; + Close(DialogResult); } private void InitializeComponent() diff --git a/Source/LibationAvalonia/Properties/PublishProfiles/LinuxProfile.pubxml b/Source/LibationAvalonia/Properties/PublishProfiles/LinuxProfile.pubxml index a846a327..11791d50 100644 --- a/Source/LibationAvalonia/Properties/PublishProfiles/LinuxProfile.pubxml +++ b/Source/LibationAvalonia/Properties/PublishProfiles/LinuxProfile.pubxml @@ -3,14 +3,15 @@ https://go.microsoft.com/fwlink/?LinkID=208121. --> - - Release - Any CPU - ..\bin\Release\linux-chardonnay - FileSystem - net6.0 - linux-x64 - false - false - + + Release + Any CPU + ..\bin\Release\linux-chardonnay + FileSystem + net6.0 + linux-x64 + true + false + false + \ No newline at end of file diff --git a/Source/LibationAvalonia/Properties/PublishProfiles/MacOSProfile.pubxml b/Source/LibationAvalonia/Properties/PublishProfiles/MacOSProfile.pubxml index 5d1e98f9..51602bd3 100644 --- a/Source/LibationAvalonia/Properties/PublishProfiles/MacOSProfile.pubxml +++ b/Source/LibationAvalonia/Properties/PublishProfiles/MacOSProfile.pubxml @@ -3,14 +3,15 @@ https://go.microsoft.com/fwlink/?LinkID=208121. --> - - Release - Any CPU - ..\bin\Release\macos-chardonnay - FileSystem - net6.0 - osx-x64 - false - false - + + Release + Any CPU + ..\bin\Release\macos-chardonnay + FileSystem + net6.0 + osx-x64 + true + false + false + \ No newline at end of file diff --git a/Source/LibationAvalonia/Views/MainWindow/MainWindow.axaml.cs b/Source/LibationAvalonia/Views/MainWindow/MainWindow.axaml.cs index 64d0dced..e6e747ff 100644 --- a/Source/LibationAvalonia/Views/MainWindow/MainWindow.axaml.cs +++ b/Source/LibationAvalonia/Views/MainWindow/MainWindow.axaml.cs @@ -70,7 +70,7 @@ namespace LibationAvalonia.Views #if !DEBUG //This is temporaty until we have a solution for linux/mac so that //Libation doesn't download a zip every time it runs. - if (!App.IsWindows) + if (!LibationScaffolding.IsWindows) return; try @@ -85,15 +85,15 @@ namespace LibationAvalonia.Views if (result != DialogResult.Yes) return; - if (App.IsWindows) + if (LibationScaffolding.IsWindows) { runWindowsUpgrader(zipFile); } - else if (App.IsLinux) + else if (LibationScaffolding.IsLinux) { } - else if (App.IsMacOs) + else if (LibationScaffolding.IsMacOs) { } diff --git a/Source/LibationCli/Properties/PublishProfiles/LinuxProfile.pubxml b/Source/LibationCli/Properties/PublishProfiles/LinuxProfile.pubxml index a846a327..11791d50 100644 --- a/Source/LibationCli/Properties/PublishProfiles/LinuxProfile.pubxml +++ b/Source/LibationCli/Properties/PublishProfiles/LinuxProfile.pubxml @@ -3,14 +3,15 @@ https://go.microsoft.com/fwlink/?LinkID=208121. --> - - Release - Any CPU - ..\bin\Release\linux-chardonnay - FileSystem - net6.0 - linux-x64 - false - false - + + Release + Any CPU + ..\bin\Release\linux-chardonnay + FileSystem + net6.0 + linux-x64 + true + false + false + \ No newline at end of file diff --git a/Source/LibationCli/Properties/PublishProfiles/MacOSProfile.pubxml b/Source/LibationCli/Properties/PublishProfiles/MacOSProfile.pubxml index 5d1e98f9..51602bd3 100644 --- a/Source/LibationCli/Properties/PublishProfiles/MacOSProfile.pubxml +++ b/Source/LibationCli/Properties/PublishProfiles/MacOSProfile.pubxml @@ -3,14 +3,15 @@ https://go.microsoft.com/fwlink/?LinkID=208121. --> - - Release - Any CPU - ..\bin\Release\macos-chardonnay - FileSystem - net6.0 - osx-x64 - false - false - + + Release + Any CPU + ..\bin\Release\macos-chardonnay + FileSystem + net6.0 + osx-x64 + true + false + false + \ No newline at end of file diff --git a/Source/LibationCli/Properties/PublishProfiles/WindowsProfile.pubxml b/Source/LibationCli/Properties/PublishProfiles/WindowsProfile.pubxml index 1490c0a5..24f5783e 100644 --- a/Source/LibationCli/Properties/PublishProfiles/WindowsProfile.pubxml +++ b/Source/LibationCli/Properties/PublishProfiles/WindowsProfile.pubxml @@ -3,15 +3,15 @@ https://go.microsoft.com/fwlink/?LinkID=208121. --> - - Release - Any CPU - ..\bin\Release\win-chardonnay - FileSystem - net6.0 - win-x64 - true - false - false - + + Release + Any CPU + ..\bin\Release\win-chardonnay + FileSystem + net6.0 + win-x64 + true + false + false + \ No newline at end of file