BoxSetMetadataService.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using MediaBrowser.Controller.Configuration;
  4. using MediaBrowser.Controller.Entities;
  5. using MediaBrowser.Controller.Entities.Movies;
  6. using MediaBrowser.Controller.IO;
  7. using MediaBrowser.Controller.Library;
  8. using MediaBrowser.Controller.Persistence;
  9. using MediaBrowser.Controller.Providers;
  10. using MediaBrowser.Model.Entities;
  11. using MediaBrowser.Model.IO;
  12. using MediaBrowser.Providers.Manager;
  13. using Microsoft.Extensions.Logging;
  14. namespace MediaBrowser.Providers.BoxSets;
  15. /// <summary>
  16. /// Service to manage boxset metadata.
  17. /// </summary>
  18. public class BoxSetMetadataService : MetadataService<BoxSet, BoxSetInfo>
  19. {
  20. /// <summary>
  21. /// Initializes a new instance of the <see cref="BoxSetMetadataService"/> class.
  22. /// </summary>
  23. /// <param name="serverConfigurationManager">Instance of the <see cref="IServerConfigurationManager"/>.</param>
  24. /// <param name="logger">Instance of the <see cref="ILogger"/> interface.</param>
  25. /// <param name="providerManager">Instance of the <see cref="IProviderManager"/> interface.</param>
  26. /// <param name="fileSystem">Instance of the <see cref="IFileSystem"/> interface.</param>
  27. /// <param name="libraryManager">Instance of the <see cref="ILibraryManager"/> interface.</param>
  28. /// <param name="externalDataManager">Instance of the <see cref="IExternalDataManager"/> interface.</param>
  29. /// <param name="itemRepository">Instance of the <see cref="IItemRepository"/> interface.</param>
  30. public BoxSetMetadataService(
  31. IServerConfigurationManager serverConfigurationManager,
  32. ILogger<BoxSetMetadataService> logger,
  33. IProviderManager providerManager,
  34. IFileSystem fileSystem,
  35. ILibraryManager libraryManager,
  36. IExternalDataManager externalDataManager,
  37. IItemRepository itemRepository)
  38. : base(serverConfigurationManager, logger, providerManager, fileSystem, libraryManager, externalDataManager, itemRepository)
  39. {
  40. }
  41. /// <inheritdoc />
  42. protected override bool EnableUpdatingGenresFromChildren => true;
  43. /// <inheritdoc />
  44. protected override bool EnableUpdatingOfficialRatingFromChildren => true;
  45. /// <inheritdoc />
  46. protected override bool EnableUpdatingStudiosFromChildren => true;
  47. /// <inheritdoc />
  48. protected override bool EnableUpdatingPremiereDateFromChildren => true;
  49. /// <inheritdoc />
  50. protected override IReadOnlyList<BaseItem> GetChildrenForMetadataUpdates(BoxSet item)
  51. {
  52. return item.GetLinkedChildren();
  53. }
  54. /// <inheritdoc />
  55. protected override void MergeData(MetadataResult<BoxSet> source, MetadataResult<BoxSet> target, MetadataField[] lockedFields, bool replaceData, bool mergeMetadataSettings)
  56. {
  57. base.MergeData(source, target, lockedFields, replaceData, mergeMetadataSettings);
  58. var sourceItem = source.Item;
  59. var targetItem = target.Item;
  60. if (mergeMetadataSettings)
  61. {
  62. // TODO: Change to only replace when currently empty or requested. This is currently not done because the metadata service is not handling attaching collection items based on the provider responses
  63. targetItem.LinkedChildren = sourceItem.LinkedChildren.Concat(targetItem.LinkedChildren).DistinctBy(i => i.Path).ToArray();
  64. }
  65. }
  66. /// <inheritdoc />
  67. protected override ItemUpdateType BeforeSaveInternal(BoxSet item, bool isFullRefresh, ItemUpdateType updateType)
  68. {
  69. var updatedType = base.BeforeSaveInternal(item, isFullRefresh, updateType);
  70. var libraryFolderIds = item.GetLibraryFolderIds();
  71. var itemLibraryFolderIds = item.LibraryFolderIds;
  72. if (itemLibraryFolderIds is null || !libraryFolderIds.SequenceEqual(itemLibraryFolderIds))
  73. {
  74. item.LibraryFolderIds = libraryFolderIds;
  75. updatedType |= ItemUpdateType.MetadataImport;
  76. }
  77. return updatedType;
  78. }
  79. }