SeriesMetadataService.cs 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using MediaBrowser.Common.IO;
  2. using MediaBrowser.Controller.Configuration;
  3. using MediaBrowser.Controller.Entities.TV;
  4. using MediaBrowser.Controller.Library;
  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. namespace MediaBrowser.Providers.TV
  12. {
  13. public class SeriesMetadataService : MetadataService<Series, SeriesInfo>
  14. {
  15. private readonly ILibraryManager _libraryManager;
  16. public SeriesMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager)
  17. : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
  18. {
  19. _libraryManager = libraryManager;
  20. }
  21. /// <summary>
  22. /// Merges the specified source.
  23. /// </summary>
  24. /// <param name="source">The source.</param>
  25. /// <param name="target">The target.</param>
  26. /// <param name="lockedFields">The locked fields.</param>
  27. /// <param name="replaceData">if set to <c>true</c> [replace data].</param>
  28. /// <param name="mergeMetadataSettings">if set to <c>true</c> [merge metadata settings].</param>
  29. protected override void MergeData(Series source, Series target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
  30. {
  31. ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
  32. if (replaceData || target.SeasonCount == 0)
  33. {
  34. target.SeasonCount = source.SeasonCount;
  35. }
  36. if (replaceData || string.IsNullOrEmpty(target.AirTime))
  37. {
  38. target.AirTime = source.AirTime;
  39. }
  40. if (replaceData || !target.Status.HasValue)
  41. {
  42. target.Status = source.Status;
  43. }
  44. if (replaceData || target.AirDays.Count == 0)
  45. {
  46. target.AirDays = source.AirDays;
  47. }
  48. if (mergeMetadataSettings)
  49. {
  50. target.DisplaySpecialsWithSeasons = source.DisplaySpecialsWithSeasons;
  51. }
  52. }
  53. protected override ItemUpdateType BeforeSave(Series item)
  54. {
  55. var updateType = base.BeforeSave(item);
  56. var episodes = item.RecursiveChildren
  57. .OfType<Episode>()
  58. .ToList();
  59. var dateLastEpisodeAdded = item.DateLastEpisodeAdded;
  60. item.DateLastEpisodeAdded = episodes
  61. .Where(i => i.LocationType != LocationType.Virtual)
  62. .Select(i => i.DateCreated)
  63. .OrderByDescending(i => i)
  64. .FirstOrDefault();
  65. if (dateLastEpisodeAdded != item.DateLastEpisodeAdded)
  66. {
  67. updateType = updateType | ItemUpdateType.MetadataImport;
  68. }
  69. return updateType;
  70. }
  71. }
  72. }