Add error handling to ProductsGrid.DataGridView_CellContentClick

This commit is contained in:
Michael Bucari-Tovo 2022-06-23 22:32:43 -06:00
parent 76b5e09f72
commit b65875386d
3 changed files with 51 additions and 49 deletions

View File

@ -165,7 +165,7 @@ namespace FileLiberator
LameConfig = GetLameOptions(config) LameConfig = GetLameOptions(config)
}; };
var chapters = getChapters(contentLic.ContentMetadata.ChapterInfo.Chapters).OrderBy(c => c.StartOffsetMs).ToList(); var chapters = flattenChapters(contentLic.ContentMetadata.ChapterInfo.Chapters).OrderBy(c => c.StartOffsetMs).ToList();
if (config.AllowLibationFixup || outputFormat == OutputFormat.Mp3) if (config.AllowLibationFixup || outputFormat == OutputFormat.Mp3)
{ {
@ -192,7 +192,7 @@ namespace FileLiberator
return dlOptions; return dlOptions;
} }
public static List<AudibleApi.Common.Chapter> getChapters(IEnumerable<AudibleApi.Common.Chapter> chapters) public static List<AudibleApi.Common.Chapter> flattenChapters(IEnumerable<AudibleApi.Common.Chapter> chapters, string titleConcat = ": ")
{ {
List<AudibleApi.Common.Chapter> chaps = new(); List<AudibleApi.Common.Chapter> chaps = new();
@ -200,19 +200,14 @@ namespace FileLiberator
{ {
if (c.Chapters is not null) if (c.Chapters is not null)
{ {
c.Chapters[0] = new AudibleApi.Common.Chapter c.Chapters[0].StartOffsetMs = c.StartOffsetMs;
{ c.Chapters[0].StartOffsetSec = c.StartOffsetSec;
Title = c.Chapters[0].Title, c.Chapters[0].LengthMs += c.LengthMs;
StartOffsetMs = c.StartOffsetMs,
StartOffsetSec = c.StartOffsetSec,
LengthMs = c.LengthMs + c.Chapters[0].LengthMs,
Chapters = c.Chapters[0].Chapters
};
var children = getChapters(c.Chapters); var children = flattenChapters(c.Chapters);
foreach (var child in children) foreach (var child in children)
child.Title = string.IsNullOrEmpty(c.Title) ? child.Title : $"{c.Title}: {child.Title}"; child.Title = $"{c.Title}{titleConcat}{child.Title}";
chaps.AddRange(children); chaps.AddRange(children);
} }

View File

@ -50,45 +50,52 @@ namespace LibationWinForms.GridView
#region Button controls #region Button controls
private void DataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e) private void DataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
{ {
// handle grid button click: https://stackoverflow.com/a/13687844 try
if (e.RowIndex < 0) {
return; // handle grid button click: https://stackoverflow.com/a/13687844
if (e.RowIndex < 0)
return;
var entry = getGridEntry(e.RowIndex); var entry = getGridEntry(e.RowIndex);
if (entry is LibraryBookEntry lbEntry) if (entry is LibraryBookEntry lbEntry)
{
if (e.ColumnIndex == liberateGVColumn.Index)
LiberateClicked?.Invoke(lbEntry);
else if (e.ColumnIndex == tagAndDetailsGVColumn.Index)
DetailsClicked?.Invoke(lbEntry);
else if (e.ColumnIndex == descriptionGVColumn.Index)
DescriptionClicked?.Invoke(lbEntry, gridEntryDataGridView.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, false));
else if (e.ColumnIndex == coverGVColumn.Index)
CoverClicked?.Invoke(lbEntry);
}
else if (entry is SeriesEntry sEntry)
{
if (e.ColumnIndex == liberateGVColumn.Index)
{ {
if (sEntry.Liberate.Expanded) if (e.ColumnIndex == liberateGVColumn.Index)
bindingList.CollapseItem(sEntry); LiberateClicked?.Invoke(lbEntry);
else else if (e.ColumnIndex == tagAndDetailsGVColumn.Index)
bindingList.ExpandItem(sEntry); DetailsClicked?.Invoke(lbEntry);
else if (e.ColumnIndex == descriptionGVColumn.Index)
sEntry.NotifyPropertyChanged(nameof(sEntry.Liberate)); DescriptionClicked?.Invoke(lbEntry, gridEntryDataGridView.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, false));
else if (e.ColumnIndex == coverGVColumn.Index)
VisibleCountChanged?.Invoke(this, bindingList.BookEntries().Count()); CoverClicked?.Invoke(lbEntry);
} }
else if (e.ColumnIndex == descriptionGVColumn.Index) else if (entry is SeriesEntry sEntry)
DescriptionClicked?.Invoke(sEntry, gridEntryDataGridView.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, false)); {
else if (e.ColumnIndex == coverGVColumn.Index) if (e.ColumnIndex == liberateGVColumn.Index)
CoverClicked?.Invoke(sEntry); {
} if (sEntry.Liberate.Expanded)
bindingList.CollapseItem(sEntry);
else
bindingList.ExpandItem(sEntry);
if (e.ColumnIndex == removeGVColumn.Index) sEntry.NotifyPropertyChanged(nameof(sEntry.Liberate));
VisibleCountChanged?.Invoke(this, bindingList.BookEntries().Count());
}
else if (e.ColumnIndex == descriptionGVColumn.Index)
DescriptionClicked?.Invoke(sEntry, gridEntryDataGridView.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, false));
else if (e.ColumnIndex == coverGVColumn.Index)
CoverClicked?.Invoke(sEntry);
}
if (e.ColumnIndex == removeGVColumn.Index)
{
gridEntryDataGridView.CommitEdit(DataGridViewDataErrorContexts.Commit);
RemovableCountChanged?.Invoke(this, EventArgs.Empty);
}
}
catch(Exception ex)
{ {
gridEntryDataGridView.CommitEdit(DataGridViewDataErrorContexts.Commit); Serilog.Log.Logger.Error(ex, $"An error was encountered while processing a user click in the {nameof(ProductsGrid)}");
RemovableCountChanged?.Invoke(this, EventArgs.Empty);
} }
} }

View File

@ -185,11 +185,11 @@ namespace FileLiberator.Tests
} }
}; };
var flatChapters = DownloadDecryptBook.getChapters(hierarchicalChapters).OrderBy(c => c.StartOffsetMs).ToArray(); var flatChapters = DownloadDecryptBook.flattenChapters(hierarchicalChapters);
flatChapters.Length.Should().Be(flatChapters.Length); flatChapters.Count.Should().Be(expected.Length);
for (int i = 0; i < flatChapters.Length; i++) for (int i = 0; i < flatChapters.Count; i++)
{ {
flatChapters[i].Title.Should().Be(expected[i].Title); flatChapters[i].Title.Should().Be(expected[i].Title);
flatChapters[i].StartOffsetMs.Should().Be(expected[i].StartOffsetMs); flatChapters[i].StartOffsetMs.Should().Be(expected[i].StartOffsetMs);