ImageFromMediaLocationProvider.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel.Composition;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Threading.Tasks;
  7. using MediaBrowser.Controller.Events;
  8. using MediaBrowser.Model.Entities;
  9. namespace MediaBrowser.Controller.Providers
  10. {
  11. [Export(typeof(BaseMetadataProvider))]
  12. public class ImageFromMediaLocationProvider : BaseMetadataProvider
  13. {
  14. public override bool Supports(BaseEntity item)
  15. {
  16. return item is BaseItem;
  17. }
  18. public override Task Fetch(BaseEntity item, ItemResolveEventArgs args)
  19. {
  20. return Task.Run(() =>
  21. {
  22. if (args.IsFolder)
  23. {
  24. PopulateImages(item as BaseItem, args);
  25. }
  26. });
  27. }
  28. /// <summary>
  29. /// Fills in image paths based on files win the folder
  30. /// </summary>
  31. private void PopulateImages(BaseItem item, ItemResolveEventArgs args)
  32. {
  33. List<string> backdropFiles = new List<string>();
  34. foreach (KeyValuePair<string, FileAttributes> file in args.FileSystemChildren)
  35. {
  36. if (file.Value.HasFlag(FileAttributes.Directory))
  37. {
  38. continue;
  39. }
  40. string filePath = file.Key;
  41. string ext = Path.GetExtension(filePath);
  42. // Only support png and jpg files
  43. if (!ext.EndsWith("png", StringComparison.OrdinalIgnoreCase) && !ext.EndsWith("jpg", StringComparison.OrdinalIgnoreCase))
  44. {
  45. continue;
  46. }
  47. string name = Path.GetFileNameWithoutExtension(filePath);
  48. if (name.Equals("folder", StringComparison.OrdinalIgnoreCase))
  49. {
  50. item.PrimaryImagePath = filePath;
  51. }
  52. else if (name.StartsWith("backdrop", StringComparison.OrdinalIgnoreCase))
  53. {
  54. backdropFiles.Add(filePath);
  55. }
  56. if (name.Equals("logo", StringComparison.OrdinalIgnoreCase))
  57. {
  58. item.LogoImagePath = filePath;
  59. }
  60. if (name.Equals("banner", StringComparison.OrdinalIgnoreCase))
  61. {
  62. item.BannerImagePath = filePath;
  63. }
  64. if (name.Equals("art", StringComparison.OrdinalIgnoreCase))
  65. {
  66. item.ArtImagePath = filePath;
  67. }
  68. if (name.Equals("thumb", StringComparison.OrdinalIgnoreCase))
  69. {
  70. item.ThumbnailImagePath = filePath;
  71. }
  72. }
  73. if (backdropFiles.Any())
  74. {
  75. item.BackdropImagePaths = backdropFiles;
  76. }
  77. }
  78. }
  79. }