Series should sort irrespective of initial the/a/an (like Title already does)
This commit is contained in:
parent
b120bb8a66
commit
9534969c2d
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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");
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user