EpisodeNfoSaver.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. using System.Collections.Generic;
  2. using System.Globalization;
  3. using System.IO;
  4. using System.Xml;
  5. using MediaBrowser.Controller.Configuration;
  6. using MediaBrowser.Controller.Entities;
  7. using MediaBrowser.Controller.Entities.TV;
  8. using MediaBrowser.Controller.Library;
  9. using MediaBrowser.Model.IO;
  10. using MediaBrowser.XbmcMetadata.Configuration;
  11. using Microsoft.Extensions.Logging;
  12. namespace MediaBrowser.XbmcMetadata.Savers
  13. {
  14. /// <summary>
  15. /// Nfo saver for episodes.
  16. /// </summary>
  17. public class EpisodeNfoSaver : BaseNfoSaver
  18. {
  19. private readonly CultureInfo _usCulture = new CultureInfo("en-US");
  20. /// <summary>
  21. /// Initializes a new instance of the <see cref="EpisodeNfoSaver"/> class.
  22. /// </summary>
  23. /// <param name="fileSystem">The file system.</param>
  24. /// <param name="configurationManager">the server configuration manager.</param>
  25. /// <param name="libraryManager">The library manager.</param>
  26. /// <param name="userManager">The user manager.</param>
  27. /// <param name="userDataManager">The user data manager.</param>
  28. /// <param name="logger">The logger.</param>
  29. public EpisodeNfoSaver(
  30. IFileSystem fileSystem,
  31. IServerConfigurationManager configurationManager,
  32. ILibraryManager libraryManager,
  33. IUserManager userManager,
  34. IUserDataManager userDataManager,
  35. ILogger<EpisodeNfoSaver> logger)
  36. : base(fileSystem, configurationManager, libraryManager, userManager, userDataManager, logger)
  37. {
  38. }
  39. /// <inheritdoc />
  40. protected override string GetLocalSavePath(BaseItem item)
  41. => Path.ChangeExtension(item.Path, ".nfo");
  42. /// <inheritdoc />
  43. protected override string GetRootElementName(BaseItem item)
  44. => "episodedetails";
  45. /// <inheritdoc />
  46. public override bool IsEnabledFor(BaseItem item, ItemUpdateType updateType)
  47. => item.SupportsLocalMetadata && item is Episode && updateType >= MinimumUpdateType;
  48. /// <inheritdoc />
  49. protected override void WriteCustomElements(BaseItem item, XmlWriter writer)
  50. {
  51. var episode = (Episode)item;
  52. writer.WriteElementString("showtitle", episode.SeriesName);
  53. if (episode.IndexNumber.HasValue)
  54. {
  55. writer.WriteElementString("episode", episode.IndexNumber.Value.ToString(_usCulture));
  56. }
  57. if (episode.IndexNumberEnd.HasValue)
  58. {
  59. writer.WriteElementString("episodenumberend", episode.IndexNumberEnd.Value.ToString(_usCulture));
  60. }
  61. if (episode.ParentIndexNumber.HasValue)
  62. {
  63. writer.WriteElementString("season", episode.ParentIndexNumber.Value.ToString(_usCulture));
  64. }
  65. if (episode.PremiereDate.HasValue)
  66. {
  67. var formatString = ConfigurationManager.GetNfoConfiguration().ReleaseDateFormat;
  68. writer.WriteElementString("aired", episode.PremiereDate.Value.ToLocalTime().ToString(formatString, CultureInfo.InvariantCulture));
  69. }
  70. if (!episode.ParentIndexNumber.HasValue || episode.ParentIndexNumber.Value == 0)
  71. {
  72. if (episode.AirsAfterSeasonNumber.HasValue && episode.AirsAfterSeasonNumber.Value != -1)
  73. {
  74. writer.WriteElementString("airsafter_season", episode.AirsAfterSeasonNumber.Value.ToString(_usCulture));
  75. }
  76. if (episode.AirsBeforeEpisodeNumber.HasValue && episode.AirsBeforeEpisodeNumber.Value != -1)
  77. {
  78. writer.WriteElementString("airsbefore_episode", episode.AirsBeforeEpisodeNumber.Value.ToString(_usCulture));
  79. }
  80. if (episode.AirsBeforeSeasonNumber.HasValue && episode.AirsBeforeSeasonNumber.Value != -1)
  81. {
  82. writer.WriteElementString("airsbefore_season", episode.AirsBeforeSeasonNumber.Value.ToString(_usCulture));
  83. }
  84. if (episode.AirsBeforeEpisodeNumber.HasValue && episode.AirsBeforeEpisodeNumber.Value != -1)
  85. {
  86. writer.WriteElementString("displayepisode", episode.AirsBeforeEpisodeNumber.Value.ToString(_usCulture));
  87. }
  88. var specialSeason = episode.AiredSeasonNumber;
  89. if (specialSeason.HasValue && specialSeason.Value != -1)
  90. {
  91. writer.WriteElementString("displayseason", specialSeason.Value.ToString(_usCulture));
  92. }
  93. }
  94. }
  95. /// <inheritdoc />
  96. protected override IEnumerable<string> GetTagsUsed(BaseItem item)
  97. {
  98. foreach (var tag in base.GetTagsUsed(item))
  99. {
  100. yield return tag;
  101. }
  102. yield return "aired";
  103. yield return "season";
  104. yield return "episode";
  105. yield return "episodenumberend";
  106. yield return "airsafter_season";
  107. yield return "airsbefore_episode";
  108. yield return "airsbefore_season";
  109. yield return "displayseason";
  110. yield return "displayepisode";
  111. yield return "showtitle";
  112. }
  113. }
  114. }