diff options
| author | David <daullmer@gmail.com> | 2021-03-18 11:25:58 +0100 |
|---|---|---|
| committer | David <daullmer@gmail.com> | 2021-03-18 11:25:58 +0100 |
| commit | 840eeff2afb0faca7e65057276a1a3c7787102bf (patch) | |
| tree | d624b4bf6adb64d84a20d2e7fd5f4378c654542f /MediaBrowser.Common/Providers | |
| parent | 14cbd22fbe0a1989f70895edbd0a0f52d850d55e (diff) | |
Apply suggestions from code review
Diffstat (limited to 'MediaBrowser.Common/Providers')
| -rw-r--r-- | MediaBrowser.Common/Providers/ProviderIdParsers.cs | 72 |
1 files changed, 41 insertions, 31 deletions
diff --git a/MediaBrowser.Common/Providers/ProviderIdParsers.cs b/MediaBrowser.Common/Providers/ProviderIdParsers.cs index 56e0112dd..bfe61a3f8 100644 --- a/MediaBrowser.Common/Providers/ProviderIdParsers.cs +++ b/MediaBrowser.Common/Providers/ProviderIdParsers.cs @@ -10,6 +10,9 @@ namespace MediaBrowser.Common.Providers /// </summary> public static class ProviderIdParsers { + private const int ImdbMinNumbers = 7; + private const int ImdbMaxNumbers = 8; + /// <summary> /// Parses an IMDb id from a string. /// </summary> @@ -21,7 +24,8 @@ namespace MediaBrowser.Common.Providers var span = text.AsSpan(); var tt = "tt".AsSpan(); - while (true) + // imdb id is at least 9 chars (tt + 7 numbers) + while (span.Length >= 2 + ImdbMinNumbers) { var ttPos = span.IndexOf(tt); if (ttPos == -1) @@ -31,27 +35,28 @@ namespace MediaBrowser.Common.Providers } span = span.Slice(ttPos + tt.Length); - - int i = 0; - // IMDb id has a maximum of 8 digits - int max = span.Length > 8 ? 8 : span.Length; - for (; i < max; i++) + var i = 0; + for (; i < Math.Min(span.Length, ImdbMaxNumbers); i++) { var c = span[i]; - - if (c < '0' || c > '9') + if (!IsDigit(c)) { break; } } - // IMDb id has a minimum of 7 digits - if (i >= 7) + // skip if more than 8 digits + if (i <= ImdbMaxNumbers && i >= ImdbMinNumbers) { imdbId = string.Concat(tt, span.Slice(0, i)); return true; } + + span = span.Slice(i); } + + imdbId = default; + return false; } /// <summary> @@ -86,34 +91,39 @@ namespace MediaBrowser.Common.Providers var span = text.AsSpan(); var searchSpan = searchString.AsSpan(); - while (true) + var searchPos = span.IndexOf(searchSpan); + if (searchPos == -1) { - var searchPos = span.IndexOf(searchSpan); - if (searchPos == -1) - { - providerId = default; - return false; - } - - span = span.Slice(searchPos + searchSpan.Length); + providerId = default; + return false; + } - int i = 0; - for (; i < span.Length; i++) - { - var c = span[i]; + span = span.Slice(searchPos + searchSpan.Length); - if (c < '0' || c > '9') - { - break; - } - } + int i = 0; + for (; i < span.Length; i++) + { + var c = span[i]; - if (i >= 1) + if (!IsDigit(c)) { - providerId = span.Slice(0, i).ToString(); - return true; + break; } } + + if (i >= 1) + { + providerId = span.Slice(0, i).ToString(); + return true; + } + + providerId = default; + return false; + } + + private static bool IsDigit(char c) + { + return c >= '0' && c <= '9'; } } } |
