SeriesXmlSaver.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. using System.Collections.Generic;
  2. using System.Globalization;
  3. using System.IO;
  4. using System.Security;
  5. using System.Text;
  6. using System.Threading;
  7. using MediaBrowser.Common.IO;
  8. using MediaBrowser.Controller.Configuration;
  9. using MediaBrowser.Controller.Entities;
  10. using MediaBrowser.Controller.Entities.TV;
  11. using MediaBrowser.Controller.Library;
  12. using MediaBrowser.Model.Entities;
  13. namespace MediaBrowser.XbmcMetadata.Savers
  14. {
  15. public class SeriesXmlSaver : IMetadataFileSaver
  16. {
  17. private readonly ILibraryManager _libraryManager;
  18. private readonly IUserManager _userManager;
  19. private readonly IUserDataManager _userDataRepo;
  20. private readonly IFileSystem _fileSystem;
  21. private readonly IServerConfigurationManager _config;
  22. public SeriesXmlSaver(IServerConfigurationManager config, ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataRepo, IFileSystem fileSystem)
  23. {
  24. _config = config;
  25. _libraryManager = libraryManager;
  26. _userManager = userManager;
  27. _userDataRepo = userDataRepo;
  28. _fileSystem = fileSystem;
  29. }
  30. public string Name
  31. {
  32. get
  33. {
  34. return "Xbmc Nfo";
  35. }
  36. }
  37. public string GetSavePath(IHasMetadata item)
  38. {
  39. return Path.Combine(item.Path, "tvshow.nfo");
  40. }
  41. public void Save(IHasMetadata item, CancellationToken cancellationToken)
  42. {
  43. var series = (Series)item;
  44. var builder = new StringBuilder();
  45. builder.Append("<tvshow>");
  46. XmlSaverHelpers.AddCommonNodes(series, builder, _libraryManager, _userManager, _userDataRepo, _fileSystem, _config);
  47. var tvdb = item.GetProviderId(MetadataProviders.Tvdb);
  48. if (!string.IsNullOrEmpty(tvdb))
  49. {
  50. builder.Append("<id>" + SecurityElement.Escape(tvdb) + "</id>");
  51. builder.AppendFormat("<episodeguide><url cache=\"{0}.xml\">http://www.thetvdb.com/api/1D62F2F90030C444/series/{0}/all/{1}.zip</url></episodeguide>",
  52. tvdb,
  53. string.IsNullOrEmpty(_config.Configuration.PreferredMetadataLanguage) ? "en" : _config.Configuration.PreferredMetadataLanguage);
  54. }
  55. builder.Append("<season>-1</season>");
  56. builder.Append("<episode>-1</episode>");
  57. if (series.Status.HasValue)
  58. {
  59. builder.Append("<status>" + SecurityElement.Escape(series.Status.Value.ToString()) + "</status>");
  60. }
  61. if (!string.IsNullOrEmpty(series.AirTime))
  62. {
  63. builder.Append("<airs_time>" + SecurityElement.Escape(series.AirTime) + "</airs_time>");
  64. }
  65. if (series.AirDays.Count == 7)
  66. {
  67. builder.Append("<airs_dayofweek>" + SecurityElement.Escape("Daily") + "</airs_dayofweek>");
  68. }
  69. else if (series.AirDays.Count > 0)
  70. {
  71. builder.Append("<airs_dayofweek>" + SecurityElement.Escape(series.AirDays[0].ToString()) + "</airs_dayofweek>");
  72. }
  73. if (series.AnimeSeriesIndex.HasValue)
  74. {
  75. builder.Append("<animeseriesindex>" + SecurityElement.Escape(series.AnimeSeriesIndex.Value.ToString(CultureInfo.InvariantCulture)) + "</animeseriesindex>");
  76. }
  77. builder.Append("</tvshow>");
  78. var xmlFilePath = GetSavePath(item);
  79. XmlSaverHelpers.Save(builder, xmlFilePath, new List<string>
  80. {
  81. "id",
  82. "episodeguide",
  83. "season",
  84. "episode",
  85. "status",
  86. "airs_time",
  87. "airs_dayofweek",
  88. "animeseriesindex"
  89. });
  90. }
  91. public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
  92. {
  93. if (!item.SupportsLocalMetadata)
  94. {
  95. return false;
  96. }
  97. return item is Series && updateType >= ItemUpdateType.MetadataDownload;
  98. }
  99. }
  100. }