CollectionImageProvider.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #pragma warning disable CS1591
  2. #pragma warning disable SA1600
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using Emby.Server.Implementations.Images;
  7. using MediaBrowser.Common.Configuration;
  8. using MediaBrowser.Controller.Drawing;
  9. using MediaBrowser.Controller.Entities;
  10. using MediaBrowser.Controller.Entities.Audio;
  11. using MediaBrowser.Controller.Entities.Movies;
  12. using MediaBrowser.Controller.Entities.TV;
  13. using MediaBrowser.Controller.Providers;
  14. using MediaBrowser.Model.Entities;
  15. using MediaBrowser.Model.IO;
  16. namespace Emby.Server.Implementations.Collections
  17. {
  18. public class CollectionImageProvider : BaseDynamicImageProvider<BoxSet>
  19. {
  20. public CollectionImageProvider(
  21. IFileSystem fileSystem,
  22. IProviderManager providerManager,
  23. IApplicationPaths applicationPaths,
  24. IImageProcessor imageProcessor)
  25. : base(fileSystem, providerManager, applicationPaths, imageProcessor)
  26. {
  27. }
  28. protected override bool Supports(BaseItem item)
  29. {
  30. // Right now this is the only way to prevent this image from getting created ahead of internet image providers
  31. if (!item.IsLocked)
  32. {
  33. return false;
  34. }
  35. return base.Supports(item);
  36. }
  37. protected override IReadOnlyList<BaseItem> GetItemsWithImages(BaseItem item)
  38. {
  39. var playlist = (BoxSet)item;
  40. return playlist.Children.Concat(playlist.GetLinkedChildren())
  41. .Select(i =>
  42. {
  43. var subItem = i;
  44. var episode = subItem as Episode;
  45. if (episode != null)
  46. {
  47. var series = episode.Series;
  48. if (series != null && series.HasImage(ImageType.Primary))
  49. {
  50. return series;
  51. }
  52. }
  53. if (subItem.HasImage(ImageType.Primary))
  54. {
  55. return subItem;
  56. }
  57. var parent = subItem.GetOwner() ?? subItem.GetParent();
  58. if (parent != null && parent.HasImage(ImageType.Primary))
  59. {
  60. if (parent is MusicAlbum)
  61. {
  62. return parent;
  63. }
  64. }
  65. return null;
  66. })
  67. .Where(i => i != null)
  68. .GroupBy(x => x.Id)
  69. .Select(x => x.First())
  70. .ToList();
  71. }
  72. protected override string CreateImage(BaseItem item, IReadOnlyCollection<BaseItem> itemsWithImages, string outputPathWithoutExtension, ImageType imageType, int imageIndex)
  73. {
  74. return CreateSingleImage(itemsWithImages, outputPathWithoutExtension, ImageType.Primary);
  75. }
  76. }
  77. }