ArtistNfoSaver.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. using System.Collections.Generic;
  2. using System.Globalization;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Xml;
  6. using MediaBrowser.Controller.Configuration;
  7. using MediaBrowser.Controller.Entities;
  8. using MediaBrowser.Controller.Entities.Audio;
  9. using MediaBrowser.Controller.Library;
  10. using MediaBrowser.Model.IO;
  11. using MediaBrowser.XbmcMetadata.Configuration;
  12. using Microsoft.Extensions.Logging;
  13. namespace MediaBrowser.XbmcMetadata.Savers
  14. {
  15. /// <summary>
  16. /// Nfo saver for artist.
  17. /// </summary>
  18. public class ArtistNfoSaver : BaseNfoSaver
  19. {
  20. /// <summary>
  21. /// Initializes a new instance of the <see cref="ArtistNfoSaver"/> class.
  22. /// </summary>
  23. /// <param name="fileSystem">The file system.</param>
  24. /// <param name="configurationManager">the server configuration manager.</param>
  25. /// <param name="libraryManager">The library manager.</param>
  26. /// <param name="userManager">The user manager.</param>
  27. /// <param name="userDataManager">The user data manager.</param>
  28. /// <param name="logger">The logger.</param>
  29. public ArtistNfoSaver(
  30. IFileSystem fileSystem,
  31. IServerConfigurationManager configurationManager,
  32. ILibraryManager libraryManager,
  33. IUserManager userManager,
  34. IUserDataManager userDataManager,
  35. ILogger<ArtistNfoSaver> logger)
  36. : base(fileSystem, configurationManager, libraryManager, userManager, userDataManager, logger)
  37. {
  38. }
  39. /// <inheritdoc />
  40. protected override string GetLocalSavePath(BaseItem item)
  41. => Path.Combine(item.Path, "artist.nfo");
  42. /// <inheritdoc />
  43. protected override string GetRootElementName(BaseItem item)
  44. => "artist";
  45. /// <inheritdoc />
  46. public override bool IsEnabledFor(BaseItem item, ItemUpdateType updateType)
  47. => item.SupportsLocalMetadata && item is MusicArtist && updateType >= MinimumUpdateType;
  48. /// <inheritdoc />
  49. protected override void WriteCustomElements(BaseItem item, XmlWriter writer)
  50. {
  51. var artist = (MusicArtist)item;
  52. if (artist.EndDate.HasValue)
  53. {
  54. var formatString = ConfigurationManager.GetNfoConfiguration().ReleaseDateFormat;
  55. writer.WriteElementString("disbanded", artist.EndDate.Value.ToString(formatString, CultureInfo.InvariantCulture));
  56. }
  57. var albums = artist
  58. .GetRecursiveChildren(i => i is MusicAlbum);
  59. AddAlbums(albums, writer);
  60. }
  61. private void AddAlbums(IReadOnlyList<BaseItem> albums, XmlWriter writer)
  62. {
  63. foreach (var album in albums
  64. .OrderBy(album => album.ProductionYear ?? 0)
  65. .ThenBy(album => SortNameOrName(album))
  66. .ThenBy(album => album.Name?.Trim()))
  67. {
  68. writer.WriteStartElement("album");
  69. if (!string.IsNullOrEmpty(album.Name))
  70. {
  71. writer.WriteElementString("title", album.Name);
  72. }
  73. if (album.ProductionYear.HasValue)
  74. {
  75. writer.WriteElementString("year", album.ProductionYear.Value.ToString(CultureInfo.InvariantCulture));
  76. }
  77. writer.WriteEndElement();
  78. }
  79. }
  80. /// <inheritdoc />
  81. protected override IEnumerable<string> GetTagsUsed(BaseItem item)
  82. {
  83. foreach (var tag in base.GetTagsUsed(item))
  84. {
  85. yield return tag;
  86. }
  87. yield return "album";
  88. yield return "disbanded";
  89. }
  90. }
  91. }