From cecabc911eaa02d8af685a1cc78c230d609c9b0a Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Tue, 5 Aug 2025 10:29:48 -0600 Subject: [PATCH] Add "Locate Audiobooks" help text --- .../ViewModels/MainVM.Import.cs | 16 +++++++++++-- .../LibationAvalonia/Views/MainWindow.axaml | 2 +- .../Configuration.HelpText.cs | 23 +++++++++++++++++-- Source/LibationWinForms/Form1.ScanManual.cs | 12 +++++++++- 4 files changed, 47 insertions(+), 6 deletions(-) diff --git a/Source/LibationAvalonia/ViewModels/MainVM.Import.cs b/Source/LibationAvalonia/ViewModels/MainVM.Import.cs index 9947a488..de88b2bb 100644 --- a/Source/LibationAvalonia/ViewModels/MainVM.Import.cs +++ b/Source/LibationAvalonia/ViewModels/MainVM.Import.cs @@ -20,6 +20,7 @@ namespace LibationAvalonia.ViewModels private bool _removeButtonsVisible = Design.IsDesignMode; private int _numAccountsScanning = 2; private int _accountsCount = 0; + public string LocateAudiobooksTip => Configuration.GetHelpText("LocateAudiobooks"); /// Auto scanning accounts is enables public bool AutoScanChecked { get => _autoScanChecked; set => Configuration.Instance.AutoScan = this.RaiseAndSetIfChanged(ref _autoScanChecked, value); } @@ -173,8 +174,19 @@ namespace LibationAvalonia.ViewModels public async Task LocateAudiobooksAsync() { - var locateDialog = new LibationAvalonia.Dialogs.LocateAudiobooksDialog(); - await locateDialog.ShowDialog(MainWindow); + var result = await MessageBox.Show( + MainWindow, + Configuration.GetHelpText(nameof(LibationAvalonia.Dialogs.LocateAudiobooksDialog)), + "Locate Previously-Liberated Audiobook Files", + MessageBoxButtons.OKCancel, + MessageBoxIcon.Information, + MessageBoxDefaultButton.Button1); + + if (result is DialogResult.OK) + { + var locateDialog = new LibationAvalonia.Dialogs.LocateAudiobooksDialog(); + await locateDialog.ShowDialog(MainWindow); + } } private void setyNumScanningAccounts(int numScanning) diff --git a/Source/LibationAvalonia/Views/MainWindow.axaml b/Source/LibationAvalonia/Views/MainWindow.axaml index d34ec041..5934c5a1 100644 --- a/Source/LibationAvalonia/Views/MainWindow.axaml +++ b/Source/LibationAvalonia/Views/MainWindow.axaml @@ -110,7 +110,7 @@ - + diff --git a/Source/LibationFileManager/Configuration.HelpText.cs b/Source/LibationFileManager/Configuration.HelpText.cs index 26371122..52a59810 100644 --- a/Source/LibationFileManager/Configuration.HelpText.cs +++ b/Source/LibationFileManager/Configuration.HelpText.cs @@ -107,8 +107,27 @@ namespace LibationFileManager don't have a spatial audio version will be download as usual based on your other file quality settings. """ }, - } - .AsReadOnly(); + {"LocateAudiobooks",""" + Scan the contents a folder to find audio files that + match books in Libation's database. This is useful + if you moved your Books folder or re-installed + Libation and want it to be able to find your + already downloaded audiobooks. + + Prerequisite: An audiobook must already exist in + Libation's database (through an Audible account + scan) for a matching audio file to be found. + """ }, + {"LocateAudiobooksDialog",""" + Libation will search all .m4b and .mp3 files in a folder, looking for audio files belonging to library books in Libation's database. + + If an audiobook file is found that matches one of Libation's library books, Libation will mark that book as "Liberated" (green stoplight). + + For an audio file to be identified, Libation must have that library book in its database. If you're on a fresh installation of Libation, be sure to add and scan all of your Audible accounts before running this action. + + This may take a while, depending on the number of audio files in the folder and the speed of your storage device. + """ } + }.AsReadOnly(); public static string GetHelpText(string? settingName) => settingName != null && HelpText.TryGetValue(settingName, out var value) ? value : ""; diff --git a/Source/LibationWinForms/Form1.ScanManual.cs b/Source/LibationWinForms/Form1.ScanManual.cs index 93214d63..48333ae0 100644 --- a/Source/LibationWinForms/Form1.ScanManual.cs +++ b/Source/LibationWinForms/Form1.ScanManual.cs @@ -17,6 +17,7 @@ namespace LibationWinForms { this.Load += refreshImportMenu; AccountsSettingsPersister.Saved += (_, _) => Invoke(refreshImportMenu, null, null); + locateAudiobooksToolStripMenuItem.ToolTipText = Configuration.GetHelpText("LocateAudiobooks"); } private void refreshImportMenu(object _, EventArgs __) @@ -96,7 +97,16 @@ namespace LibationWinForms private void locateAudiobooksToolStripMenuItem_Click(object sender, EventArgs e) { - new LocateAudiobooksDialog().ShowDialog(); + var result = MessageBox.Show( + this, + Configuration.GetHelpText(nameof(LocateAudiobooksDialog)), + "Locate Previously-Liberated Audiobook Files", + MessageBoxButtons.OKCancel, + MessageBoxIcon.Information, + MessageBoxDefaultButton.Button1); + + if (result is DialogResult.OK) + new LocateAudiobooksDialog().ShowDialog(); } } }