diff options
| author | Shadowghost <Ghost_of_Stone@web.de> | 2023-03-09 19:33:51 -0500 |
|---|---|---|
| committer | crobibero <cody@robibe.ro> | 2023-03-09 19:33:51 -0500 |
| commit | 65090ac817f86c7591d916a7ce0d9ceb4f26e821 (patch) | |
| tree | b5ffa6c8e41df51b082cd07087d4a84f46dcd593 | |
| parent | ef3868ff501c2f025f235f10ae520d07f18fa516 (diff) | |
Backport pull request #9351 from jellyfin/release-10.8.z
Fix EqualsAny condition check for int and double
Original-merge: e8b0ae07afd9fc08a216d6aa632ee20d6d88566b
Merged-by: Bond-009 <bond.009@outlook.com>
Backported-by: crobibero <cody@robibe.ro>
| -rw-r--r-- | MediaBrowser.Model/Dlna/ConditionProcessor.cs | 39 |
1 files changed, 34 insertions, 5 deletions
diff --git a/MediaBrowser.Model/Dlna/ConditionProcessor.cs b/MediaBrowser.Model/Dlna/ConditionProcessor.cs index 00b406bbe..f5e1a3c49 100644 --- a/MediaBrowser.Model/Dlna/ConditionProcessor.cs +++ b/MediaBrowser.Model/Dlna/ConditionProcessor.cs @@ -136,12 +136,26 @@ namespace MediaBrowser.Model.Dlna return !condition.IsRequired; } - if (int.TryParse(condition.Value, CultureInfo.InvariantCulture, out var expected)) + var conditionType = condition.Condition; + if (condition.Condition == ProfileConditionType.EqualsAny) { - switch (condition.Condition) + foreach (var singleConditionString in condition.Value.AsSpan().Split('|')) + { + if (int.TryParse(singleConditionString, NumberStyles.Integer, CultureInfo.InvariantCulture, out int conditionValue) + && conditionValue.Equals(currentValue)) + { + return true; + } + } + + return false; + } + + if (int.TryParse(condition.Value, NumberStyles.Integer, CultureInfo.InvariantCulture, out var expected)) + { + switch (conditionType) { case ProfileConditionType.Equals: - case ProfileConditionType.EqualsAny: return currentValue.Value.Equals(expected); case ProfileConditionType.GreaterThanEqual: return currentValue.Value >= expected; @@ -212,9 +226,24 @@ namespace MediaBrowser.Model.Dlna return !condition.IsRequired; } - if (double.TryParse(condition.Value, CultureInfo.InvariantCulture, out var expected)) + var conditionType = condition.Condition; + if (condition.Condition == ProfileConditionType.EqualsAny) { - switch (condition.Condition) + foreach (var singleConditionString in condition.Value.AsSpan().Split('|')) + { + if (double.TryParse(singleConditionString, NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, out double conditionValue) + && conditionValue.Equals(currentValue)) + { + return true; + } + } + + return false; + } + + if (double.TryParse(condition.Value, NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, out var expected)) + { + switch (conditionType) { case ProfileConditionType.Equals: return currentValue.Value.Equals(expected); |
