Add more speed and more tests

pull/6912/head
Cody Robibero 3 years ago
parent 3513f5a84b
commit 593b2fd359

@ -28,21 +28,26 @@ namespace Emby.Server.Implementations.Library
throw new ArgumentException("String can't be empty.", nameof(attribute)); throw new ArgumentException("String can't be empty.", nameof(attribute));
} }
var openBracketIndex = str.IndexOf('[');
var attributeIndex = str.IndexOf(attribute); var attributeIndex = str.IndexOf(attribute);
var closingBracketIndex = str.IndexOf(']');
while (openBracketIndex < attributeIndex && attributeIndex < closingBracketIndex) // Must be at least 3 characters after the attribute =, ], any character.
var maxIndex = str.Length - attribute.Length - 3;
while (attributeIndex > -1 && attributeIndex < maxIndex)
{ {
if (openBracketIndex + 1 == attributeIndex var attributeEnd = attributeIndex + attribute.Length;
&& str[attributeIndex + attribute.Length] == '=') if (attributeIndex > 0
&& str[attributeIndex - 1] == '['
&& str[attributeEnd] == '=')
{ {
return str[(attributeIndex + attribute.Length + 1)..closingBracketIndex].Trim().ToString(); var closingIndex = str[attributeEnd..].IndexOf(']');
if (closingIndex != -1)
{
return str[(attributeEnd + 1)..(attributeEnd + closingIndex)].Trim().ToString();
}
} }
str = str[(closingBracketIndex + 1)..]; str = str[attributeEnd..];
openBracketIndex = str.IndexOf('[');
attributeIndex = str.IndexOf(attribute); attributeIndex = str.IndexOf(attribute);
closingBracketIndex = str.IndexOf(']');
} }
// for imdbid we also accept pattern matching // for imdbid we also accept pattern matching

@ -14,6 +14,14 @@ namespace Jellyfin.Server.Implementations.Tests.Library
[InlineData("Superman: Red Son [imdbid1=tt11111111][imdbid=tt10985510]", "imdbid", "tt10985510")] [InlineData("Superman: Red Son [imdbid1=tt11111111][imdbid=tt10985510]", "imdbid", "tt10985510")]
[InlineData("Superman: Red Son [tmdbid=618355][imdbid=tt10985510]", "imdbid", "tt10985510")] [InlineData("Superman: Red Son [tmdbid=618355][imdbid=tt10985510]", "imdbid", "tt10985510")]
[InlineData("Superman: Red Son [tmdbid=618355][imdbid=tt10985510]", "tmdbid", "618355")] [InlineData("Superman: Red Son [tmdbid=618355][imdbid=tt10985510]", "tmdbid", "618355")]
[InlineData("[tmdbid=618355]", "tmdbid", "618355")]
[InlineData("tmdbid=618355][tmdbid=618355]", "tmdbid", "618355")]
[InlineData("[tmdbid=618355]tmdbid=618355]", "tmdbid", "618355")]
[InlineData("tmdbid=618355]", "tmdbid", null)]
[InlineData("[tmdbid=618355", "tmdbid", null)]
[InlineData("tmdbid=618355", "tmdbid", null)]
[InlineData("tmdbid=", "tmdbid", null)]
[InlineData("tmdbid", "tmdbid", null)]
public void GetAttributeValue_ValidArgs_Correct(string input, string attribute, string? expectedResult) public void GetAttributeValue_ValidArgs_Correct(string input, string attribute, string? expectedResult)
{ {
Assert.Equal(expectedResult, PathExtensions.GetAttributeValue(input, attribute)); Assert.Equal(expectedResult, PathExtensions.GetAttributeValue(input, attribute));

Loading…
Cancel
Save