Series should sort irrespective of initial the/a/an (like Title already does)

This commit is contained in:
Robert McRackan 2019-12-04 13:32:25 -05:00
parent b120bb8a66
commit 9534969c2d
2 changed files with 35 additions and 21 deletions

View File

@ -26,15 +26,15 @@ namespace LibationWinForm
[Browsable(false)] [Browsable(false)]
public IEnumerable<string> TagsEnumerated => book.UserDefinedItem.TagsEnumerated; public IEnumerable<string> TagsEnumerated => book.UserDefinedItem.TagsEnumerated;
// formatReplacements is what gets displayed // displayValues is what gets displayed
// the value that gets returned from the property is the cell's value // the value that gets returned from the property is the cell's value
// this allows for the value to be sorted one way and displayed another // this allows for the value to be sorted one way and displayed another
// eg: // eg:
// orig title: The Computer // orig title: The Computer
// formatReplacement: The Computer // formatReplacement: The Computer
// value for sorting: Computer // value for sorting: Computer
private Dictionary<string, string> formatReplacements { get; } = new Dictionary<string, string>(); private Dictionary<string, string> displayValues { get; } = new Dictionary<string, string>();
public bool TryGetFormatted(string key, out string value) => formatReplacements.TryGetValue(key, out value); public bool TryDisplayValue(string key, out string value) => displayValues.TryGetValue(key, out value);
public Image Cover => public Image Cover =>
WindowsDesktopUtilities.WinAudibleImageServer.GetImage(book.PictureId, FileManager.PictureSize._80x80); WindowsDesktopUtilities.WinAudibleImageServer.GetImage(book.PictureId, FileManager.PictureSize._80x80);
@ -43,16 +43,8 @@ namespace LibationWinForm
{ {
get get
{ {
formatReplacements[nameof(Title)] = book.Title; displayValues[nameof(Title)] = book.Title;
return getSortName(book.Title);
var sortName = book.Title
.Replace("|", "")
.Replace(":", "")
.ToLowerInvariant();
if (sortName.StartsWith("the ") || sortName.StartsWith("a ") || sortName.StartsWith("an "))
sortName = sortName.Substring(sortName.IndexOf(" ") + 1);
return sortName;
} }
} }
@ -63,7 +55,7 @@ namespace LibationWinForm
{ {
get get
{ {
formatReplacements[nameof(Length)] displayValues[nameof(Length)]
= book.LengthInMinutes == 0 = book.LengthInMinutes == 0
? "" ? ""
: $"{book.LengthInMinutes / 60} hr {book.LengthInMinutes % 60} min"; : $"{book.LengthInMinutes / 60} hr {book.LengthInMinutes % 60} min";
@ -72,7 +64,29 @@ namespace LibationWinForm
} }
} }
public string Series => book.SeriesNames; public string Series
{
get
{
displayValues[nameof(Series)] = book.SeriesNames;
return getSortName(book.SeriesNames);
}
}
private static string[] sortPrefixIgnores { get; } = new[] { "the", "a", "an" };
private static string getSortName(string unformattedName)
{
var sortName = unformattedName
.Replace("|", "")
.Replace(":", "")
.ToLowerInvariant()
.Trim();
if (sortPrefixIgnores.Any(prefix => sortName.StartsWith(prefix + " ")))
sortName = sortName.Substring(sortName.IndexOf(" ") + 1).TrimStart();
return sortName;
}
private string descriptionCache = null; private string descriptionCache = null;
public string Description public string Description
@ -111,7 +125,7 @@ namespace LibationWinForm
{ {
get get
{ {
formatReplacements[nameof(Product_Rating)] = starString(book.Rating); displayValues[nameof(Product_Rating)] = starString(book.Rating);
return firstScore(book.Rating); return firstScore(book.Rating);
} }
} }
@ -120,7 +134,7 @@ namespace LibationWinForm
{ {
get get
{ {
formatReplacements[nameof(Purchase_Date)] = libraryBook.DateAdded.ToString("d"); displayValues[nameof(Purchase_Date)] = libraryBook.DateAdded.ToString("d");
return libraryBook.DateAdded.ToString("yyyy-MM-dd HH:mm:ss"); return libraryBook.DateAdded.ToString("yyyy-MM-dd HH:mm:ss");
} }
} }
@ -129,7 +143,7 @@ namespace LibationWinForm
{ {
get get
{ {
formatReplacements[nameof(My_Rating)] = starString(book.UserDefinedItem.Rating); displayValues[nameof(My_Rating)] = starString(book.UserDefinedItem.Rating);
return firstScore(book.UserDefinedItem.Rating); return firstScore(book.UserDefinedItem.Rating);
} }
} }

View File

@ -179,7 +179,7 @@ namespace LibationWinForm
var liveGridEntry = getGridEntry(e.RowIndex); var liveGridEntry = getGridEntry(e.RowIndex);
// EditTagsDialog should display better-formatted title // EditTagsDialog should display better-formatted title
liveGridEntry.TryGetFormatted(nameof(liveGridEntry.Title), out string value); liveGridEntry.TryDisplayValue(nameof(liveGridEntry.Title), out string value);
var editTagsForm = new EditTagsDialog(value, liveGridEntry.Tags); var editTagsForm = new EditTagsDialog(value, liveGridEntry.Tags);
if (editTagsForm.ShowDialog() != DialogResult.OK) if (editTagsForm.ShowDialog() != DialogResult.OK)
@ -201,11 +201,11 @@ namespace LibationWinForm
private void replaceFormatted(object sender, DataGridViewCellFormattingEventArgs e) private void replaceFormatted(object sender, DataGridViewCellFormattingEventArgs e)
{ {
var col = ((DataGridView)sender).Columns[e.ColumnIndex]; var col = ((DataGridView)sender).Columns[e.ColumnIndex];
if (col is DataGridViewTextBoxColumn textCol && getGridEntry(e.RowIndex).TryGetFormatted(textCol.Name, out string value)) if (col is DataGridViewTextBoxColumn textCol && getGridEntry(e.RowIndex).TryDisplayValue(textCol.Name, out string value))
e.Value = value; e.Value = value;
} }
private void hiddenFormatting(object sender, DataGridViewCellFormattingEventArgs e) private void hiddenFormatting(object _, DataGridViewCellFormattingEventArgs e)
{ {
var isHidden = getGridEntry(e.RowIndex).TagsEnumerated.Contains("hidden"); var isHidden = getGridEntry(e.RowIndex).TagsEnumerated.Contains("hidden");