CollectionFolderImageProvider.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  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.TV;
  7. using MediaBrowser.Controller.Providers;
  8. using MediaBrowser.Model.Entities;
  9. using MediaBrowser.Server.Implementations.Photos;
  10. using MoreLinq;
  11. using System;
  12. using System.Collections.Generic;
  13. using System.Linq;
  14. using System.Threading.Tasks;
  15. namespace MediaBrowser.Server.Implementations.UserViews
  16. {
  17. public class CollectionFolderImageProvider : BaseDynamicImageProvider<CollectionFolder>
  18. {
  19. public CollectionFolderImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IImageProcessor imageProcessor) : base(fileSystem, providerManager, applicationPaths, imageProcessor)
  20. {
  21. }
  22. public override IEnumerable<ImageType> GetSupportedImages(IHasImages item)
  23. {
  24. return new List<ImageType>
  25. {
  26. ImageType.Primary
  27. };
  28. }
  29. protected override async Task<List<BaseItem>> GetItemsWithImages(IHasImages item)
  30. {
  31. var view = (CollectionFolder)item;
  32. var recursive = !new[] { CollectionType.Playlists, CollectionType.Channels }.Contains(view.CollectionType ?? string.Empty, StringComparer.OrdinalIgnoreCase);
  33. var result = await view.GetItems(new InternalItemsQuery
  34. {
  35. CollapseBoxSetItems = false,
  36. Recursive = recursive,
  37. ExcludeItemTypes = new[] { "UserView", "CollectionFolder", "Playlist" }
  38. }).ConfigureAwait(false);
  39. var items = result.Items.Select(i =>
  40. {
  41. var episode = i as Episode;
  42. if (episode != null)
  43. {
  44. var series = episode.Series;
  45. if (series != null)
  46. {
  47. return series;
  48. }
  49. var episodeSeason = episode.Season;
  50. if (episodeSeason != null)
  51. {
  52. return episodeSeason;
  53. }
  54. return episode;
  55. }
  56. var season = i as Season;
  57. if (season != null)
  58. {
  59. var series = season.Series;
  60. if (series != null)
  61. {
  62. return series;
  63. }
  64. return season;
  65. }
  66. var audio = i as Audio;
  67. if (audio != null)
  68. {
  69. var album = audio.AlbumEntity;
  70. if (album != null && album.HasImage(ImageType.Primary))
  71. {
  72. return album;
  73. }
  74. }
  75. return i;
  76. }).DistinctBy(i => i.Id);
  77. return GetFinalItems(items.Where(i => i.HasImage(ImageType.Primary) || i.HasImage(ImageType.Thumb)).ToList(), 8);
  78. }
  79. public override bool Supports(IHasImages item)
  80. {
  81. return item is CollectionFolder;
  82. }
  83. protected override async Task<bool> CreateImage(IHasImages item, List<BaseItem> itemsWithImages, string outputPath, ImageType imageType, int imageIndex)
  84. {
  85. if (imageType == ImageType.Primary)
  86. {
  87. if (itemsWithImages.Count == 0)
  88. {
  89. return false;
  90. }
  91. return await CreateThumbCollage(item, itemsWithImages, outputPath, 960, 540).ConfigureAwait(false);
  92. }
  93. return await base.CreateImage(item, itemsWithImages, outputPath, imageType, imageIndex).ConfigureAwait(false);
  94. }
  95. }
  96. }