Pārlūkot izejas kodu

Merge pull request #12327 from crobibero/live-tv-nullable

Fix up getting livetv programs api docs
Bond-009 10 mēneši atpakaļ
vecāks
revīzija
dea7be5e8a

+ 7 - 7
Jellyfin.Api/Controllers/LiveTvController.cs

@@ -656,7 +656,7 @@ public class LiveTvController : BaseJellyfinApiController
 
         var query = new InternalItemsQuery(user)
         {
-            ChannelIds = body.ChannelIds,
+            ChannelIds = body.ChannelIds ?? [],
             HasAired = body.HasAired,
             IsAiring = body.IsAiring,
             EnableTotalRecordCount = body.EnableTotalRecordCount,
@@ -666,22 +666,22 @@ public class LiveTvController : BaseJellyfinApiController
             MaxEndDate = body.MaxEndDate,
             StartIndex = body.StartIndex,
             Limit = body.Limit,
-            OrderBy = RequestHelpers.GetOrderBy(body.SortBy, body.SortOrder),
+            OrderBy = RequestHelpers.GetOrderBy(body.SortBy ?? [], body.SortOrder ?? []),
             IsNews = body.IsNews,
             IsMovie = body.IsMovie,
             IsSeries = body.IsSeries,
             IsKids = body.IsKids,
             IsSports = body.IsSports,
             SeriesTimerId = body.SeriesTimerId,
-            Genres = body.Genres,
-            GenreIds = body.GenreIds
+            Genres = body.Genres ?? [],
+            GenreIds = body.GenreIds ?? []
         };
 
