CollectionFolderImageProvider.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #nullable disable
  2. #pragma warning disable CS1591
  3. using System;
  4. using System.Collections.Generic;
  5. using System.IO;
  6. using Jellyfin.Data.Enums;
  7. using Jellyfin.Database.Implementations.Enums;
  8. using MediaBrowser.Common.Configuration;
  9. using MediaBrowser.Controller.Drawing;
  10. using MediaBrowser.Controller.Dto;
  11. using MediaBrowser.Controller.Entities;
  12. using MediaBrowser.Controller.Providers;
  13. using MediaBrowser.Model.Entities;
  14. using MediaBrowser.Model.IO;
  15. using MediaBrowser.Model.Querying;
  16. namespace Emby.Server.Implementations.Images
  17. {
  18. public class CollectionFolderImageProvider : BaseDynamicImageProvider<CollectionFolder>
  19. {
  20. public CollectionFolderImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IImageProcessor imageProcessor) : base(fileSystem, providerManager, applicationPaths, imageProcessor)
  21. {
  22. }
  23. protected override IReadOnlyList<BaseItem> GetItemsWithImages(BaseItem item)
  24. {
  25. var view = (CollectionFolder)item;
  26. var viewType = view.CollectionType;
  27. BaseItemKind[] includeItemTypes;
  28. switch (viewType)
  29. {
  30. case CollectionType.movies:
  31. includeItemTypes = new[] { BaseItemKind.Movie };
  32. break;
  33. case CollectionType.tvshows:
  34. includeItemTypes = new[] { BaseItemKind.Series };
  35. break;
  36. case CollectionType.music:
  37. includeItemTypes = new[] { BaseItemKind.MusicAlbum };
  38. break;
  39. case CollectionType.musicvideos:
  40. includeItemTypes = new[] { BaseItemKind.MusicVideo };
  41. break;
  42. case CollectionType.books:
  43. includeItemTypes = new[] { BaseItemKind.Book, BaseItemKind.AudioBook };
  44. break;
  45. case CollectionType.boxsets:
  46. includeItemTypes = new[] { BaseItemKind.BoxSet };
  47. break;
  48. case CollectionType.homevideos:
  49. case CollectionType.photos:
  50. includeItemTypes = new[] { BaseItemKind.Video, BaseItemKind.Photo };
  51. break;
  52. default:
  53. includeItemTypes = new[] { BaseItemKind.Video, BaseItemKind.Audio, BaseItemKind.Photo, BaseItemKind.Movie, BaseItemKind.Series };
  54. break;
  55. }
  56. var recursive = viewType != CollectionType.playlists;
  57. return view.GetItemList(new InternalItemsQuery
  58. {
  59. CollapseBoxSetItems = false,
  60. Recursive = recursive,
  61. DtoOptions = new DtoOptions(false),
  62. ImageTypes = new[] { ImageType.Primary },
  63. Limit = 8,
  64. OrderBy = new[]
  65. {
  66. (ItemSortBy.Random, SortOrder.Ascending)
  67. },
  68. IncludeItemTypes = includeItemTypes
  69. });
  70. }
  71. protected override bool Supports(BaseItem item)
  72. {
  73. return item is CollectionFolder;
  74. }
  75. protected override string CreateImage(BaseItem item, IReadOnlyCollection<BaseItem> itemsWithImages, string outputPathWithoutExtension, ImageType imageType, int imageIndex)
  76. {
  77. var outputPath = Path.ChangeExtension(outputPathWithoutExtension, ".png");
  78. if (imageType == ImageType.Primary)
  79. {
  80. if (itemsWithImages.Count == 0)
  81. {
  82. return null;
  83. }
  84. return CreateThumbCollage(item, itemsWithImages, outputPath, 960, 540);
  85. }
  86. return base.CreateImage(item, itemsWithImages, outputPath, imageType, imageIndex);
  87. }
  88. }
  89. }