using System; using Jellyfin.Api.Extensions; using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Querying; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; namespace Jellyfin.Api.Controllers { public class YearsController : BaseJellyfinApiController { private readonly ILibraryManager _libraryManager; private readonly IUserManager _userManager; private readonly IDtoService _dtoService; /// /// Get years. /// /// Optional. Filter by maximum official rating (PG, PG-13, TV-MA, etc). /// Optional. Filter by items with theme songs. /// Optional. Filter by items with theme videos. /// Optional. Filter by items with subtitles. /// Optional. Filter by items with special features. /// Optional. Filter by items with trailers. /// Optional. Return items that are siblings of a supplied item. /// Optional. Filter by minimum index number. /// Optional. Filter by parent index number. /// Optional. filter by items that have or do not have a parental rating. /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// [HttpGet] public ActionResult> GetYears( [FromQuery] string maxOfficialRating, [FromQuery] bool? hasThemeSong, [FromQuery] bool? hasThemeVideo, [FromQuery] bool? hasSubtitles, [FromQuery] bool? hasSpecialFeatures, [FromQuery] bool? hasTrailer, [FromQuery] string adjacentTo, [FromQuery] int? minIndexNumber, [FromQuery] int? parentIndexNumber, [FromQuery] bool? hasParentalRating, [FromQuery] bool? isHd, [FromQuery] bool? is4k, [FromQuery] string locationTypes, [FromQuery] string excludeLocationTypes, [FromQuery] bool? isMissing, [FromQuery] bool? isUnaired, [FromQuery] double? minCommunityRating, [FromQuery] double? minCriticRating, [FromQuery] int? airedDuringSeason, [FromQuery] DateTime? minPremiereDate, [FromQuery] DateTime? minDateLastSaved, [FromQuery] DateTime? minDateLastSavedForUser, [FromQuery] DateTime? maxPremiereDate, [FromQuery] bool? hasOverview, [FromQuery] bool? hasImdbId, [FromQuery] bool? hasTmdbId, [FromQuery] bool? hasTvdbId, [FromQuery] string excludeItemIds, [FromQuery] int? startIndex, [FromQuery] int? limit, [FromQuery] string searchTerm, [FromQuery] string sortOrder, [FromQuery] string parentId, [FromQuery] string fields, [FromQuery] string excludeItemTypes, [FromQuery] string includeItemTypes, [FromQuery] string filters, [FromQuery] bool? isFavorite, [FromQuery] string mediaTypes, [FromQuery] string imageTypes, [FromQuery] string sortBy, [FromQuery] bool? isPlayed, [FromQuery] string genres, [FromQuery] string genreIds, [FromQuery] string officialRatings, [FromQuery] string tags, [FromQuery] string years, [FromQuery] bool? enableUserData, [FromQuery] int? imageTypeLimit, [FromQuery] string enableImageTypes, [FromQuery] string person, [FromQuery] string personIds, [FromQuery] string personTypes, [FromQuery] string studios, [FromQuery] string studioIds, [FromQuery] string artists, [FromQuery] string excludeArtistIds, [FromQuery] string artistIds, [FromQuery] string albumArtistIds, [FromQuery] string contributingArtistIds, [FromQuery] string albums, [FromQuery] string albumIds, [FromQuery] string ids, [FromQuery] string videoTypes, [FromQuery] Guid userId, [FromQuery] string minOfficialRating, [FromQuery] bool? isLocked, [FromQuery] bool? isPlaceholder, [FromQuery] bool? hasOfficialRating, [FromQuery] bool? collapseBoxSetItems, [FromQuery] int? minWidth, [FromQuery] int? minHeight, [FromQuery] int? maxWidth, [FromQuery] int? maxHeight, [FromQuery] bool? is3d, [FromQuery] string seriesStatus, [FromQuery] string nameStartsWithOrGreater, [FromQuery] string nameStartsWith, [FromQuery] string nameLessThan, [FromQuery] bool recursive = true, [FromQuery] bool? enableImages = true, [FromQuery] bool enableTotalRecordCount = true) { } /// /// Gets a year. /// /// The year. /// Optional. Filter by user id, and attach user data. /// Year returned. /// Year not found. /// /// An containing the year, /// or a if year not found. /// [HttpGet("{year}")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status404NotFound)] public ActionResult GetYear([FromRoute] int year, [FromQuery] Guid userId) { var item = _libraryManager.GetYear(year); if (item == null) { return NotFound(); } var dtoOptions = new DtoOptions() .AddClientFields(Request); if (!userId.Equals(Guid.Empty)) { var user = _userManager.GetUserById(userId); return _dtoService.GetBaseItemDto(item, dtoOptions, user); } return _dtoService.GetBaseItemDto(item, dtoOptions); } } }