123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- using System;
- using System.Globalization;
- using System.Threading.Tasks;
- using Microsoft.AspNetCore.Mvc.ModelBinding;
- using Microsoft.AspNetCore.Mvc.ModelBinding.Binders;
- using Microsoft.Extensions.Logging;
- namespace Jellyfin.Api.ModelBinders;
- /// <summary>
- /// DateTime model binder.
- /// </summary>
- public class LegacyDateTimeModelBinder : IModelBinder
- {
- // Borrowed from the DateTimeModelBinderProvider
- private const DateTimeStyles SupportedStyles = DateTimeStyles.AdjustToUniversal | DateTimeStyles.AllowWhiteSpaces;
- private readonly DateTimeModelBinder _defaultModelBinder;
- /// <summary>
- /// Initializes a new instance of the <see cref="LegacyDateTimeModelBinder"/> class.
- /// </summary>
- /// <param name="loggerFactory">Instance of the <see cref="ILoggerFactory"/> interface.</param>
- public LegacyDateTimeModelBinder(ILoggerFactory loggerFactory)
- {
- _defaultModelBinder = new DateTimeModelBinder(SupportedStyles, loggerFactory);
- }
- /// <inheritdoc />
- public Task BindModelAsync(ModelBindingContext bindingContext)
- {
- var valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
- if (valueProviderResult.Values.Count == 1)
- {
- var dateTimeString = valueProviderResult.FirstValue;
- // Mark Played Item.
- if (DateTime.TryParseExact(dateTimeString, "yyyyMMddHHmmss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out var dateTime))
- {
- bindingContext.Result = ModelBindingResult.Success(dateTime);
- }
- else
- {
- return _defaultModelBinder.BindModelAsync(bindingContext);
- }
- }
- return Task.CompletedTask;
- }
- }
|