Files
Libation/Source/LibationWinForms/Dialogs/LocateAudiobooksDialog.cs
Michael Bucari-Tovo d67692355f Enable project-wide nullable reference types
Added DB migration for nullable types.
2026-02-05 12:43:05 -07:00

68 lines
2.2 KiB
C#

using DataLayer;
using Dinah.Core;
using LibationFileManager;
using LibationUiBase;
using System;
using System.IO;
using System.Threading;
using System.Windows.Forms;
namespace LibationWinForms.Dialogs;
public partial class LocateAudiobooksDialog : Form
{
private readonly CancellationTokenSource tokenSource = new();
private readonly LocatedAudiobooksViewModel _viewModel;
public LocateAudiobooksDialog()
{
InitializeComponent();
this.SetLibationIcon();
this.RestoreSizeAndLocation(Configuration.Instance);
_viewModel = new LocatedAudiobooksViewModel(new SortBindingList<FoundAudiobook>());
dataGridView1.EnableHeadersVisualStyles = !Application.IsDarkModeEnabled;
dataGridView1.RowsAdded += DataGridView1_RowsAdded;
foundAudiobookBindingSource.DataSource = _viewModel.FoundFiles;
booksFoundLbl.DataBindings.Add(new Binding(nameof(booksFoundLbl.Text), _viewModel, nameof(_viewModel.FoundAsinCount), true, DataSourceUpdateMode.OnPropertyChanged, 0, booksFoundLbl.Text));
}
private void DataGridView1_RowsAdded(object? sender, DataGridViewRowsAddedEventArgs e)
{
dataGridView1.FirstDisplayedScrollingRowIndex = e.RowIndex;
}
private void LocateAudiobooks_FormClosing(object sender, FormClosingEventArgs e)
{
tokenSource.Cancel();
this.SaveSizeAndLocation(Configuration.Instance);
}
private async void LocateAudiobooks_Shown(object sender, EventArgs e)
{
var fbd = new FolderBrowserDialog
{
Description = "Select the folder to search for audiobooks",
UseDescriptionForTitle = true,
InitialDirectory = Configuration.Instance.Books?.Path ?? string.Empty
};
var result = fbd.ShowDialog(this);
if (result != DialogResult.OK || !Directory.Exists(fbd.SelectedPath))
{
DialogResult = result;
}
else
{
await _viewModel.FindAndAddBooksAsync(fbd.SelectedPath, tokenSource.Token);
MessageBox.Show(this, $"Libation has found {_viewModel.FoundAsinCount} unique audiobooks and added them to its database. ", $"Found {_viewModel.FoundAsinCount} Audiobooks");
}
}
private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex >= 0 && e.RowIndex < _viewModel.FoundFiles.Count)
Go.To.File(_viewModel.FoundFiles[e.RowIndex].Entry.Path);
}
}