SeriesNfoSaver.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. using MediaBrowser.Common.IO;
  2. using MediaBrowser.Controller.Configuration;
  3. using MediaBrowser.Controller.Entities;
  4. using MediaBrowser.Controller.Entities.TV;
  5. using MediaBrowser.Controller.Library;
  6. using MediaBrowser.Model.Entities;
  7. using MediaBrowser.Model.Logging;
  8. using System.Collections.Generic;
  9. using System.Globalization;
  10. using System.IO;
  11. using System.Xml;
  12. namespace MediaBrowser.XbmcMetadata.Savers
  13. {
  14. public class SeriesNfoSaver : BaseNfoSaver
  15. {
  16. public SeriesNfoSaver(IFileSystem fileSystem, IServerConfigurationManager configurationManager, ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataManager, ILogger logger) : base(fileSystem, configurationManager, libraryManager, userManager, userDataManager, logger)
  17. {
  18. }
  19. protected override string GetLocalSavePath(IHasMetadata item)
  20. {
  21. return Path.Combine(item.Path, "tvshow.nfo");
  22. }
  23. protected override string GetRootElementName(IHasMetadata item)
  24. {
  25. return "tvshow";
  26. }
  27. public override bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
  28. {
  29. if (!item.SupportsLocalMetadata)
  30. {
  31. return false;
  32. }
  33. return item is Series && updateType >= MinimumUpdateType;
  34. }
  35. protected override void WriteCustomElements(IHasMetadata item, XmlWriter writer)
  36. {
  37. var series = (Series)item;
  38. var tvdb = item.GetProviderId(MetadataProviders.Tvdb);
  39. if (!string.IsNullOrEmpty(tvdb))
  40. {
  41. writer.WriteElementString("id", tvdb);
  42. writer.WriteStartElement("episodeguide");
  43. var language = item.GetPreferredMetadataLanguage();
  44. language = string.IsNullOrEmpty(language)
  45. ? "en"
  46. : language;
  47. writer.WriteStartElement("url");
  48. writer.WriteAttributeString("cache", string.Format("{0}.xml", tvdb));
  49. writer.WriteString(string.Format("http://www.thetvdb.com/api/1D62F2F90030C444/series/{0}/all/{1}.zip", tvdb, language));
  50. writer.WriteEndElement();
  51. writer.WriteEndElement();
  52. }
  53. writer.WriteElementString("season", "-1");
  54. writer.WriteElementString("episode", "-1");
  55. if (series.Status.HasValue)
  56. {
  57. writer.WriteElementString("status", series.Status.Value.ToString());
  58. }
  59. if (!string.IsNullOrEmpty(series.AirTime))
  60. {
  61. writer.WriteElementString("airs_time", series.AirTime);
  62. }
  63. if (series.AirDays.Count == 7)
  64. {
  65. writer.WriteElementString("airs_dayofweek", "Daily");
  66. }
  67. else if (series.AirDays.Count > 0)
  68. {
  69. writer.WriteElementString("airs_dayofweek", series.AirDays[0].ToString());
  70. }
  71. if (series.AnimeSeriesIndex.HasValue)
  72. {
  73. writer.WriteElementString("animeseriesindex", series.AnimeSeriesIndex.Value.ToString(CultureInfo.InvariantCulture));
  74. }
  75. }
  76. private static readonly CultureInfo UsCulture = new CultureInfo("en-US");
  77. protected override List<string> GetTagsUsed()
  78. {
  79. var list = new List<string>
  80. {
  81. "id",
  82. "episodeguide",
  83. "season",
  84. "episode",
  85. "status",
  86. "airs_time",
  87. "airs_dayofweek",
  88. "animeseriesindex"
  89. };
  90. return list;
  91. }
  92. }
  93. }