MovieNfoSaver.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. using MediaBrowser.Controller.Configuration;
  2. using MediaBrowser.Controller.Entities;
  3. using MediaBrowser.Controller.Entities.Movies;
  4. using MediaBrowser.Controller.Entities.TV;
  5. using MediaBrowser.Controller.Library;
  6. using MediaBrowser.Controller.Providers;
  7. using MediaBrowser.Model.Entities;
  8. using MediaBrowser.Model.Logging;
  9. using System.Collections.Generic;
  10. using System.IO;
  11. using System.Linq;
  12. using System.Xml;
  13. using MediaBrowser.Controller.IO;
  14. using MediaBrowser.Model.IO;
  15. using MediaBrowser.Model.Xml;
  16. namespace MediaBrowser.XbmcMetadata.Savers
  17. {
  18. public class MovieNfoSaver : BaseNfoSaver
  19. {
  20. protected override string GetLocalSavePath(IHasMetadata item)
  21. {
  22. return GetMovieSavePaths(new ItemInfo(item), FileSystem).FirstOrDefault();
  23. }
  24. public static List<string> GetMovieSavePaths(ItemInfo item, IFileSystem fileSystem)
  25. {
  26. var list = new List<string>();
  27. if (item.VideoType == VideoType.Dvd && !item.IsPlaceHolder)
  28. {
  29. var path = item.ContainingFolderPath;
  30. list.Add(Path.Combine(path, "VIDEO_TS", "VIDEO_TS.nfo"));
  31. }
  32. if (!item.IsPlaceHolder && (item.VideoType == VideoType.Dvd || item.VideoType == VideoType.BluRay || item.VideoType == VideoType.HdDvd))
  33. {
  34. var path = item.ContainingFolderPath;
  35. list.Add(Path.Combine(path, Path.GetFileName(path) + ".nfo"));
  36. }
  37. else
  38. {
  39. // http://kodi.wiki/view/NFO_files/Movies
  40. // movie.nfo will override all and any .nfo files in the same folder as the media files if you use the "Use foldernames for lookups" setting. If you don't, then moviename.nfo is used
  41. //if (!item.IsInMixedFolder && item.ItemType == typeof(Movie))
  42. //{
  43. // list.Add(Path.Combine(item.ContainingFolderPath, "movie.nfo"));
  44. //}
  45. list.Add(Path.ChangeExtension(item.Path, ".nfo"));
  46. }
  47. return list;
  48. }
  49. protected override string GetRootElementName(IHasMetadata item)
  50. {
  51. return item is MusicVideo ? "musicvideo" : "movie";
  52. }
  53. public override bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
  54. {
  55. if (!item.SupportsLocalMetadata)
  56. {
  57. return false;
  58. }
  59. var video = item as Video;
  60. // Check parent for null to avoid running this against things like video backdrops
  61. if (video != null && !(item is Episode) && !video.IsOwnedItem)
  62. {
  63. return updateType >= MinimumUpdateType;
  64. }
  65. return false;
  66. }
  67. protected override void WriteCustomElements(IHasMetadata item, XmlWriter writer)
  68. {
  69. var imdb = item.GetProviderId(MetadataProviders.Imdb);
  70. if (!string.IsNullOrEmpty(imdb))
  71. {
  72. writer.WriteElementString("id", imdb);
  73. }
  74. var musicVideo = item as MusicVideo;
  75. if (musicVideo != null)
  76. {
  77. foreach (var artist in musicVideo.Artists)
  78. {
  79. writer.WriteElementString("artist", artist);
  80. }
  81. if (!string.IsNullOrEmpty(musicVideo.Album))
  82. {
  83. writer.WriteElementString("album", musicVideo.Album);
  84. }
  85. }
  86. var movie = item as Movie;
  87. if (movie != null)
  88. {
  89. if (!string.IsNullOrEmpty(movie.CollectionName))
  90. {
  91. writer.WriteElementString("set", movie.CollectionName);
  92. }
  93. }
  94. }
  95. protected override List<string> GetTagsUsed(IHasMetadata item)
  96. {
  97. var list = base.GetTagsUsed(item);
  98. list.AddRange(new string[]
  99. {
  100. "album",
  101. "artist",
  102. "set",
  103. "id"
  104. });
  105. return list;
  106. }
  107. public MovieNfoSaver(IFileSystem fileSystem, IServerConfigurationManager configurationManager, ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataManager, ILogger logger, IXmlReaderSettingsFactory xmlReaderSettingsFactory) : base(fileSystem, configurationManager, libraryManager, userManager, userDataManager, logger, xmlReaderSettingsFactory)
  108. {
  109. }
  110. }
  111. }