CollectionImageProvider.cs 2.9 KB

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