ArtistXmlSaver.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. using MediaBrowser.Common.IO;
  2. using MediaBrowser.Controller.Configuration;
  3. using MediaBrowser.Controller.Entities;
  4. using MediaBrowser.Controller.Entities.Audio;
  5. using MediaBrowser.Controller.Library;
  6. using MediaBrowser.Model.Entities;
  7. using MediaBrowser.XbmcMetadata.Configuration;
  8. using System.Collections.Generic;
  9. using System.Globalization;
  10. using System.IO;
  11. using System.Linq;
  12. using System.Security;
  13. using System.Text;
  14. using System.Threading;
  15. namespace MediaBrowser.XbmcMetadata.Savers
  16. {
  17. public class ArtistXmlSaver : IMetadataFileSaver
  18. {
  19. private readonly ILibraryManager _libraryManager;
  20. private readonly IUserManager _userManager;
  21. private readonly IUserDataManager _userDataRepo;
  22. private readonly IFileSystem _fileSystem;
  23. private readonly IServerConfigurationManager _config;
  24. private static readonly CultureInfo UsCulture = new CultureInfo("en-US");
  25. public ArtistXmlSaver(ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataRepo, IFileSystem fileSystem, IServerConfigurationManager config)
  26. {
  27. _libraryManager = libraryManager;
  28. _userManager = userManager;
  29. _userDataRepo = userDataRepo;
  30. _fileSystem = fileSystem;
  31. _config = config;
  32. }
  33. public string GetSavePath(IHasMetadata item)
  34. {
  35. return Path.Combine(item.Path, "artist.nfo");
  36. }
  37. public string Name
  38. {
  39. get
  40. {
  41. return "Xbmc Nfo";
  42. }
  43. }
  44. public void Save(IHasMetadata item, CancellationToken cancellationToken)
  45. {
  46. var artist = (MusicArtist)item;
  47. var builder = new StringBuilder();
  48. builder.Append("<artist>");
  49. XmlSaverHelpers.AddCommonNodes(artist, builder, _libraryManager, _userManager, _userDataRepo, _fileSystem, _config);
  50. if (artist.EndDate.HasValue)
  51. {
  52. var formatString = _config.GetNfoConfiguration().ReleaseDateFormat;
  53. builder.Append("<disbanded>" + SecurityElement.Escape(artist.EndDate.Value.ToString(formatString)) + "</disbanded>");
  54. }
  55. var albums = artist
  56. .RecursiveChildren
  57. .OfType<MusicAlbum>()
  58. .ToList();
  59. AddAlbums(albums, builder);
  60. builder.Append("</artist>");
  61. var xmlFilePath = GetSavePath(item);
  62. XmlSaverHelpers.Save(builder, xmlFilePath, new List<string>
  63. {
  64. "album",
  65. "disbanded"
  66. });
  67. }
  68. public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
  69. {
  70. if (!item.SupportsLocalMetadata)
  71. {
  72. return false;
  73. }
  74. return item is MusicArtist && updateType >= ItemUpdateType.MetadataDownload;
  75. }
  76. private void AddAlbums(IEnumerable<MusicAlbum> albums, StringBuilder builder)
  77. {
  78. foreach (var album in albums)
  79. {
  80. builder.Append("<album>");
  81. if (!string.IsNullOrEmpty(album.Name))
  82. {
  83. builder.Append("<title>" + SecurityElement.Escape(album.Name) + "</title>");
  84. }
  85. if (album.ProductionYear.HasValue)
  86. {
  87. builder.Append("<year>" + SecurityElement.Escape(album.ProductionYear.Value.ToString(UsCulture)) + "</year>");
  88. }
  89. builder.Append("</album>");
  90. }
  91. }
  92. }
  93. }