CollectionFolderImageProvider.cs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. using MediaBrowser.Common.Configuration;
  2. using MediaBrowser.Controller.Drawing;
  3. using MediaBrowser.Controller.Entities;
  4. using MediaBrowser.Controller.Entities.Audio;
  5. using MediaBrowser.Controller.Entities.TV;
  6. using MediaBrowser.Controller.Providers;
  7. using MediaBrowser.Model.Entities;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.IO;
  11. using System.Linq;
  12. using System.Threading.Tasks;
  13. using Emby.Server.Implementations.Images;
  14. using MediaBrowser.Model.IO;
  15. using MediaBrowser.Controller.Collections;
  16. using MediaBrowser.Controller.Dto;
  17. using MediaBrowser.Controller.Entities.Movies;
  18. using MediaBrowser.Controller.IO;
  19. using MediaBrowser.Controller.Library;
  20. using MediaBrowser.Model.Extensions;
  21. using MediaBrowser.Model.Querying;
  22. namespace Emby.Server.Implementations.UserViews
  23. {
  24. public class CollectionFolderImageProvider : BaseDynamicImageProvider<CollectionFolder>
  25. {
  26. public CollectionFolderImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IImageProcessor imageProcessor) : base(fileSystem, providerManager, applicationPaths, imageProcessor)
  27. {
  28. }
  29. public override IEnumerable<ImageType> GetSupportedImages(IHasMetadata item)
  30. {
  31. return new List<ImageType>
  32. {
  33. ImageType.Primary
  34. };
  35. }
  36. protected override List<BaseItem> GetItemsWithImages(IHasMetadata item)
  37. {
  38. var view = (CollectionFolder)item;
  39. var recursive = !new[] { CollectionType.Playlists, CollectionType.Channels }.Contains(view.CollectionType ?? string.Empty, StringComparer.OrdinalIgnoreCase);
  40. var result = view.GetItemList(new InternalItemsQuery
  41. {
  42. CollapseBoxSetItems = false,
  43. Recursive = recursive,
  44. ExcludeItemTypes = new[] { "UserView", "CollectionFolder", "Playlist" },
  45. DtoOptions = new DtoOptions(false)
  46. });
  47. var items = result.Select(i =>
  48. {
  49. var episode = i as Episode;
  50. if (episode != null)
  51. {
  52. var series = episode.Series;
  53. if (series != null)
  54. {
  55. return series;
  56. }
  57. return episode;
  58. }
  59. var season = i as Season;
  60. if (season != null)
  61. {
  62. var series = season.Series;
  63. if (series != null)
  64. {
  65. return series;
  66. }
  67. return season;
  68. }
  69. var audio = i as Audio;
  70. if (audio != null)
  71. {
  72. var album = audio.AlbumEntity;
  73. if (album != null && album.HasImage(ImageType.Primary))
  74. {
  75. return album;
  76. }
  77. }
  78. return i;
  79. }).DistinctBy(i => i.Id);
  80. return GetFinalItems(items.Where(i => i.HasImage(ImageType.Primary) || i.HasImage(ImageType.Thumb)), 8);
  81. }
  82. protected override bool Supports(IHasMetadata item)
  83. {
  84. return item is CollectionFolder;
  85. }
  86. protected override string CreateImage(IHasMetadata item, List<BaseItem> itemsWithImages, string outputPathWithoutExtension, ImageType imageType, int imageIndex)
  87. {
  88. var outputPath = Path.ChangeExtension(outputPathWithoutExtension, ".png");
  89. if (imageType == ImageType.Primary)
  90. {
  91. if (itemsWithImages.Count == 0)
  92. {
  93. return null;
  94. }
  95. return CreateThumbCollage(item, itemsWithImages, outputPath, 960, 540);
  96. }
  97. return base.CreateImage(item, itemsWithImages, outputPath, imageType, imageIndex);
  98. }
  99. }
  100. public class ManualCollectionFolderImageProvider : BaseDynamicImageProvider<ManualCollectionsFolder>
  101. {
  102. private readonly ILibraryManager _libraryManager;
  103. public ManualCollectionFolderImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IImageProcessor imageProcessor, ILibraryManager libraryManager) : base(fileSystem, providerManager, applicationPaths, imageProcessor)
  104. {
  105. _libraryManager = libraryManager;
  106. }
  107. public override IEnumerable<ImageType> GetSupportedImages(IHasMetadata item)
  108. {
  109. return new List<ImageType>
  110. {
  111. ImageType.Primary
  112. };
  113. }
  114. protected override List<BaseItem> GetItemsWithImages(IHasMetadata item)
  115. {
  116. var view = (ManualCollectionsFolder)item;
  117. var recursive = !new[] { CollectionType.Playlists, CollectionType.Channels }.Contains(view.CollectionType ?? string.Empty, StringComparer.OrdinalIgnoreCase);
  118. var items = _libraryManager.GetItemList(new InternalItemsQuery
  119. {
  120. Recursive = recursive,
  121. IncludeItemTypes = new[] { typeof(BoxSet).Name },
  122. Limit = 20,
  123. SortBy = new[] { ItemSortBy.Random },
  124. DtoOptions = new DtoOptions(false)
  125. });
  126. return GetFinalItems(items.Where(i => i.HasImage(ImageType.Primary) || i.HasImage(ImageType.Thumb)), 8);
  127. }
  128. protected override bool Supports(IHasMetadata item)
  129. {
  130. return item is ManualCollectionsFolder;
  131. }
  132. protected override string CreateImage(IHasMetadata item, List<BaseItem> itemsWithImages, string outputPathWithoutExtension, ImageType imageType, int imageIndex)
  133. {
  134. var outputPath = Path.ChangeExtension(outputPathWithoutExtension, ".png");
  135. if (imageType == ImageType.Primary)
  136. {
  137. if (itemsWithImages.Count == 0)
  138. {
  139. return null;
  140. }
  141. return CreateThumbCollage(item, itemsWithImages, outputPath, 960, 540);
  142. }
  143. return base.CreateImage(item, itemsWithImages, outputPath, imageType, imageIndex);
  144. }
  145. }
  146. }