AudioMetadataService.cs 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using System;
  2. using System.Linq;
  3. using MediaBrowser.Controller.Configuration;
  4. using MediaBrowser.Controller.Entities.Audio;
  5. using MediaBrowser.Controller.IO;
  6. using MediaBrowser.Controller.Library;
  7. using MediaBrowser.Controller.MediaSegments;
  8. using MediaBrowser.Controller.Providers;
  9. using MediaBrowser.Model.Entities;
  10. using MediaBrowser.Model.IO;
  11. using MediaBrowser.Providers.Manager;
  12. using Microsoft.Extensions.Logging;
  13. namespace MediaBrowser.Providers.Music;
  14. /// <summary>
  15. /// The audio metadata service.
  16. /// </summary>
  17. public class AudioMetadataService : MetadataService<Audio, SongInfo>
  18. {
  19. /// <summary>
  20. /// Initializes a new instance of the <see cref="AudioMetadataService"/> class.
  21. /// </summary>
  22. /// <param name="serverConfigurationManager">Instance of the <see cref="IServerConfigurationManager"/>.</param>
  23. /// <param name="logger">Instance of the <see cref="ILogger"/> interface.</param>
  24. /// <param name="providerManager">Instance of the <see cref="IProviderManager"/> interface.</param>
  25. /// <param name="fileSystem">Instance of the <see cref="IFileSystem"/> interface.</param>
  26. /// <param name="libraryManager">Instance of the <see cref="ILibraryManager"/> interface.</param>
  27. /// <param name="pathManager">Instance of the <see cref="IPathManager"/> interface.</param>
  28. /// <param name="keyframeManager">Instance of the <see cref="IKeyframeManager"/> interface.</param>
  29. /// <param name="mediaSegmentManager">Instance of the <see cref="IMediaSegmentManager"/> interface.</param>
  30. public AudioMetadataService(
  31. IServerConfigurationManager serverConfigurationManager,
  32. ILogger<AudioMetadataService> logger,
  33. IProviderManager providerManager,
  34. IFileSystem fileSystem,
  35. ILibraryManager libraryManager,
  36. IPathManager pathManager,
  37. IKeyframeManager keyframeManager,
  38. IMediaSegmentManager mediaSegmentManager)
  39. : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager, pathManager, keyframeManager, mediaSegmentManager)
  40. {
  41. }
  42. private void SetProviderId(Audio sourceItem, Audio targetItem, bool replaceData, MetadataProvider provider)
  43. {
  44. var target = targetItem.GetProviderId(provider);
  45. if (replaceData || string.IsNullOrEmpty(target))
  46. {
  47. var source = sourceItem.GetProviderId(provider);
  48. if (!string.IsNullOrEmpty(source)
  49. && (string.IsNullOrEmpty(target)
  50. || !target.Equals(source, StringComparison.Ordinal)))
  51. {
  52. targetItem.SetProviderId(provider, source);
  53. }
  54. }
  55. }
  56. /// <inheritdoc />
  57. protected override void MergeData(MetadataResult<Audio> source, MetadataResult<Audio> target, MetadataField[] lockedFields, bool replaceData, bool mergeMetadataSettings)
  58. {
  59. base.MergeData(source, target, lockedFields, replaceData, mergeMetadataSettings);
  60. var sourceItem = source.Item;
  61. var targetItem = target.Item;
  62. if (replaceData || targetItem.Artists.Count == 0)
  63. {
  64. targetItem.Artists = sourceItem.Artists;
  65. }
  66. else
  67. {
  68. targetItem.Artists = targetItem.Artists.Concat(sourceItem.Artists).Distinct(StringComparer.OrdinalIgnoreCase).ToArray();
  69. }
  70. if (replaceData || string.IsNullOrEmpty(targetItem.Album))
  71. {
  72. targetItem.Album = sourceItem.Album;
  73. }
  74. SetProviderId(sourceItem, targetItem, replaceData, MetadataProvider.MusicBrainzAlbumArtist);
  75. SetProviderId(sourceItem, targetItem, replaceData, MetadataProvider.MusicBrainzAlbum);
  76. SetProviderId(sourceItem, targetItem, replaceData, MetadataProvider.MusicBrainzReleaseGroup);
  77. }
  78. }