aboutsummaryrefslogtreecommitdiff
path: root/Emby.Naming/Audio/AlbumParser.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Emby.Naming/Audio/AlbumParser.cs')
-rw-r--r--Emby.Naming/Audio/AlbumParser.cs55
1 files changed, 34 insertions, 21 deletions
diff --git a/Emby.Naming/Audio/AlbumParser.cs b/Emby.Naming/Audio/AlbumParser.cs
index 7d029a9f4..bbfdccc90 100644
--- a/Emby.Naming/Audio/AlbumParser.cs
+++ b/Emby.Naming/Audio/AlbumParser.cs
@@ -1,30 +1,38 @@
using System;
using System.Globalization;
using System.IO;
-using System.Linq;
using System.Text.RegularExpressions;
using Emby.Naming.Common;
namespace Emby.Naming.Audio
{
+ /// <summary>
+ /// Helper class to determine if Album is multipart.
+ /// </summary>
public class AlbumParser
{
private readonly NamingOptions _options;
+ /// <summary>
+ /// Initializes a new instance of the <see cref="AlbumParser"/> class.
+ /// </summary>
+ /// <param name="options">Naming options containing AlbumStackingPrefixes.</param>
public AlbumParser(NamingOptions options)
{
_options = options;
}
- public MultiPartResult ParseMultiPart(string path)
+ /// <summary>
+ /// Function that determines if album is multipart.
+ /// </summary>
+ /// <param name="path">Path to file.</param>
+ /// <returns>True if album is multipart.</returns>
+ public bool IsMultiPart(string path)
{
- var result = new MultiPartResult();
-
var filename = Path.GetFileName(path);
-
- if (string.IsNullOrEmpty(filename))
+ if (filename.Length == 0)
{
- return result;
+ return false;
}
// TODO: Move this logic into options object
@@ -33,31 +41,36 @@ namespace Emby.Naming.Audio
// Normalize
// Remove whitespace
- filename = filename.Replace("-", " ");
- filename = filename.Replace(".", " ");
- filename = filename.Replace("(", " ");
- filename = filename.Replace(")", " ");
+ filename = filename.Replace('-', ' ');
+ filename = filename.Replace('.', ' ');
+ filename = filename.Replace('(', ' ');
+ filename = filename.Replace(')', ' ');
filename = Regex.Replace(filename, @"\s+", " ");
- filename = filename.TrimStart();
+ ReadOnlySpan<char> trimmedFilename = filename.TrimStart();
foreach (var prefix in _options.AlbumStackingPrefixes)
{
- if (filename.IndexOf(prefix, StringComparison.OrdinalIgnoreCase) == 0)
+ if (!trimmedFilename.StartsWith(prefix, StringComparison.OrdinalIgnoreCase))
{
- var tmp = filename.Substring(prefix.Length);
+ continue;
+ }
- tmp = tmp.Trim().Split(' ').FirstOrDefault() ?? string.Empty;
+ var tmp = trimmedFilename.Slice(prefix.Length).Trim();
- if (int.TryParse(tmp, NumberStyles.Integer, CultureInfo.InvariantCulture, out var val))
- {
- result.IsMultiPart = true;
- break;
- }
+ int index = tmp.IndexOf(' ');
+ if (index != -1)
+ {
+ tmp = tmp.Slice(0, index);
+ }
+
+ if (int.TryParse(tmp, NumberStyles.Integer, CultureInfo.InvariantCulture, out _))
+ {
+ return true;
}
}
- return result;
+ return false;
}
}
}