LocalizationController.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using MediaBrowser.Common.Api;
  5. using MediaBrowser.Model.Entities;
  6. using MediaBrowser.Model.Globalization;
  7. using Microsoft.AspNetCore.Authorization;
  8. using Microsoft.AspNetCore.Http;
  9. using Microsoft.AspNetCore.Mvc;
  10. namespace Jellyfin.Api.Controllers;
  11. /// <summary>
  12. /// Localization controller.
  13. /// </summary>
  14. [Authorize(Policy = Policies.FirstTimeSetupOrDefault)]
  15. public class LocalizationController : BaseJellyfinApiController
  16. {
  17. private readonly ILocalizationManager _localization;
  18. /// <summary>
  19. /// Initializes a new instance of the <see cref="LocalizationController"/> class.
  20. /// </summary>
  21. /// <param name="localization">Instance of the <see cref="ILocalizationManager"/> interface.</param>
  22. public LocalizationController(ILocalizationManager localization)
  23. {
  24. _localization = localization;
  25. }
  26. /// <summary>
  27. /// Gets known cultures.
  28. /// </summary>
  29. /// <response code="200">Known cultures returned.</response>
  30. /// <returns>An <see cref="OkResult"/> containing the list of cultures.</returns>
  31. [HttpGet("Cultures")]
  32. [ProducesResponseType(StatusCodes.Status200OK)]
  33. public ActionResult<IEnumerable<CultureDto>> GetCultures()
  34. {
  35. var allCultures = _localization.GetCultures();
  36. var distinctCultures = allCultures
  37. .DistinctBy(c => c.DisplayName, StringComparer.OrdinalIgnoreCase)
  38. .OrderBy(c => c.DisplayName)
  39. .AsEnumerable();
  40. return Ok(distinctCultures);
  41. }
  42. /// <summary>
  43. /// Gets known countries.
  44. /// </summary>
  45. /// <response code="200">Known countries returned.</response>
  46. /// <returns>An <see cref="OkResult"/> containing the list of countries.</returns>
  47. [HttpGet("Countries")]
  48. [ProducesResponseType(StatusCodes.Status200OK)]
  49. public ActionResult<IReadOnlyList<CountryInfo>> GetCountries()
  50. {
  51. return Ok(_localization.GetCountries());
  52. }
  53. /// <summary>
  54. /// Gets known parental ratings.
  55. /// </summary>
  56. /// <response code="200">Known parental ratings returned.</response>
  57. /// <returns>An <see cref="OkResult"/> containing the list of parental ratings.</returns>
  58. [HttpGet("ParentalRatings")]
  59. [ProducesResponseType(StatusCodes.Status200OK)]
  60. public ActionResult<IReadOnlyList<ParentalRating>> GetParentalRatings()
  61. {
  62. return Ok(_localization.GetParentalRatings());
  63. }
  64. /// <summary>
  65. /// Gets localization options.
  66. /// </summary>
  67. /// <response code="200">Localization options returned.</response>
  68. /// <returns>An <see cref="OkResult"/> containing the list of localization options.</returns>
  69. [HttpGet("Options")]
  70. [ProducesResponseType(StatusCodes.Status200OK)]
  71. public ActionResult<IEnumerable<LocalizationOption>> GetLocalizationOptions()
  72. {
  73. return Ok(_localization.GetLocalizationOptions());
  74. }
  75. }