PlaylistMetadataService.cs 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. using System;
  2. using MediaBrowser.Controller.Configuration;
  3. using MediaBrowser.Controller.Library;
  4. using MediaBrowser.Controller.Playlists;
  5. using MediaBrowser.Controller.Providers;
  6. using MediaBrowser.Model.Entities;
  7. using MediaBrowser.Model.Logging;
  8. using MediaBrowser.Providers.Manager;
  9. using System.Collections.Generic;
  10. using System.Linq;
  11. using MediaBrowser.Controller.IO;
  12. using MediaBrowser.Model.IO;
  13. namespace MediaBrowser.Providers.Playlists
  14. {
  15. class PlaylistMetadataService : MetadataService<Playlist, ItemLookupInfo>
  16. {
  17. protected override void MergeData(MetadataResult<Playlist> source, MetadataResult<Playlist> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings)
  18. {
  19. ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
  20. var sourceItem = source.Item;
  21. var targetItem = target.Item;
  22. if (replaceData || string.IsNullOrEmpty(targetItem.PlaylistMediaType))
  23. {
  24. targetItem.PlaylistMediaType = sourceItem.PlaylistMediaType;
  25. }
  26. if (mergeMetadataSettings)
  27. {
  28. targetItem.LinkedChildren = sourceItem.LinkedChildren;
  29. targetItem.Shares = sourceItem.Shares;
  30. }
  31. }
  32. protected override ItemUpdateType BeforeSaveInternal(Playlist item, bool isFullRefresh, ItemUpdateType currentUpdateType)
  33. {
  34. var updateType = base.BeforeSaveInternal(item, isFullRefresh, currentUpdateType);
  35. if (isFullRefresh || currentUpdateType > ItemUpdateType.None)
  36. {
  37. if (!item.IsLocked && !item.LockedFields.Contains(MetadataFields.Genres))
  38. {
  39. var currentList = item.Genres;
  40. item.Genres = item.GetLinkedChildren().SelectMany(i => i.Genres)
  41. .Distinct(StringComparer.OrdinalIgnoreCase)
  42. .ToList();
  43. if (currentList.Count != item.Genres.Count || !currentList.OrderBy(i => i).SequenceEqual(item.Genres.OrderBy(i => i), StringComparer.OrdinalIgnoreCase))
  44. {
  45. updateType = updateType | ItemUpdateType.MetadataEdit;
  46. }
  47. }
  48. }
  49. return updateType;
  50. }
  51. public PlaylistMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager)
  52. {
  53. }
  54. }
  55. }