MovieXmlSaver.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. using MediaBrowser.Common.IO;
  2. using MediaBrowser.Controller.Configuration;
  3. using MediaBrowser.Controller.Entities;
  4. using MediaBrowser.Controller.Entities.Movies;
  5. using MediaBrowser.Controller.Entities.TV;
  6. using MediaBrowser.Controller.Library;
  7. using MediaBrowser.Model.Entities;
  8. using System.Collections.Generic;
  9. using System.IO;
  10. using System.Security;
  11. using System.Text;
  12. using System.Threading;
  13. namespace MediaBrowser.XbmcMetadata.Savers
  14. {
  15. public class MovieXmlSaver : 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 MovieXmlSaver(ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataRepo, IFileSystem fileSystem, IServerConfigurationManager config)
  23. {
  24. _libraryManager = libraryManager;
  25. _userManager = userManager;
  26. _userDataRepo = userDataRepo;
  27. _fileSystem = fileSystem;
  28. _config = config;
  29. }
  30. public string Name
  31. {
  32. get
  33. {
  34. return "Xbmc Nfo";
  35. }
  36. }
  37. public string GetSavePath(IHasMetadata item)
  38. {
  39. return GetMovieSavePath(item);
  40. }
  41. public static string GetMovieSavePath(IHasMetadata item)
  42. {
  43. var video = (Video)item;
  44. if (video.VideoType == VideoType.Dvd || video.VideoType == VideoType.BluRay || video.VideoType == VideoType.HdDvd)
  45. {
  46. var path = item.ContainingFolderPath;
  47. return Path.Combine(path, Path.GetFileNameWithoutExtension(path) + ".nfo");
  48. }
  49. return Path.ChangeExtension(item.Path, ".nfo");
  50. }
  51. public void Save(IHasMetadata item, CancellationToken cancellationToken)
  52. {
  53. var video = (Video)item;
  54. var builder = new StringBuilder();
  55. var tag = item is MusicVideo ? "musicvideo" : "movie";
  56. builder.Append("<" + tag + ">");
  57. XmlSaverHelpers.AddCommonNodes(video, builder, _libraryManager, _userManager, _userDataRepo, _fileSystem, _config);
  58. var imdb = item.GetProviderId(MetadataProviders.Imdb);
  59. if (!string.IsNullOrEmpty(imdb))
  60. {
  61. builder.Append("<id>" + SecurityElement.Escape(imdb) + "</id>");
  62. }
  63. var musicVideo = item as MusicVideo;
  64. if (musicVideo != null)
  65. {
  66. if (!string.IsNullOrEmpty(musicVideo.Artist))
  67. {
  68. builder.Append("<artist>" + SecurityElement.Escape(musicVideo.Artist) + "</artist>");
  69. }
  70. if (!string.IsNullOrEmpty(musicVideo.Album))
  71. {
  72. builder.Append("<album>" + SecurityElement.Escape(musicVideo.Album) + "</album>");
  73. }
  74. }
  75. var movie = item as Movie;
  76. if (movie != null)
  77. {
  78. if (!string.IsNullOrEmpty(movie.TmdbCollectionName))
  79. {
  80. builder.Append("<set>" + SecurityElement.Escape(movie.TmdbCollectionName) + "</set>");
  81. }
  82. }
  83. XmlSaverHelpers.AddMediaInfo((Video)item, builder);
  84. builder.Append("</" + tag + ">");
  85. var xmlFilePath = GetSavePath(item);
  86. XmlSaverHelpers.Save(builder, xmlFilePath, new List<string>
  87. {
  88. "album",
  89. "artist",
  90. "set",
  91. "id"
  92. });
  93. }
  94. public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
  95. {
  96. if (!item.SupportsLocalMetadata)
  97. {
  98. return false;
  99. }
  100. var video = item as Video;
  101. // Check parent for null to avoid running this against things like video backdrops
  102. if (video != null && !(item is Episode) && !video.IsOwnedItem)
  103. {
  104. return updateType >= ItemUpdateType.MetadataDownload;
  105. }
  106. return false;
  107. }
  108. }
  109. }