CollectionFolderImageProvider.cs 3.6 KB

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