aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations/Library/PathExtensions.cs
diff options
context:
space:
mode:
authorClaus Vium <cvium@users.noreply.github.com>2021-11-27 16:10:43 -0700
committerCody Robibero <cody@robibe.ro>2021-11-27 16:10:43 -0700
commit065d3fa837bf5d66d4b4e5382257b4ce76b9d0b3 (patch)
tree45730078a3aa2e1d93f32be44b26332985883a04 /Emby.Server.Implementations/Library/PathExtensions.cs
parent4890454935f6c56ff4d2fab0b71646311319c0ac (diff)
performance++
Diffstat (limited to 'Emby.Server.Implementations/Library/PathExtensions.cs')
-rw-r--r--Emby.Server.Implementations/Library/PathExtensions.cs23
1 files changed, 15 insertions, 8 deletions
diff --git a/Emby.Server.Implementations/Library/PathExtensions.cs b/Emby.Server.Implementations/Library/PathExtensions.cs
index d5b855cdf..8ce054c38 100644
--- a/Emby.Server.Implementations/Library/PathExtensions.cs
+++ b/Emby.Server.Implementations/Library/PathExtensions.cs
@@ -16,7 +16,7 @@ namespace Emby.Server.Implementations.Library
/// <param name="attribute">The attrib.</param>
/// <returns>System.String.</returns>
/// <exception cref="ArgumentException"><paramref name="str" /> or <paramref name="attribute" /> is empty.</exception>
- public static string? GetAttributeValue(this string str, string attribute)
+ public static string? GetAttributeValue(this ReadOnlySpan<char> str, ReadOnlySpan<char> attribute)
{
if (str.Length == 0)
{
@@ -28,17 +28,24 @@ namespace Emby.Server.Implementations.Library
throw new ArgumentException("String can't be empty.", nameof(attribute));
}
- string srch = "[" + attribute + "=";
- int start = str.IndexOf(srch, StringComparison.OrdinalIgnoreCase);
- if (start != -1)
+ var openBracketIndex = str.IndexOf('[');
+ var equalsIndex = str.IndexOf('=');
+ var closingBracketIndex = str.IndexOf(']');
+ while (openBracketIndex < equalsIndex && equalsIndex < closingBracketIndex)
{
- start += srch.Length;
- int end = str.IndexOf(']', start);
- return str.Substring(start, end - start);
+ if (str[(openBracketIndex + 1)..equalsIndex].Equals(attribute, StringComparison.OrdinalIgnoreCase))
+ {
+ return str[(equalsIndex + 1)..closingBracketIndex].Trim().ToString();
+ }
+
+ str = str[(closingBracketIndex+ 1)..];
+ openBracketIndex = str.IndexOf('[');
+ equalsIndex = str.IndexOf('=');
+ closingBracketIndex = str.IndexOf(']');
}
// for imdbid we also accept pattern matching
- if (string.Equals(attribute, "imdbid", StringComparison.OrdinalIgnoreCase))
+ if (attribute.Equals("imdbid", StringComparison.OrdinalIgnoreCase))
{
var match = ProviderIdParsers.TryFindImdbId(str, out var imdbId);
return match ? imdbId.ToString() : null;