jellyfin/MediaBrowser.Providers/Music/AudioMetadataService.cs

75 lines
3.2 KiB
C#
Raw Normal View History

2022-03-28 17:11:21 -04:00
using System;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
2016-10-25 15:02:04 -04:00
using MediaBrowser.Model.IO;
using MediaBrowser.Providers.Manager;
using Microsoft.Extensions.Logging;
namespace MediaBrowser.Providers.Music
{
2022-03-31 10:17:37 -04:00
/// <summary>
/// The audio metadata service.
/// </summary>
2014-02-08 17:38:02 -05:00
public class AudioMetadataService : MetadataService<Audio, SongInfo>
{
2022-03-31 10:17:37 -04:00
/// <summary>
/// Initializes a new instance of the <see cref="AudioMetadataService"/> class.
/// </summary>
/// <param name="serverConfigurationManager">Instance of the <see cref="IServerConfigurationManager"/>.</param>
/// <param name="logger">Instance of the <see cref="ILogger"/> interface.</param>
/// <param name="providerManager">Instance of the <see cref="IProviderManager"/> interface.</param>
/// <param name="fileSystem">Instance of the <see cref="IFileSystem"/> interface.</param>
/// <param name="libraryManager">Instance of the <see cref="ILibraryManager"/> interface.</param>
2019-08-29 16:28:33 -04:00
public AudioMetadataService(
IServerConfigurationManager serverConfigurationManager,
ILogger<AudioMetadataService> logger,
2019-08-29 16:28:33 -04:00
IProviderManager providerManager,
IFileSystem fileSystem,
ILibraryManager libraryManager)
2019-09-10 16:37:53 -04:00
: base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager)
2019-08-29 16:28:33 -04:00
{
}
2022-10-07 05:31:16 -04:00
private void SetProviderId(Audio sourceItem, Audio targetItem, bool replaceData, MetadataProvider provider)
{
var target = targetItem.GetProviderId(provider);
if (replaceData || string.IsNullOrEmpty(target))
{
var source = sourceItem.GetProviderId(provider);
if (!string.IsNullOrEmpty(source)
&& (string.IsNullOrEmpty(target)
|| !target.Equals(source, StringComparison.Ordinal)))
{
targetItem.SetProviderId(provider, source);
}
}
}
2019-08-29 16:28:33 -04:00
/// <inheritdoc />
2020-06-09 18:12:53 -04:00
protected override void MergeData(MetadataResult<Audio> source, MetadataResult<Audio> target, MetadataField[] lockedFields, bool replaceData, bool mergeMetadataSettings)
{
base.MergeData(source, target, lockedFields, replaceData, mergeMetadataSettings);
2015-06-28 21:10:45 -04:00
var sourceItem = source.Item;
var targetItem = target.Item;
2019-08-29 16:28:33 -04:00
if (replaceData || targetItem.Artists.Count == 0)
{
2017-08-24 15:52:19 -04:00
targetItem.Artists = sourceItem.Artists;
}
2015-06-28 21:10:45 -04:00
if (replaceData || string.IsNullOrEmpty(targetItem.Album))
{
2015-06-28 21:10:45 -04:00
targetItem.Album = sourceItem.Album;
}
2022-03-28 17:11:21 -04:00
2022-10-07 05:31:16 -04:00
SetProviderId(sourceItem, targetItem, replaceData, MetadataProvider.MusicBrainzAlbumArtist);
SetProviderId(sourceItem, targetItem, replaceData, MetadataProvider.MusicBrainzAlbum);
SetProviderId(sourceItem, targetItem, replaceData, MetadataProvider.MusicBrainzReleaseGroup);
}
}
}