SeriesXmlSaver.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. using MediaBrowser.Controller.Configuration;
  2. using MediaBrowser.Controller.Entities;
  3. using MediaBrowser.Controller.Entities.TV;
  4. using MediaBrowser.Controller.Library;
  5. using MediaBrowser.Model.Entities;
  6. using MediaBrowser.Providers.TV;
  7. using System;
  8. using System.IO;
  9. using System.Security;
  10. using System.Text;
  11. using System.Threading;
  12. namespace MediaBrowser.Providers.Savers
  13. {
  14. public class SeriesXmlSaver : IMetadataSaver
  15. {
  16. private readonly IServerConfigurationManager _config;
  17. public SeriesXmlSaver(IServerConfigurationManager config)
  18. {
  19. _config = config;
  20. }
  21. /// <summary>
  22. /// Determines whether [is enabled for] [the specified item].
  23. /// </summary>
  24. /// <param name="item">The item.</param>
  25. /// <param name="updateType">Type of the update.</param>
  26. /// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
  27. public bool IsEnabledFor(BaseItem item, ItemUpdateType updateType)
  28. {
  29. var wasMetadataEdited = (updateType & ItemUpdateType.MetadataEdit) == ItemUpdateType.MetadataEdit;
  30. var wasMetadataDownloaded = (updateType & ItemUpdateType.MetadataDownload) == ItemUpdateType.MetadataDownload;
  31. // If new metadata has been downloaded and save local is on, OR metadata was manually edited, proceed
  32. if ((_config.Configuration.SaveLocalMeta && (wasMetadataEdited || wasMetadataDownloaded)) || wasMetadataEdited)
  33. {
  34. return item is Series;
  35. }
  36. return false;
  37. }
  38. /// <summary>
  39. /// Saves the specified item.
  40. /// </summary>
  41. /// <param name="item">The item.</param>
  42. /// <param name="cancellationToken">The cancellation token.</param>
  43. /// <returns>Task.</returns>
  44. public void Save(BaseItem item, CancellationToken cancellationToken)
  45. {
  46. var series = (Series)item;
  47. var builder = new StringBuilder();
  48. builder.Append("<Series>");
  49. var tvdb = item.GetProviderId(MetadataProviders.Tvdb);
  50. if (!string.IsNullOrEmpty(tvdb))
  51. {
  52. builder.Append("<id>" + SecurityElement.Escape(tvdb) + "</id>");
  53. }
  54. if (!string.IsNullOrEmpty(item.Name))
  55. {
  56. builder.Append("<SeriesName>" + SecurityElement.Escape(item.Name) + "</SeriesName>");
  57. }
  58. if (series.Status.HasValue)
  59. {
  60. builder.Append("<Status>" + SecurityElement.Escape(series.Status.Value.ToString()) + "</Status>");
  61. }
  62. if (series.Studios.Count > 0)
  63. {
  64. builder.Append("<Network>" + SecurityElement.Escape(item.Studios[0]) + "</Network>");
  65. }
  66. if (!string.IsNullOrEmpty(series.AirTime))
  67. {
  68. builder.Append("<Airs_Time>" + SecurityElement.Escape(series.AirTime) + "</Airs_Time>");
  69. }
  70. if (series.AirDays != null)
  71. {
  72. if (series.AirDays.Count == 7)
  73. {
  74. builder.Append("<Airs_DayOfWeek>" + SecurityElement.Escape("Daily") + "</Airs_DayOfWeek>");
  75. }
  76. else if (series.AirDays.Count > 0)
  77. {
  78. builder.Append("<Airs_DayOfWeek>" + SecurityElement.Escape(series.AirDays[0].ToString()) + "</Airs_DayOfWeek>");
  79. }
  80. }
  81. if (series.PremiereDate.HasValue)
  82. {
  83. builder.Append("<FirstAired>" + SecurityElement.Escape(series.PremiereDate.Value.ToString("yyyy-MM-dd")) + "</FirstAired>");
  84. }
  85. XmlSaverHelpers.AddCommonNodes(item, builder);
  86. builder.Append("</Series>");
  87. var xmlFilePath = GetSavePath(item);
  88. XmlSaverHelpers.Save(builder, xmlFilePath, new[]
  89. {
  90. "id",
  91. "SeriesName",
  92. "Status",
  93. "Network",
  94. "Airs_Time",
  95. "Airs_DayOfWeek",
  96. "FirstAired",
  97. // Don't preserve old series node
  98. "Series"
  99. });
  100. // Set last refreshed so that the provider doesn't trigger after the file save
  101. SeriesProviderFromXml.Current.SetLastRefreshed(item, DateTime.UtcNow);
  102. }
  103. /// <summary>
  104. /// Gets the save path.
  105. /// </summary>
  106. /// <param name="item">The item.</param>
  107. /// <returns>System.String.</returns>
  108. public string GetSavePath(BaseItem item)
  109. {
  110. return Path.Combine(item.Path, "series.xml");
  111. }
  112. }
  113. }