|
@@ -775,36 +775,6 @@ namespace MediaBrowser.Controller.Entities
|
|
|
return Id.ToString("N", CultureInfo.InvariantCulture);
|
|
|
}
|
|
|
|
|
|
- private List<Tuple<StringBuilder, bool>> GetSortChunks(string s1)
|
|
|
- {
|
|
|
- var list = new List<Tuple<StringBuilder, bool>>();
|
|
|
-
|
|
|
- int thisMarker = 0;
|
|
|
-
|
|
|
- while (thisMarker < s1.Length)
|
|
|
- {
|
|
|
- char thisCh = s1[thisMarker];
|
|
|
-
|
|
|
- var thisChunk = new StringBuilder();
|
|
|
- bool isNumeric = char.IsDigit(thisCh);
|
|
|
-
|
|
|
- while (thisMarker < s1.Length && char.IsDigit(thisCh) == isNumeric)
|
|
|
- {
|
|
|
- thisChunk.Append(thisCh);
|
|
|
- thisMarker++;
|
|
|
-
|
|
|
- if (thisMarker < s1.Length)
|
|
|
- {
|
|
|
- thisCh = s1[thisMarker];
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- list.Add(new Tuple<StringBuilder, bool>(thisChunk, isNumeric));
|
|
|
- }
|
|
|
-
|
|
|
- return list;
|
|
|
- }
|
|
|
-
|
|
|
public virtual bool CanDelete()
|
|
|
{
|
|
|
if (SourceType == SourceType.Channel)
|
|
@@ -951,28 +921,40 @@ namespace MediaBrowser.Controller.Entities
|
|
|
return ModifySortChunks(sortable);
|
|
|
}
|
|
|
|
|
|
- private string ModifySortChunks(string name)
|
|
|
+ internal static string ModifySortChunks(string name)
|
|
|
{
|
|
|
- var chunks = GetSortChunks(name);
|
|
|
+ void AppendChunk(StringBuilder builder, bool isDigitChunk, ReadOnlySpan<char> chunk)
|
|
|
+ {
|
|
|
+ if (isDigitChunk && chunk.Length < 10)
|
|
|
+ {
|
|
|
+ builder.Append('0', 10 - chunk.Length);
|
|
|
+ }
|
|
|
|
|
|
- var builder = new StringBuilder();
|
|
|
+ builder.Append(chunk);
|
|
|
+ }
|
|
|
|
|
|
- foreach (var chunk in chunks)
|
|
|
+ if (name.Length == 0)
|
|
|
{
|
|
|
- var chunkBuilder = chunk.Item1;
|
|
|
+ return string.Empty;
|
|
|
+ }
|
|
|
+
|
|
|
+ var builder = new StringBuilder(name.Length);
|
|
|
|
|
|
- // This chunk is numeric
|
|
|
- if (chunk.Item2)
|
|
|
+ int chunkStart = 0;
|
|
|
+ bool isDigitChunk = char.IsDigit(name[0]);
|
|
|
+ for (int i = 0; i < name.Length; i++)
|
|
|
+ {
|
|
|
+ var isDigit = char.IsDigit(name[i]);
|
|
|
+ if (isDigit != isDigitChunk)
|
|
|
{
|
|
|
- while (chunkBuilder.Length < 10)
|
|
|
- {
|
|
|
- chunkBuilder.Insert(0, '0');
|
|
|
- }
|
|
|
+ AppendChunk(builder, isDigitChunk, name.AsSpan(chunkStart, i - chunkStart));
|
|
|
+ chunkStart = i;
|
|
|
+ isDigitChunk = isDigit;
|
|
|
}
|
|
|
-
|
|
|
- builder.Append(chunkBuilder);
|
|
|
}
|
|
|
|
|
|
+ AppendChunk(builder, isDigitChunk, name.AsSpan(chunkStart));
|
|
|
+
|
|
|
// logger.LogDebug("ModifySortChunks Start: {0} End: {1}", name, builder.ToString());
|
|
|
return builder.ToString().RemoveDiacritics();
|
|
|
}
|