CollectionImageProvider.cs 3.2 KB

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