CollectionImageProvider.cs 2.9 KB

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