aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Providers/Music/AlbumMetadataService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Providers/Music/AlbumMetadataService.cs')
-rw-r--r--MediaBrowser.Providers/Music/AlbumMetadataService.cs117
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);