diff options
Diffstat (limited to 'MediaBrowser.Providers/Music/AlbumMetadataService.cs')
| -rw-r--r-- | MediaBrowser.Providers/Music/AlbumMetadataService.cs | 117 |
1 files changed, 40 insertions, 77 deletions
diff --git a/MediaBrowser.Providers/Music/AlbumMetadataService.cs b/MediaBrowser.Providers/Music/AlbumMetadataService.cs index 48f520681a..338fc1c6d7 100644 --- a/MediaBrowser.Providers/Music/AlbumMetadataService.cs +++ b/MediaBrowser.Providers/Music/AlbumMetadataService.cs @@ -11,72 +11,69 @@ using System.Linq; using System.Threading.Tasks; using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; +using MediaBrowser.Controller.Entities; namespace MediaBrowser.Providers.Music { public class AlbumMetadataService : MetadataService<MusicAlbum, AlbumInfo> { - protected override ItemUpdateType BeforeSaveInternal(MusicAlbum item, bool isFullRefresh, ItemUpdateType currentUpdateType) + protected override IList<BaseItem> GetChildrenForMetadataUpdates(MusicAlbum item) { - var updateType = base.BeforeSaveInternal(item, isFullRefresh, currentUpdateType); + return item.GetRecursiveChildren(i => i is Audio) + .ToList(); + } + + protected override ItemUpdateType UpdateMetadataFromChildren(MusicAlbum item, IList<BaseItem> children, bool isFullRefresh, ItemUpdateType currentUpdateType) + { + var updateType = base.UpdateMetadataFromChildren(item, children, isFullRefresh, currentUpdateType); if (isFullRefresh || currentUpdateType > ItemUpdateType.None) { - if (!item.IsLocked) + if (!item.LockedFields.Contains(MetadataFields.Name)) { - var songs = item.GetRecursiveChildren(i => i is Audio) - .Cast<Audio>() - .ToList(); + var name = children.Select(i => i.Album).FirstOrDefault(i => !string.IsNullOrEmpty(i)); - if (!item.LockedFields.Contains(MetadataFields.Genres)) + if (!string.IsNullOrEmpty(name)) { - var currentList = item.Genres.ToList(); - - item.Genres = songs.SelectMany(i => i.Genres) - .Distinct(StringComparer.OrdinalIgnoreCase) - .ToList(); - - if (currentList.Count != item.Genres.Count || !currentList.OrderBy(i => i).SequenceEqual(item.Genres.OrderBy(i => i), StringComparer.OrdinalIgnoreCase)) + if (!string.Equals(item.Name, name, StringComparison.Ordinal)) { + item.Name = name; updateType = updateType | ItemUpdateType.MetadataEdit; } } + } - if (!item.LockedFields.Contains(MetadataFields.Studios)) - { - var currentList = item.Studios; - - item.Studios = songs.SelectMany(i => i.Studios) - .Distinct(StringComparer.OrdinalIgnoreCase) - .ToArray(); + var songs = children.Cast<Audio>().ToArray(); - if (currentList.Length != item.Studios.Length || !currentList.OrderBy(i => i).SequenceEqual(item.Studios.OrderBy(i => i), StringComparer.OrdinalIgnoreCase)) - { - updateType = updateType | ItemUpdateType.MetadataEdit; - } - } + updateType = updateType | SetAlbumArtistFromSongs(item, songs); + updateType = updateType | SetArtistsFromSongs(item, songs); + } - if (!item.LockedFields.Contains(MetadataFields.Name)) - { - var name = songs.Select(i => i.Album).FirstOrDefault(i => !string.IsNullOrEmpty(i)); + return updateType; + } - if (!string.IsNullOrEmpty(name)) - { - if (!string.Equals(item.Name, name, StringComparison.Ordinal)) - { - item.Name = name; - updateType = updateType | ItemUpdateType.MetadataEdit; - } - } - } + protected override bool EnableUpdatingPremiereDateFromChildren + { + get + { + return true; + } + } - updateType = updateType | SetAlbumArtistFromSongs(item, songs); - updateType = updateType | SetArtistsFromSongs(item, songs); - updateType = updateType | SetDateFromSongs(item, songs); - } + protected override bool EnableUpdatingGenresFromChildren + { + get + { + return true; } + } - return updateType; + protected override bool EnableUpdatingStudiosFromChildren + { + get + { + return true; + } } private ItemUpdateType SetAlbumArtistFromSongs(MusicAlbum item, IEnumerable<Audio> songs) @@ -117,40 +114,6 @@ namespace MediaBrowser.Providers.Music return updateType; } - private ItemUpdateType SetDateFromSongs(MusicAlbum item, List<Audio> songs) - { - var updateType = ItemUpdateType.None; - - var date = songs.Select(i => i.PremiereDate) - .FirstOrDefault(i => i.HasValue); - - var originalPremiereDate = item.PremiereDate; - var originalProductionYear = item.ProductionYear; - - if (date.HasValue) - { - item.PremiereDate = date.Value; - item.ProductionYear = date.Value.Year; - } - else - { - var year = songs.Select(i => i.ProductionYear ?? 1800).FirstOrDefault(i => i != 1800); - - if (year != 1800) - { - item.ProductionYear = year; - } - } - - if ((originalPremiereDate ?? DateTime.MinValue) != (item.PremiereDate ?? DateTime.MinValue) || - (originalProductionYear ?? -1) != (item.ProductionYear ?? -1)) - { - updateType = updateType | ItemUpdateType.MetadataEdit; - } - - return updateType; - } - protected override void MergeData(MetadataResult<MusicAlbum> source, MetadataResult<MusicAlbum> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings) { ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings); |
