CollectionImageProvider.cs 2.9 KB

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