diff options
| author | Tim Eisele <Ghost_of_Stone@web.de> | 2025-05-05 05:21:44 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-05-04 21:21:44 -0600 |
| commit | d976f13970e034a24c1d0f69384501e31475a127 (patch) | |
| tree | 8b04bfba52b06c2c8f762beeaa3f7efebc7d6584 /MediaBrowser.Providers/Music | |
| parent | 0c3ba30de214eddcd6118c3b695b08e5482bf7ed (diff) | |
Recognize file changes and remove data on change (#13839)
Diffstat (limited to 'MediaBrowser.Providers/Music')
4 files changed, 336 insertions, 291 deletions
diff --git a/MediaBrowser.Providers/Music/AlbumMetadataService.cs b/MediaBrowser.Providers/Music/AlbumMetadataService.cs index 64b627367..cc6d7953d 100644 --- a/MediaBrowser.Providers/Music/AlbumMetadataService.cs +++ b/MediaBrowser.Providers/Music/AlbumMetadataService.cs @@ -5,245 +5,252 @@ using Jellyfin.Data.Enums; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; +using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.MediaSegments; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.IO; using MediaBrowser.Providers.Manager; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.Music +namespace MediaBrowser.Providers.Music; + +/// <summary> +/// The album metadata service. +/// </summary> +public class AlbumMetadataService : MetadataService<MusicAlbum, AlbumInfo> { /// <summary> - /// The album metadata service. + /// Initializes a new instance of the <see cref="AlbumMetadataService"/> class. /// </summary> - public class AlbumMetadataService : MetadataService<MusicAlbum, AlbumInfo> + /// <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> + /// <param name="pathManager">Instance of the <see cref="IPathManager"/> interface.</param> + /// <param name="keyframeManager">Instance of the <see cref="IKeyframeManager"/> interface.</param> + /// <param name="mediaSegmentManager">Instance of the <see cref="IMediaSegmentManager"/> interface.</param> + public AlbumMetadataService( + IServerConfigurationManager serverConfigurationManager, + ILogger<AlbumMetadataService> logger, + IProviderManager providerManager, + IFileSystem fileSystem, + ILibraryManager libraryManager, + IPathManager pathManager, + IKeyframeManager keyframeManager, + IMediaSegmentManager mediaSegmentManager) + : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager, pathManager, keyframeManager, mediaSegmentManager) { - /// <summary> - /// Initializes a new instance of the <see cref="AlbumMetadataService"/> 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> - public AlbumMetadataService( - IServerConfigurationManager serverConfigurationManager, - ILogger<AlbumMetadataService> logger, - IProviderManager providerManager, - IFileSystem fileSystem, - ILibraryManager libraryManager) - : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager) - { - } + } + + /// <inheritdoc /> + protected override bool EnableUpdatingPremiereDateFromChildren => true; - /// <inheritdoc /> - protected override bool EnableUpdatingPremiereDateFromChildren => true; + /// <inheritdoc /> + protected override bool EnableUpdatingGenresFromChildren => true; - /// <inheritdoc /> - protected override bool EnableUpdatingGenresFromChildren => true; + /// <inheritdoc /> + protected override bool EnableUpdatingStudiosFromChildren => true; - /// <inheritdoc /> - protected override bool EnableUpdatingStudiosFromChildren => true; + /// <inheritdoc /> + protected override IReadOnlyList<BaseItem> GetChildrenForMetadataUpdates(MusicAlbum item) + => item.GetRecursiveChildren(i => i is Audio); - /// <inheritdoc /> - protected override IReadOnlyList<BaseItem> GetChildrenForMetadataUpdates(MusicAlbum item) - => item.GetRecursiveChildren(i => i is Audio); + /// <inheritdoc /> + protected override ItemUpdateType UpdateMetadataFromChildren(MusicAlbum item, IReadOnlyList<BaseItem> children, bool isFullRefresh, ItemUpdateType currentUpdateType) + { + var updateType = base.UpdateMetadataFromChildren(item, children, isFullRefresh, currentUpdateType); - /// <inheritdoc /> - protected override ItemUpdateType UpdateMetadataFromChildren(MusicAlbum item, IReadOnlyList<BaseItem> children, bool isFullRefresh, ItemUpdateType currentUpdateType) + // don't update user-changeable metadata for locked items + if (item.IsLocked) { - var updateType = base.UpdateMetadataFromChildren(item, children, isFullRefresh, currentUpdateType); + return updateType; + } - // don't update user-changeable metadata for locked items - if (item.IsLocked) + if (isFullRefresh || currentUpdateType > ItemUpdateType.None) + { + if (!item.LockedFields.Contains(MetadataField.Name)) { - return updateType; - } + var name = children.Select(i => i.Album).FirstOrDefault(i => !string.IsNullOrEmpty(i)); - if (isFullRefresh || currentUpdateType > ItemUpdateType.None) - { - if (!item.LockedFields.Contains(MetadataField.Name)) + if (!string.IsNullOrEmpty(name) + && !string.Equals(item.Name, name, StringComparison.Ordinal)) { - var name = children.Select(i => i.Album).FirstOrDefault(i => !string.IsNullOrEmpty(i)); - - if (!string.IsNullOrEmpty(name) - && !string.Equals(item.Name, name, StringComparison.Ordinal)) - { - item.Name = name; - updateType |= ItemUpdateType.MetadataEdit; - } + item.Name = name; + updateType |= ItemUpdateType.MetadataEdit; } - - var songs = children.Cast<Audio>().ToArray(); - - updateType |= SetArtistsFromSongs(item, songs); - updateType |= SetAlbumArtistFromSongs(item, songs); - updateType |= SetAlbumFromSongs(item, songs); - updateType |= SetPeople(item); } - return updateType; + var songs = children.Cast<Audio>().ToArray(); + + updateType |= SetArtistsFromSongs(item, songs); + updateType |= SetAlbumArtistFromSongs(item, songs); + updateType |= SetAlbumFromSongs(item, songs); + updateType |= SetPeople(item); } - private ItemUpdateType SetAlbumArtistFromSongs(MusicAlbum item, IReadOnlyList<Audio> songs) - { - var updateType = ItemUpdateType.None; + return updateType; + } - var albumArtists = songs - .SelectMany(i => i.AlbumArtists) - .GroupBy(i => i) - .OrderByDescending(g => g.Count()) - .Select(g => g.Key) - .ToArray(); + private ItemUpdateType SetAlbumArtistFromSongs(MusicAlbum item, IReadOnlyList<Audio> songs) + { + var updateType = ItemUpdateType.None; - updateType |= SetProviderIdFromSongs(item, songs, MetadataProvider.MusicBrainzAlbumArtist); + var albumArtists = songs + .SelectMany(i => i.AlbumArtists) + .GroupBy(i => i) + .OrderByDescending(g => g.Count()) + .Select(g => g.Key) + .ToArray(); - if (!item.AlbumArtists.SequenceEqual(albumArtists, StringComparer.OrdinalIgnoreCase)) - { - item.AlbumArtists = albumArtists; - updateType |= ItemUpdateType.MetadataEdit; - } + updateType |= SetProviderIdFromSongs(item, songs, MetadataProvider.MusicBrainzAlbumArtist); - return updateType; + if (!item.AlbumArtists.SequenceEqual(albumArtists, StringComparer.OrdinalIgnoreCase)) + { + item.AlbumArtists = albumArtists; + updateType |= ItemUpdateType.MetadataEdit; } - private ItemUpdateType SetArtistsFromSongs(MusicAlbum item, IReadOnlyList<Audio> songs) - { - var updateType = ItemUpdateType.None; + return updateType; + } - var artists = songs - .SelectMany(i => i.Artists) - .GroupBy(i => i) - .OrderByDescending(g => g.Count()) - .Select(g => g.Key) - .ToArray(); + private ItemUpdateType SetArtistsFromSongs(MusicAlbum item, IReadOnlyList<Audio> songs) + { + var updateType = ItemUpdateType.None; - if (!item.Artists.SequenceEqual(artists, StringComparer.OrdinalIgnoreCase)) - { - item.Artists = artists; - updateType |= ItemUpdateType.MetadataEdit; - } + var artists = songs + .SelectMany(i => i.Artists) + .GroupBy(i => i) + .OrderByDescending(g => g.Count()) + .Select(g => g.Key) + .ToArray(); - return updateType; + if (!item.Artists.SequenceEqual(artists, StringComparer.OrdinalIgnoreCase)) + { + item.Artists = artists; + updateType |= ItemUpdateType.MetadataEdit; } - private ItemUpdateType SetAlbumFromSongs(MusicAlbum item, IReadOnlyList<Audio> songs) - { - var updateType = ItemUpdateType.None; + return updateType; + } - updateType |= SetProviderIdFromSongs(item, songs, MetadataProvider.MusicBrainzAlbum); - updateType |= SetProviderIdFromSongs(item, songs, MetadataProvider.MusicBrainzReleaseGroup); + private ItemUpdateType SetAlbumFromSongs(MusicAlbum item, IReadOnlyList<Audio> songs) + { + var updateType = ItemUpdateType.None; - return updateType; - } + updateType |= SetProviderIdFromSongs(item, songs, MetadataProvider.MusicBrainzAlbum); + updateType |= SetProviderIdFromSongs(item, songs, MetadataProvider.MusicBrainzReleaseGroup); - private ItemUpdateType SetProviderIdFromSongs(BaseItem item, IReadOnlyList<Audio> songs, MetadataProvider provider) + return updateType; + } + + private ItemUpdateType SetProviderIdFromSongs(BaseItem item, IReadOnlyList<Audio> songs, MetadataProvider provider) + { + var ids = songs + .Select(i => i.GetProviderId(provider)) + .GroupBy(i => i) + .OrderByDescending(g => g.Count()) + .Select(g => g.Key) + .ToArray(); + + var id = item.GetProviderId(provider); + if (ids.Length != 0) { - var ids = songs - .Select(i => i.GetProviderId(provider)) - .GroupBy(i => i) - .OrderByDescending(g => g.Count()) - .Select(g => g.Key) - .ToArray(); - - var id = item.GetProviderId(provider); - if (ids.Length != 0) + var firstId = ids[0]; + if (!string.IsNullOrEmpty(firstId) + && (string.IsNullOrEmpty(id) + || !id.Equals(firstId, StringComparison.OrdinalIgnoreCase))) { - var firstId = ids[0]; - if (!string.IsNullOrEmpty(firstId) - && (string.IsNullOrEmpty(id) - || !id.Equals(firstId, StringComparison.OrdinalIgnoreCase))) - { - item.SetProviderId(provider, firstId); - return ItemUpdateType.MetadataEdit; - } + item.SetProviderId(provider, firstId); + return ItemUpdateType.MetadataEdit; } - - return ItemUpdateType.None; } - private void SetProviderId(MusicAlbum sourceItem, MusicAlbum targetItem, MetadataProvider provider) + return ItemUpdateType.None; + } + + private void SetProviderId(MusicAlbum sourceItem, MusicAlbum targetItem, MetadataProvider provider) + { + var source = sourceItem.GetProviderId(provider); + var target = targetItem.GetProviderId(provider); + if (!string.IsNullOrEmpty(source) + && (string.IsNullOrEmpty(target) + || !target.Equals(source, StringComparison.Ordinal))) { - var source = sourceItem.GetProviderId(provider); - var target = targetItem.GetProviderId(provider); - if (!string.IsNullOrEmpty(source) - && (string.IsNullOrEmpty(target) - || !target.Equals(source, StringComparison.Ordinal))) - { - targetItem.SetProviderId(provider, source); - } + targetItem.SetProviderId(provider, source); } + } - private ItemUpdateType SetPeople(MusicAlbum item) + private ItemUpdateType SetPeople(MusicAlbum item) + { + var updateType = ItemUpdateType.None; + + if (item.AlbumArtists.Any() || item.Artists.Any()) { - var updateType = ItemUpdateType.None; + var people = new List<PersonInfo>(); - if (item.AlbumArtists.Any() || item.Artists.Any()) + foreach (var albumArtist in item.AlbumArtists) { - var people = new List<PersonInfo>(); - - foreach (var albumArtist in item.AlbumArtists) + PeopleHelper.AddPerson(people, new PersonInfo { - PeopleHelper.AddPerson(people, new PersonInfo - { - Name = albumArtist.Trim(), - Type = PersonKind.AlbumArtist - }); - } + Name = albumArtist.Trim(), + Type = PersonKind.AlbumArtist + }); + } - foreach (var artist in item.Artists) + foreach (var artist in item.Artists) + { + PeopleHelper.AddPerson(people, new PersonInfo { - PeopleHelper.AddPerson(people, new PersonInfo - { - Name = artist.Trim(), - Type = PersonKind.Artist - }); - } - - LibraryManager.UpdatePeople(item, people); - updateType |= ItemUpdateType.MetadataEdit; + Name = artist.Trim(), + Type = PersonKind.Artist + }); } - return updateType; + LibraryManager.UpdatePeople(item, people); + updateType |= ItemUpdateType.MetadataEdit; } - /// <inheritdoc /> - protected override void MergeData( - MetadataResult<MusicAlbum> source, - MetadataResult<MusicAlbum> target, - MetadataField[] lockedFields, - bool replaceData, - bool mergeMetadataSettings) - { - base.MergeData(source, target, lockedFields, replaceData, mergeMetadataSettings); + return updateType; + } - var sourceItem = source.Item; - var targetItem = target.Item; + /// <inheritdoc /> + protected override void MergeData( + MetadataResult<MusicAlbum> source, + MetadataResult<MusicAlbum> target, + MetadataField[] lockedFields, + bool replaceData, + bool mergeMetadataSettings) + { + base.MergeData(source, target, lockedFields, replaceData, mergeMetadataSettings); - if (replaceData || targetItem.Artists.Count == 0) - { - targetItem.Artists = sourceItem.Artists; - } - else - { - targetItem.Artists = targetItem.Artists.Concat(sourceItem.Artists).Distinct(StringComparer.OrdinalIgnoreCase).ToArray(); - } + var sourceItem = source.Item; + var targetItem = target.Item; - if (replaceData || string.IsNullOrEmpty(targetItem.GetProviderId(MetadataProvider.MusicBrainzAlbumArtist))) - { - SetProviderId(sourceItem, targetItem, MetadataProvider.MusicBrainzAlbumArtist); - } + if (replaceData || targetItem.Artists.Count == 0) + { + targetItem.Artists = sourceItem.Artists; + } + else + { + targetItem.Artists = targetItem.Artists.Concat(sourceItem.Artists).Distinct(StringComparer.OrdinalIgnoreCase).ToArray(); + } - if (replaceData || string.IsNullOrEmpty(targetItem.GetProviderId(MetadataProvider.MusicBrainzAlbum))) - { - SetProviderId(sourceItem, targetItem, MetadataProvider.MusicBrainzAlbum); - } + if (replaceData || string.IsNullOrEmpty(targetItem.GetProviderId(MetadataProvider.MusicBrainzAlbumArtist))) + { + SetProviderId(sourceItem, targetItem, MetadataProvider.MusicBrainzAlbumArtist); + } - if (replaceData || string.IsNullOrEmpty(targetItem.GetProviderId(MetadataProvider.MusicBrainzReleaseGroup))) - { - SetProviderId(sourceItem, targetItem, MetadataProvider.MusicBrainzReleaseGroup); - } + if (replaceData || string.IsNullOrEmpty(targetItem.GetProviderId(MetadataProvider.MusicBrainzAlbum))) + { + SetProviderId(sourceItem, targetItem, MetadataProvider.MusicBrainzAlbum); + } + + if (replaceData || string.IsNullOrEmpty(targetItem.GetProviderId(MetadataProvider.MusicBrainzReleaseGroup))) + { + SetProviderId(sourceItem, targetItem, MetadataProvider.MusicBrainzReleaseGroup); } } } diff --git a/MediaBrowser.Providers/Music/ArtistMetadataService.cs b/MediaBrowser.Providers/Music/ArtistMetadataService.cs index c47f9a500..3764893a6 100644 --- a/MediaBrowser.Providers/Music/ArtistMetadataService.cs +++ b/MediaBrowser.Providers/Music/ArtistMetadataService.cs @@ -1,43 +1,58 @@ -#pragma warning disable CS1591 - using System.Collections.Generic; -using System.Collections.Immutable; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; +using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.MediaSegments; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.IO; using MediaBrowser.Providers.Manager; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.Music +namespace MediaBrowser.Providers.Music; + +/// <summary> +/// Service to manage artist metadata. +/// </summary> +public class ArtistMetadataService : MetadataService<MusicArtist, ArtistInfo> { - public class ArtistMetadataService : MetadataService<MusicArtist, ArtistInfo> + /// <summary> + /// Initializes a new instance of the <see cref="ArtistMetadataService"/> 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> + /// <param name="pathManager">Instance of the <see cref="IPathManager"/> interface.</param> + /// <param name="keyframeManager">Instance of the <see cref="IKeyframeManager"/> interface.</param> + /// <param name="mediaSegmentManager">Instance of the <see cref="IMediaSegmentManager"/> interface.</param> + public ArtistMetadataService( + IServerConfigurationManager serverConfigurationManager, + ILogger<ArtistMetadataService> logger, + IProviderManager providerManager, + IFileSystem fileSystem, + ILibraryManager libraryManager, + IPathManager pathManager, + IKeyframeManager keyframeManager, + IMediaSegmentManager mediaSegmentManager) + : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager, pathManager, keyframeManager, mediaSegmentManager) { - public ArtistMetadataService( - IServerConfigurationManager serverConfigurationManager, - ILogger<ArtistMetadataService> logger, - IProviderManager providerManager, - IFileSystem fileSystem, - ILibraryManager libraryManager) - : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager) - { - } + } - /// <inheritdoc /> - protected override bool EnableUpdatingGenresFromChildren => true; + /// <inheritdoc /> + protected override bool EnableUpdatingGenresFromChildren => true; - /// <inheritdoc /> - protected override IReadOnlyList<BaseItem> GetChildrenForMetadataUpdates(MusicArtist item) - { - return item.IsAccessedByName - ? item.GetTaggedItems(new InternalItemsQuery - { - Recursive = true, - IsFolder = false - }) - : item.GetRecursiveChildren(i => i is IHasArtist && !i.IsFolder); - } + /// <inheritdoc /> + protected override IReadOnlyList<BaseItem> GetChildrenForMetadataUpdates(MusicArtist item) + { + return item.IsAccessedByName + ? item.GetTaggedItems(new InternalItemsQuery + { + Recursive = true, + IsFolder = false + }) + : item.GetRecursiveChildren(i => i is IHasArtist && !i.IsFolder); } } diff --git a/MediaBrowser.Providers/Music/AudioMetadataService.cs b/MediaBrowser.Providers/Music/AudioMetadataService.cs index 71962d952..b632f9a51 100644 --- a/MediaBrowser.Providers/Music/AudioMetadataService.cs +++ b/MediaBrowser.Providers/Music/AudioMetadataService.cs @@ -2,78 +2,85 @@ using System; using System.Linq; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities.Audio; +using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.MediaSegments; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.IO; using MediaBrowser.Providers.Manager; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.Music +namespace MediaBrowser.Providers.Music; + +/// <summary> +/// The audio metadata service. +/// </summary> +public class AudioMetadataService : MetadataService<Audio, SongInfo> { /// <summary> - /// The audio metadata service. + /// Initializes a new instance of the <see cref="AudioMetadataService"/> class. /// </summary> - public class AudioMetadataService : MetadataService<Audio, SongInfo> + /// <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> + /// <param name="pathManager">Instance of the <see cref="IPathManager"/> interface.</param> + /// <param name="keyframeManager">Instance of the <see cref="IKeyframeManager"/> interface.</param> + /// <param name="mediaSegmentManager">Instance of the <see cref="IMediaSegmentManager"/> interface.</param> + public AudioMetadataService( + IServerConfigurationManager serverConfigurationManager, + ILogger<AudioMetadataService> logger, + IProviderManager providerManager, + IFileSystem fileSystem, + ILibraryManager libraryManager, + IPathManager pathManager, + IKeyframeManager keyframeManager, + IMediaSegmentManager mediaSegmentManager) + : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager, pathManager, keyframeManager, mediaSegmentManager) { - /// <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> - public AudioMetadataService( - IServerConfigurationManager serverConfigurationManager, - ILogger<AudioMetadataService> logger, - IProviderManager providerManager, - IFileSystem fileSystem, - ILibraryManager libraryManager) - : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager) - { - } + } - private void SetProviderId(Audio sourceItem, Audio targetItem, bool replaceData, MetadataProvider provider) + private void SetProviderId(Audio sourceItem, Audio targetItem, bool replaceData, MetadataProvider provider) + { + var target = targetItem.GetProviderId(provider); + if (replaceData || string.IsNullOrEmpty(target)) { - 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))) { - var source = sourceItem.GetProviderId(provider); - if (!string.IsNullOrEmpty(source) - && (string.IsNullOrEmpty(target) - || !target.Equals(source, StringComparison.Ordinal))) - { - targetItem.SetProviderId(provider, source); - } + targetItem.SetProviderId(provider, source); } } + } - /// <inheritdoc /> - protected override void MergeData(MetadataResult<Audio> source, MetadataResult<Audio> target, MetadataField[] lockedFields, bool replaceData, bool mergeMetadataSettings) - { - base.MergeData(source, target, lockedFields, replaceData, mergeMetadataSettings); + /// <inheritdoc /> + protected override void MergeData(MetadataResult<Audio> source, MetadataResult<Audio> target, MetadataField[] lockedFields, bool replaceData, bool mergeMetadataSettings) + { + base.MergeData(source, target, lockedFields, replaceData, mergeMetadataSettings); - var sourceItem = source.Item; - var targetItem = target.Item; + var sourceItem = source.Item; + var targetItem = target.Item; - if (replaceData || targetItem.Artists.Count == 0) - { - targetItem.Artists = sourceItem.Artists; - } - else - { - targetItem.Artists = targetItem.Artists.Concat(sourceItem.Artists).Distinct(StringComparer.OrdinalIgnoreCase).ToArray(); - } - - if (replaceData || string.IsNullOrEmpty(targetItem.Album)) - { - targetItem.Album = sourceItem.Album; - } + if (replaceData || targetItem.Artists.Count == 0) + { + targetItem.Artists = sourceItem.Artists; + } + else + { + targetItem.Artists = targetItem.Artists.Concat(sourceItem.Artists).Distinct(StringComparer.OrdinalIgnoreCase).ToArray(); + } - SetProviderId(sourceItem, targetItem, replaceData, MetadataProvider.MusicBrainzAlbumArtist); - SetProviderId(sourceItem, targetItem, replaceData, MetadataProvider.MusicBrainzAlbum); - SetProviderId(sourceItem, targetItem, replaceData, MetadataProvider.MusicBrainzReleaseGroup); + if (replaceData || string.IsNullOrEmpty(targetItem.Album)) + { + targetItem.Album = sourceItem.Album; } + + SetProviderId(sourceItem, targetItem, replaceData, MetadataProvider.MusicBrainzAlbumArtist); + SetProviderId(sourceItem, targetItem, replaceData, MetadataProvider.MusicBrainzAlbum); + SetProviderId(sourceItem, targetItem, replaceData, MetadataProvider.MusicBrainzReleaseGroup); } } diff --git a/MediaBrowser.Providers/Music/MusicVideoMetadataService.cs b/MediaBrowser.Providers/Music/MusicVideoMetadataService.cs index 4022bedc1..f4df1d78d 100644 --- a/MediaBrowser.Providers/Music/MusicVideoMetadataService.cs +++ b/MediaBrowser.Providers/Music/MusicVideoMetadataService.cs @@ -1,56 +1,72 @@ -#pragma warning disable CS1591 - using System; using System.Linq; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.MediaSegments; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.IO; using MediaBrowser.Providers.Manager; using Microsoft.Extensions.Logging; -namespace MediaBrowser.Providers.Music +namespace MediaBrowser.Providers.Music; + +/// <summary> +/// Service to manage music video metadata. +/// </summary> +public class MusicVideoMetadataService : MetadataService<MusicVideo, MusicVideoInfo> { - public class MusicVideoMetadataService : MetadataService<MusicVideo, MusicVideoInfo> + /// <summary> + /// Initializes a new instance of the <see cref="MusicVideoMetadataService"/> 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> + /// <param name="pathManager">Instance of the <see cref="IPathManager"/> interface.</param> + /// <param name="keyframeManager">Instance of the <see cref="IKeyframeManager"/> interface.</param> + /// <param name="mediaSegmentManager">Instance of the <see cref="IMediaSegmentManager"/> interface.</param> + public MusicVideoMetadataService( + IServerConfigurationManager serverConfigurationManager, + ILogger<MusicVideoMetadataService> logger, + IProviderManager providerManager, + IFileSystem fileSystem, + ILibraryManager libraryManager, + IPathManager pathManager, + IKeyframeManager keyframeManager, + IMediaSegmentManager mediaSegmentManager) + : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager, pathManager, keyframeManager, mediaSegmentManager) { - public MusicVideoMetadataService( - IServerConfigurationManager serverConfigurationManager, - ILogger<MusicVideoMetadataService> logger, - IProviderManager providerManager, - IFileSystem fileSystem, - ILibraryManager libraryManager) - : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager) - { - } + } - /// <inheritdoc /> - protected override void MergeData( - MetadataResult<MusicVideo> source, - MetadataResult<MusicVideo> target, - MetadataField[] lockedFields, - bool replaceData, - bool mergeMetadataSettings) - { - base.MergeData(source, target, lockedFields, replaceData, mergeMetadataSettings); + /// <inheritdoc /> + protected override void MergeData( + MetadataResult<MusicVideo> source, + MetadataResult<MusicVideo> target, + MetadataField[] lockedFields, + bool replaceData, + bool mergeMetadataSettings) + { + base.MergeData(source, target, lockedFields, replaceData, mergeMetadataSettings); - var sourceItem = source.Item; - var targetItem = target.Item; + var sourceItem = source.Item; + var targetItem = target.Item; - if (replaceData || string.IsNullOrEmpty(targetItem.Album)) - { - targetItem.Album = sourceItem.Album; - } + if (replaceData || string.IsNullOrEmpty(targetItem.Album)) + { + targetItem.Album = sourceItem.Album; + } - if (replaceData || targetItem.Artists.Count == 0) - { - targetItem.Artists = sourceItem.Artists; - } - else - { - targetItem.Artists = targetItem.Artists.Concat(sourceItem.Artists).Distinct(StringComparer.OrdinalIgnoreCase).ToArray(); - } + if (replaceData || targetItem.Artists.Count == 0) + { + targetItem.Artists = sourceItem.Artists; + } + else + { + targetItem.Artists = targetItem.Artists.Concat(sourceItem.Artists).Distinct(StringComparer.OrdinalIgnoreCase).ToArray(); } } } |
