SeasonResolver.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. using System.Globalization;
  2. using Emby.Naming.TV;
  3. using MediaBrowser.Controller.Entities.TV;
  4. using MediaBrowser.Controller.Library;
  5. using MediaBrowser.Model.Globalization;
  6. using Microsoft.Extensions.Logging;
  7. namespace Emby.Server.Implementations.Library.Resolvers.TV
  8. {
  9. /// <summary>
  10. /// Class SeasonResolver.
  11. /// </summary>
  12. public class SeasonResolver : FolderResolver<Season>
  13. {
  14. private readonly ILibraryManager _libraryManager;
  15. private readonly ILocalizationManager _localization;
  16. private readonly ILogger<SeasonResolver> _logger;
  17. /// <summary>
  18. /// Initializes a new instance of the <see cref="SeasonResolver"/> class.
  19. /// </summary>
  20. /// <param name="libraryManager">The library manager.</param>
  21. /// <param name="localization">The localization.</param>
  22. /// <param name="logger">The logger.</param>
  23. public SeasonResolver(
  24. ILibraryManager libraryManager,
  25. ILocalizationManager localization,
  26. ILogger<SeasonResolver> logger)
  27. {
  28. _libraryManager = libraryManager;
  29. _localization = localization;
  30. _logger = logger;
  31. }
  32. /// <summary>
  33. /// Resolves the specified args.
  34. /// </summary>
  35. /// <param name="args">The args.</param>
  36. /// <returns>Season.</returns>
  37. protected override Season Resolve(ItemResolveArgs args)
  38. {
  39. if (args.Parent is Series series && args.IsDirectory)
  40. {
  41. var namingOptions = ((LibraryManager)_libraryManager).GetNamingOptions();
  42. var path = args.Path;
  43. var seasonParserResult = SeasonPathParser.Parse(path, true, true);
  44. var season = new Season
  45. {
  46. IndexNumber = seasonParserResult.SeasonNumber,
  47. SeriesId = series.Id,
  48. SeriesName = series.Name
  49. };
  50. if (!season.IndexNumber.HasValue || !seasonParserResult.IsSeasonFolder)
  51. {
  52. var resolver = new Naming.TV.EpisodeResolver(namingOptions);
  53. var folderName = System.IO.Path.GetFileName(path);
  54. var testPath = "\\\\test\\" + folderName;
  55. var episodeInfo = resolver.Resolve(testPath, true);
  56. if (episodeInfo != null)
  57. {
  58. if (episodeInfo.EpisodeNumber.HasValue && episodeInfo.SeasonNumber.HasValue)
  59. {
  60. _logger.LogDebug(
  61. "Found folder underneath series with episode number: {0}. Season {1}. Episode {2}",
  62. path,
  63. episodeInfo.SeasonNumber.Value,
  64. episodeInfo.EpisodeNumber.Value);
  65. return null;
  66. }
  67. }
  68. }
  69. if (season.IndexNumber.HasValue)
  70. {
  71. var seasonNumber = season.IndexNumber.Value;
  72. season.Name = seasonNumber == 0 ?
  73. args.LibraryOptions.SeasonZeroDisplayName :
  74. string.Format(
  75. CultureInfo.InvariantCulture,
  76. _localization.GetLocalizedString("NameSeasonNumber"),
  77. seasonNumber,
  78. args.GetLibraryOptions().PreferredMetadataLanguage);
  79. }
  80. return season;
  81. }
  82. return null;
  83. }
  84. }
  85. }