CollectionImageProvider.cs 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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.Extensions;
  14. using MediaBrowser.Model.IO;
  15. namespace Emby.Server.Implementations.Collections
  16. {
  17. public class CollectionImageProvider : BaseDynamicImageProvider<BoxSet>
  18. {
  19. public CollectionImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IImageProcessor imageProcessor) : base(fileSystem, providerManager, applicationPaths, imageProcessor)
  20. {
  21. }
  22. protected override bool Supports(BaseItem item)
  23. {
  24. // Right now this is the only way to prevent this image from getting created ahead of internet image providers
  25. if (!item.IsLocked)
  26. {
  27. return false;
  28. }
  29. return base.Supports(item);
  30. }
  31. protected override List<BaseItem> GetItemsWithImages(BaseItem item)
  32. {
  33. var playlist = (BoxSet)item;
  34. return playlist.Children.Concat(playlist.GetLinkedChildren())
  35. .Select(i =>
  36. {
  37. var subItem = i;
  38. var episode = subItem as Episode;
  39. if (episode != null)
  40. {
  41. var series = episode.Series;
  42. if (series != null && series.HasImage(ImageType.Primary))
  43. {
  44. return series;
  45. }
  46. }
  47. if (subItem.HasImage(ImageType.Primary))
  48. {
  49. return subItem;
  50. }
  51. var parent = subItem.GetOwner() ?? subItem.GetParent();
  52. if (parent != null && parent.HasImage(ImageType.Primary))
  53. {
  54. if (parent is MusicAlbum)
  55. {
  56. return parent;
  57. }
  58. }
  59. return null;
  60. })
  61. .Where(i => i != null)
  62. .DistinctBy(i => i.Id)
  63. .OrderBy(i => Guid.NewGuid())
  64. .ToList();
  65. }
  66. protected override string CreateImage(BaseItem item, List<BaseItem> itemsWithImages, string outputPathWithoutExtension, ImageType imageType, int imageIndex)
  67. {
  68. return CreateSingleImage(itemsWithImages, outputPathWithoutExtension, ImageType.Primary);
  69. }
  70. }
  71. }