EpisodeXmlSaver.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. using System;
  2. using MediaBrowser.Controller.Entities;
  3. using MediaBrowser.Controller.Entities.TV;
  4. using MediaBrowser.Controller.Library;
  5. using MediaBrowser.Model.Entities;
  6. using System.Globalization;
  7. using System.IO;
  8. using System.Security;
  9. using System.Text;
  10. using System.Threading;
  11. using MediaBrowser.Providers.TV;
  12. namespace MediaBrowser.Providers.Savers
  13. {
  14. public class EpisodeXmlSaver : IMetadataSaver
  15. {
  16. /// <summary>
  17. /// Supportses the specified item.
  18. /// </summary>
  19. /// <param name="item">The item.</param>
  20. /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns>
  21. public bool Supports(BaseItem item)
  22. {
  23. if (item.LocationType != LocationType.FileSystem)
  24. {
  25. return false;
  26. }
  27. return item is Episode;
  28. }
  29. private readonly CultureInfo _usCulture = new CultureInfo("en-US");
  30. /// <summary>
  31. /// Saves the specified item.
  32. /// </summary>
  33. /// <param name="item">The item.</param>
  34. /// <param name="cancellationToken">The cancellation token.</param>
  35. /// <returns>Task.</returns>
  36. public void Save(BaseItem item, CancellationToken cancellationToken)
  37. {
  38. var episode = (Episode)item;
  39. var builder = new StringBuilder();
  40. builder.Append("<Item>");
  41. if (!string.IsNullOrEmpty(item.Name))
  42. {
  43. builder.Append("<EpisodeName>" + SecurityElement.Escape(episode.Name) + "</EpisodeName>");
  44. }
  45. if (episode.IndexNumber.HasValue)
  46. {
  47. builder.Append("<EpisodeNumber>" + SecurityElement.Escape(episode.IndexNumber.Value.ToString(_usCulture)) + "</EpisodeNumber>");
  48. }
  49. if (episode.ParentIndexNumber.HasValue)
  50. {
  51. builder.Append("<SeasonNumber>" + SecurityElement.Escape(episode.ParentIndexNumber.Value.ToString(_usCulture)) + "</SeasonNumber>");
  52. }
  53. if (episode.PremiereDate.HasValue)
  54. {
  55. builder.Append("<FirstAired>" + SecurityElement.Escape(episode.PremiereDate.Value.ToString("yyyy-MM-dd")) + "</FirstAired>");
  56. }
  57. XmlHelpers.AddCommonNodes(item, builder);
  58. XmlHelpers.AppendMediaInfo(episode, builder);
  59. builder.Append("</Item>");
  60. var xmlFilePath = GetSavePath(item);
  61. XmlHelpers.Save(builder, xmlFilePath);
  62. // Set last refreshed so that the provider doesn't trigger after the file save
  63. EpisodeProviderFromXml.Current.SetLastRefreshed(item, DateTime.UtcNow);
  64. }
  65. /// <summary>
  66. /// Gets the save path.
  67. /// </summary>
  68. /// <param name="item">The item.</param>
  69. /// <returns>System.String.</returns>
  70. public string GetSavePath(BaseItem item)
  71. {
  72. var filename = Path.ChangeExtension(Path.GetFileName(item.Path), ".xml");
  73. return Path.Combine(Path.GetDirectoryName(item.Path), "metadata", filename);
  74. }
  75. }
  76. }