EpisodeNfoSaver.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  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. public class EpisodeNfoSaver : BaseNfoSaver
  15. {
  16. public EpisodeNfoSaver(
  17. IFileSystem fileSystem,
  18. IServerConfigurationManager configurationManager,
  19. ILibraryManager libraryManager,
  20. IUserManager userManager,
  21. IUserDataManager userDataManager,
  22. ILogger<EpisodeNfoSaver> logger)
  23. : base(fileSystem, configurationManager, libraryManager, userManager, userDataManager, logger)
  24. {
  25. }
  26. private readonly CultureInfo _usCulture = new CultureInfo("en-US");
  27. /// <inheritdoc />
  28. protected override string GetLocalSavePath(BaseItem item)
  29. => Path.ChangeExtension(item.Path, ".nfo");
  30. /// <inheritdoc />
  31. protected override string GetRootElementName(BaseItem item)
  32. => "episodedetails";
  33. /// <inheritdoc />
  34. public override bool IsEnabledFor(BaseItem item, ItemUpdateType updateType)
  35. => item.SupportsLocalMetadata && item is Episode && updateType >= MinimumUpdateType;
  36. /// <inheritdoc />
  37. protected override void WriteCustomElements(BaseItem item, XmlWriter writer)
  38. {
  39. var episode = (Episode)item;
  40. if (episode.IndexNumber.HasValue)
  41. {
  42. writer.WriteElementString("episode", episode.IndexNumber.Value.ToString(_usCulture));
  43. }
  44. if (episode.IndexNumberEnd.HasValue)
  45. {
  46. writer.WriteElementString("episodenumberend", episode.IndexNumberEnd.Value.ToString(_usCulture));
  47. }
  48. if (episode.ParentIndexNumber.HasValue)
  49. {
  50. writer.WriteElementString("season", episode.ParentIndexNumber.Value.ToString(_usCulture));
  51. }
  52. if (episode.PremiereDate.HasValue)
  53. {
  54. var formatString = ConfigurationManager.GetNfoConfiguration().ReleaseDateFormat;
  55. writer.WriteElementString("aired", episode.PremiereDate.Value.ToLocalTime().ToString(formatString));
  56. }
  57. if (!episode.ParentIndexNumber.HasValue || episode.ParentIndexNumber.Value == 0)
  58. {
  59. if (episode.AirsAfterSeasonNumber.HasValue && episode.AirsAfterSeasonNumber.Value != -1)
  60. {
  61. writer.WriteElementString("airsafter_season", episode.AirsAfterSeasonNumber.Value.ToString(_usCulture));
  62. }
  63. if (episode.AirsBeforeEpisodeNumber.HasValue && episode.AirsBeforeEpisodeNumber.Value != -1)
  64. {
  65. writer.WriteElementString("airsbefore_episode", episode.AirsBeforeEpisodeNumber.Value.ToString(_usCulture));
  66. }
  67. if (episode.AirsBeforeSeasonNumber.HasValue && episode.AirsBeforeSeasonNumber.Value != -1)
  68. {
  69. writer.WriteElementString("airsbefore_season", episode.AirsBeforeSeasonNumber.Value.ToString(_usCulture));
  70. }
  71. if (episode.AirsBeforeEpisodeNumber.HasValue && episode.AirsBeforeEpisodeNumber.Value != -1)
  72. {
  73. writer.WriteElementString("displayepisode", episode.AirsBeforeEpisodeNumber.Value.ToString(_usCulture));
  74. }
  75. var specialSeason = episode.AiredSeasonNumber;
  76. if (specialSeason.HasValue && specialSeason.Value != -1)
  77. {
  78. writer.WriteElementString("displayseason", specialSeason.Value.ToString(_usCulture));
  79. }
  80. }
  81. }
  82. /// <inheritdoc />
  83. protected override List<string> GetTagsUsed(BaseItem item)
  84. {
  85. var list = base.GetTagsUsed(item);
  86. list.AddRange(new string[]
  87. {
  88. "aired",
  89. "season",
  90. "episode",
  91. "episodenumberend",
  92. "airsafter_season",
  93. "airsbefore_episode",
  94. "airsbefore_season",
  95. "displayseason",
  96. "displayepisode"
  97. });
  98. return list;
  99. }
  100. }
  101. }