CollectionImageProvider.cs 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. .OrderBy(i => Guid.NewGuid())
  69. .ToList();
  70. }
  71. protected override string CreateImage(BaseItem item, IReadOnlyCollection<BaseItem> itemsWithImages, string outputPathWithoutExtension, ImageType imageType, int imageIndex)
  72. {
  73. return CreateSingleImage(itemsWithImages, outputPathWithoutExtension, ImageType.Primary);
  74. }
  75. }
  76. }