-        if (!body.LibrarySeriesId.IsEmpty())
+        if (!body.LibrarySeriesId.IsNullOrEmpty())
         {
             query.IsSeries = true;
 
-            var series = _libraryManager.GetItemById<Series>(body.LibrarySeriesId);
+            var series = _libraryManager.GetItemById<Series>(body.LibrarySeriesId.Value);
             if (series is not null)
             {
                 query.Name = series.Name;
@@ -690,7 +690,7 @@ public class LiveTvController : BaseJellyfinApiController
 
         var dtoOptions = new DtoOptions { Fields = body.Fields }
             .AddClientFields(User)
-            .AddAdditionalDtoOptions(body.EnableImages, body.EnableUserData, body.ImageTypeLimit, body.EnableImageTypes);
+            .AddAdditionalDtoOptions(body.EnableImages, body.EnableUserData, body.ImageTypeLimit, body.EnableImageTypes ?? []);
         return await _liveTvManager.GetPrograms(query, dtoOptions, CancellationToken.None).ConfigureAwait(false);
     }
 

+ 12 - 31
Jellyfin.Api/Models/LiveTvDtos/GetProgramsDto.cs

@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.Text.Json.Serialization;
 using Jellyfin.Data.Enums;
 using Jellyfin.Extensions.Json.Converters;
@@ -17,7 +18,7 @@ public class GetProgramsDto
     /// Gets or sets the channels to return guide information for.
     /// </summary>
     [JsonConverter(typeof(JsonCommaDelimitedArrayConverterFactory))]
-    public IReadOnlyList<Guid> ChannelIds { get; set; } = Array.Empty<Guid>();
+    public IReadOnlyList<Guid>? ChannelIds { get; set; }
 
     /// <summary>
     /// Gets or sets optional. Filter by user id.
@@ -26,153 +27,133 @@ public class GetProgramsDto
 
     /// <summary>
     /// Gets or sets the minimum premiere start date.
-    /// Optional.
     /// </summary>
     public DateTime? MinStartDate { get; set; }
 
     /// <summary>
     /// Gets or sets filter by programs that have completed airing, or not.
-    /// Optional.
     /// </summary>
     public bool? HasAired { get; set; }
 
     /// <summary>
     /// Gets or sets filter by programs that are currently airing, or not.
-    /// Optional.
     /// </summary>
     public bool? IsAiring { get; set; }
 
     /// <summary>
     /// Gets or sets the maximum premiere start date.
-    /// Optional.
     /// </summary>
     public DateTime? MaxStartDate { get; set; }
 
     /// <summary>
     /// Gets or sets the minimum premiere end date.
-    /// Optional.
     /// </summary>
     public DateTime? MinEndDate { get; set; }
 
     /// <summary>
     /// Gets or sets the maximum premiere end date.
-    /// Optional.
     /// </summary>
     public DateTime? MaxEndDate { get; set; }
 
     /// <summary>
     /// Gets or sets filter for movies.
-    /// Optional.
     /// </summary>
     public bool? IsMovie { get; set; }
 
     /// <summary>
     /// Gets or sets filter for series.
-    /// Optional.
     /// </summary>
     public bool? IsSeries { get; set; }
 
     /// <summary>
     /// Gets or sets filter for news.
-    /// Optional.
     /// </summary>
     public bool? IsNews { get; set; }
 
     /// <summary>
     /// Gets or sets filter for kids.
-    /// Optional.
     /// </summary>
     public bool? IsKids { get; set; }
 
     /// <summary>
     /// Gets or sets filter for sports.
-    /// Optional.
     /// </summary>
     public bool? IsSports { get; set; }
 
     /// <summary>
     /// Gets or sets the record index to start at. All items with a lower index will be dropped from the results.
-    /// Optional.
     /// </summary>
     public int? StartIndex { get; set; }
 
     /// <summary>
     /// Gets or sets the maximum number of records to return.
-    /// Optional.
     /// </summary>
     public int? Limit { get; set; }
 
     /// <summary>
     /// Gets or sets specify one or more sort orders, comma delimited. Options: Name, StartDate.
-    /// Optional.
     /// </summary>
     [JsonConverter(typeof(JsonCommaDelimitedArrayConverterFactory))]
-    public IReadOnlyList<ItemSortBy> SortBy { get; set; } = Array.Empty<ItemSortBy>();
+    public IReadOnlyList<ItemSortBy>? SortBy { get; set; }
 
     /// <summary>
-    /// Gets or sets sort Order - Ascending,Descending.
+    /// Gets or sets sort order.
     /// </summary>
     [JsonConverter(typeof(JsonCommaDelimitedArrayConverterFactory))]
-    public IReadOnlyList<SortOrder> SortOrder { get; set; } = Array.Empty<SortOrder>();
+    public IReadOnlyList<SortOrder>? SortOrder { get; set; }
 
     /// <summary>
     /// Gets or sets the genres to return guide information for.
     /// </summary>
     [JsonConverter(typeof(JsonPipeDelimitedArrayConverterFactory))]
-    public IReadOnlyList<string> Genres { get; set; } = Array.Empty<string>();
+    public IReadOnlyList<string>? Genres { get; set; }
 
     /// <summary>
     /// Gets or sets the genre ids to return guide information for.
     /// </summary>
     [JsonConverter(typeof(JsonCommaDelimitedArrayConverterFactory))]
-    public IReadOnlyList<Guid> GenreIds { get; set; } = Array.Empty<Guid>();
+    public IReadOnlyList<Guid>? GenreIds { get; set; }
 
     /// <summary>
     /// Gets or sets include image information in output.
-    /// Optional.
     /// </summary>
     public bool? EnableImages { get; set; }
 
     /// <summary>
     /// Gets or sets a value indicating whether retrieve total record count.
     /// </summary>
+    [DefaultValue(true)]
     public bool EnableTotalRecordCount { get; set; } = true;
 
     /// <summary>
     /// Gets or sets the max number of images to return, per image type.
-    /// Optional.
     /// </summary>
     public int? ImageTypeLimit { get; set; }
 
     /// <summary>
     /// Gets or sets the image types to include in the output.
-    /// Optional.
     /// </summary>
     [JsonConverter(typeof(JsonCommaDelimitedArrayConverterFactory))]
-    public IReadOnlyList<ImageType> EnableImageTypes { get; set; } = Array.Empty<ImageType>();
+    public IReadOnlyList<ImageType>? EnableImageTypes { get; set; }
 
     /// <summary>
     /// Gets or sets include user data.
-    /// Optional.
     /// </summary>
     public bool? EnableUserData { get; set; }
 
     /// <summary>
     /// Gets or sets filter by series timer id.
-    /// Optional.
     /// </summary>
     public string? SeriesTimerId { get; set; }
 
     /// <summary>
     /// Gets or sets filter by library series id.
-    /// Optional.
     /// </summary>
-    public Guid LibrarySeriesId { get; set; }
+    public Guid? LibrarySeriesId { get; set; }
 
     /// <summary>
-    /// Gets or sets specify additional fields of information to return in the output. This allows multiple, comma delimited. Options: Budget, Chapters, DateCreated, Genres, HomePageUrl, IndexOptions, MediaStreams, Overview, ParentId, Path, People, ProviderIds, PrimaryImageAspectRatio, Revenue, SortName, Studios, Taglines.
-    /// Optional.
+    /// Gets or sets specify additional fields of information to return in the output.
     /// </summary>
     [JsonConverter(typeof(JsonCommaDelimitedArrayConverterFactory))]
-    public IReadOnlyList<ItemFields> Fields { get; set; } = Array.Empty<ItemFields>();
+    public IReadOnlyList<ItemFields>? Fields { get; set; }
 }