aboutsummaryrefslogtreecommitdiff
path: root/Jellyfin.Api/ModelBinders
diff options
context:
space:
mode:
authorgithub@esslinger.dev <simon@esslinger.dev>2020-10-01 22:04:53 +0200
committergithub@esslinger.dev <simon@esslinger.dev>2020-10-01 22:04:53 +0200
commit4b4c74bdcd2ffd119f930226179360907c15fd74 (patch)
tree8ecb099bd84b58c74333436b64ed90248a00bb20 /Jellyfin.Api/ModelBinders
parentba12ea7f4a0bb4804bafa335d374d45bac37ea84 (diff)
feat: extend CommaDelimitedArrayModelBinder to support auto generated openAPI spec
Diffstat (limited to 'Jellyfin.Api/ModelBinders')
-rw-r--r--Jellyfin.Api/ModelBinders/CommaDelimitedArrayModelBinder.cs39
1 files changed, 28 insertions, 11 deletions
diff --git a/Jellyfin.Api/ModelBinders/CommaDelimitedArrayModelBinder.cs b/Jellyfin.Api/ModelBinders/CommaDelimitedArrayModelBinder.cs
index 1bfd741fd..92bbd9663 100644
--- a/Jellyfin.Api/ModelBinders/CommaDelimitedArrayModelBinder.cs
+++ b/Jellyfin.Api/ModelBinders/CommaDelimitedArrayModelBinder.cs
@@ -15,25 +15,42 @@ namespace Jellyfin.Api.ModelBinders
public Task BindModelAsync(ModelBindingContext bindingContext)
{
var valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
- var input = valueProviderResult.FirstValue;
var elementType = bindingContext.ModelType.GetElementType();
+ var converter = TypeDescriptor.GetConverter(elementType);
- if (input != null)
+ if (valueProviderResult.Length > 1)
{
- var converter = TypeDescriptor.GetConverter(elementType);
- var values = Array.ConvertAll(
- input.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries),
- x => { return converter.ConvertFromString(x != null ? x.Trim() : x); });
+ var result = Array.CreateInstance(elementType, valueProviderResult.Length);
- var typedValues = Array.CreateInstance(elementType, values.Length);
- values.CopyTo(typedValues, 0);
+ for (int i = 0; i < valueProviderResult.Length; i++)
+ {
+ var value = converter.ConvertFromString(valueProviderResult.Values[i].Trim());
- bindingContext.Result = ModelBindingResult.Success(typedValues);
+ result.SetValue(value, i);
+ }
+
+ bindingContext.Result = ModelBindingResult.Success(result);
}
else
{
- var emptyResult = Array.CreateInstance(elementType, 0);
- bindingContext.Result = ModelBindingResult.Success(emptyResult);
+ var value = valueProviderResult.FirstValue;
+
+ if (value != null)
+ {
+ var values = Array.ConvertAll(
+ value.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries),
+ x => { return converter.ConvertFromString(x != null ? x.Trim() : x); });
+
+ var typedValues = Array.CreateInstance(elementType, values.Length);
+ values.CopyTo(typedValues, 0);
+
+ bindingContext.Result = ModelBindingResult.Success(typedValues);
+ }
+ else
+ {
+ var emptyResult = Array.CreateInstance(elementType, 0);
+ bindingContext.Result = ModelBindingResult.Success(emptyResult);
+ }
}
return Task.CompletedTask;