ArtistNfoSaver.cs 3.0 KB

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