CollectionImageProvider.cs 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #pragma warning disable CS1591
  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. if (subItem is Episode episode)
  43. {
  44. var series = episode.Series;
  45. if (series != null && series.HasImage(ImageType.Primary))
  46. {
  47. return series;
  48. }
  49. }
  50. if (subItem.HasImage(ImageType.Primary))
  51. {
  52. return subItem;
  53. }
  54. var parent = subItem.GetOwner() ?? subItem.GetParent();
  55. if (parent != null && parent.HasImage(ImageType.Primary))
  56. {
  57. if (parent is MusicAlbum)
  58. {
  59. return parent;
  60. }
  61. }
  62. return null;
  63. })
  64. .Where(i => i != null)
  65. .GroupBy(x => x.Id)
  66. .Select(x => x.First())
  67. .ToList();
  68. }
  69. protected override string CreateImage(BaseItem item, IReadOnlyCollection<BaseItem> itemsWithImages, string outputPathWithoutExtension, ImageType imageType, int imageIndex)
  70. {
  71. return CreateSingleImage(itemsWithImages, outputPathWithoutExtension, ImageType.Primary);
  72. }
  73. }
  74. }