ArtistNfoSaver.cs 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. using MediaBrowser.Controller.Configuration;
  2. using MediaBrowser.Controller.Entities;
  3. using MediaBrowser.Controller.Entities.Audio;
  4. using MediaBrowser.Controller.Library;
  5. using MediaBrowser.Model.Logging;
  6. using MediaBrowser.XbmcMetadata.Configuration;
  7. using System.Collections.Generic;
  8. using System.Globalization;
  9. using System.IO;
  10. using System.Linq;
  11. using System.Xml;
  12. using MediaBrowser.Controller.IO;
  13. using MediaBrowser.Model.IO;
  14. using MediaBrowser.Model.Xml;
  15. namespace MediaBrowser.XbmcMetadata.Savers
  16. {
  17. public class ArtistNfoSaver : BaseNfoSaver
  18. {
  19. protected override string GetLocalSavePath(IHasMetadata item)
  20. {
  21. return Path.Combine(item.Path, "artist.nfo");
  22. }
  23. protected override string GetRootElementName(IHasMetadata item)
  24. {
  25. return "artist";
  26. }
  27. public override bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
  28. {
  29. if (!item.SupportsLocalMetadata)
  30. {
  31. return false;
  32. }
  33. return item is MusicArtist && updateType >= MinimumUpdateType;
  34. }
  35. protected override void WriteCustomElements(IHasMetadata item, XmlWriter writer)
  36. {
  37. var artist = (MusicArtist)item;
  38. if (artist.EndDate.HasValue)
  39. {
  40. var formatString = ConfigurationManager.GetNfoConfiguration().ReleaseDateFormat;
  41. writer.WriteElementString("disbanded", artist.EndDate.Value.ToLocalTime().ToString(formatString));
  42. }
  43. var albums = artist
  44. .GetRecursiveChildren(i => i is MusicAlbum)
  45. .Cast<MusicAlbum>()
  46. .ToList();
  47. AddAlbums(albums, writer);
  48. }
  49. private static readonly CultureInfo UsCulture = new CultureInfo("en-US");
  50. private void AddAlbums(IEnumerable<MusicAlbum> albums, XmlWriter writer)
  51. {
  52. foreach (var album in albums)
  53. {
  54. writer.WriteStartElement("album");
  55. if (!string.IsNullOrEmpty(album.Name))
  56. {
  57. writer.WriteElementString("title", album.Name);
  58. }
  59. if (album.ProductionYear.HasValue)
  60. {
  61. writer.WriteElementString("year", album.ProductionYear.Value.ToString(UsCulture));
  62. }
  63. writer.WriteEndElement();
  64. }
  65. }
  66. protected override List<string> GetTagsUsed(IHasMetadata item)
  67. {
  68. var list = base.GetTagsUsed(item);
  69. list.AddRange(new string[]
  70. {
  71. "album",
  72. "disbanded"
  73. });
  74. return list;
  75. }
  76. public ArtistNfoSaver(IFileSystem fileSystem, IServerConfigurationManager configurationManager, ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataManager, ILogger logger, IXmlReaderSettingsFactory xmlReaderSettingsFactory) : base(fileSystem, configurationManager, libraryManager, userManager, userDataManager, logger, xmlReaderSettingsFactory)
  77. {
  78. }
  79. }
  80. }