SeriesMetadataService.cs 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using System;
  2. using System.Threading;
  3. using System.Threading.Tasks;
  4. using MediaBrowser.Controller.Configuration;
  5. using MediaBrowser.Controller.Entities.TV;
  6. using MediaBrowser.Controller.Library;
  7. using MediaBrowser.Controller.Providers;
  8. using MediaBrowser.Model.Entities;
  9. using MediaBrowser.Model.Globalization;
  10. using MediaBrowser.Model.IO;
  11. using MediaBrowser.Model.Xml;
  12. using MediaBrowser.Providers.Manager;
  13. using Microsoft.Extensions.Logging;
  14. namespace MediaBrowser.Providers.TV
  15. {
  16. public class SeriesMetadataService : MetadataService<Series, SeriesInfo>
  17. {
  18. private readonly ILocalizationManager _localization;
  19. private readonly IXmlReaderSettingsFactory _xmlSettings;
  20. public SeriesMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager, ILocalizationManager localization, IXmlReaderSettingsFactory xmlSettings) : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager)
  21. {
  22. _localization = localization;
  23. _xmlSettings = xmlSettings;
  24. }
  25. protected override async Task AfterMetadataRefresh(Series item, MetadataRefreshOptions refreshOptions, CancellationToken cancellationToken)
  26. {
  27. await base.AfterMetadataRefresh(item, refreshOptions, cancellationToken).ConfigureAwait(false);
  28. var seasonProvider = new DummySeasonProvider(ServerConfigurationManager, Logger, _localization, LibraryManager, FileSystem);
  29. await seasonProvider.Run(item, cancellationToken).ConfigureAwait(false);
  30. var provider = new MissingEpisodeProvider(Logger,
  31. ServerConfigurationManager,
  32. LibraryManager,
  33. _localization,
  34. FileSystem,
  35. _xmlSettings);
  36. try
  37. {
  38. await provider.Run(item, true, CancellationToken.None).ConfigureAwait(false);
  39. }
  40. catch (Exception ex)
  41. {
  42. Logger.LogError(ex, "Error in DummySeasonProvider");
  43. }
  44. }
  45. protected override bool IsFullLocalMetadata(Series item)
  46. {
  47. if (string.IsNullOrWhiteSpace(item.Overview))
  48. {
  49. return false;
  50. }
  51. if (!item.ProductionYear.HasValue)
  52. {
  53. return false;
  54. }
  55. return base.IsFullLocalMetadata(item);
  56. }
  57. protected override void MergeData(MetadataResult<Series> source, MetadataResult<Series> target, MetadataFields[] lockedFields, bool replaceData, bool mergeMetadataSettings)
  58. {
  59. ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
  60. var sourceItem = source.Item;
  61. var targetItem = target.Item;
  62. if (replaceData || string.IsNullOrEmpty(targetItem.AirTime))
  63. {
  64. targetItem.AirTime = sourceItem.AirTime;
  65. }
  66. if (replaceData || !targetItem.Status.HasValue)
  67. {
  68. targetItem.Status = sourceItem.Status;
  69. }
  70. if (replaceData || targetItem.AirDays == null || targetItem.AirDays.Length == 0)
  71. {
  72. targetItem.AirDays = sourceItem.AirDays;
  73. }
  74. }
  75. }
  76. }