aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Providers/Playlists/PlaylistMetadataService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Providers/Playlists/PlaylistMetadataService.cs')
-rw-r--r--MediaBrowser.Providers/Playlists/PlaylistMetadataService.cs32
1 files changed, 30 insertions, 2 deletions
diff --git a/MediaBrowser.Providers/Playlists/PlaylistMetadataService.cs b/MediaBrowser.Providers/Playlists/PlaylistMetadataService.cs
index 235fd8c8a..c4ea106fb 100644
--- a/MediaBrowser.Providers/Playlists/PlaylistMetadataService.cs
+++ b/MediaBrowser.Providers/Playlists/PlaylistMetadataService.cs
@@ -1,4 +1,5 @@
-using MediaBrowser.Controller.Configuration;
+using System;
+using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Playlists;
using MediaBrowser.Controller.Providers;
@@ -6,7 +7,7 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Manager;
using System.Collections.Generic;
-
+using System.Linq;
using MediaBrowser.Controller.IO;
using MediaBrowser.Model.IO;
@@ -33,6 +34,33 @@ namespace MediaBrowser.Providers.Playlists
}
}
+ protected override ItemUpdateType BeforeSave(Playlist item, bool isFullRefresh, ItemUpdateType currentUpdateType)
+ {
+ var updateType = base.BeforeSave(item, isFullRefresh, currentUpdateType);
+
+ if (isFullRefresh || currentUpdateType > ItemUpdateType.None)
+ {
+ if (!item.IsLocked && !item.LockedFields.Contains(MetadataFields.Genres))
+ {
+ var items = item.GetLinkedChildren()
+ .ToList();
+
+ var currentList = item.Genres.ToList();
+
+ item.Genres = items.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))
+ {
+ updateType = updateType | ItemUpdateType.MetadataEdit;
+ }
+ }
+ }
+
+ return updateType;
+ }
+
public PlaylistMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager)
{
}