CollectionFolderImageProvider.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. using MediaBrowser.Common.IO;
  2. using MediaBrowser.Controller.Configuration;
  3. using MediaBrowser.Controller.Entities;
  4. using MediaBrowser.Controller.Library;
  5. using MediaBrowser.Controller.Providers;
  6. using MediaBrowser.Model.Entities;
  7. using MediaBrowser.Model.Logging;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.IO;
  11. using System.Linq;
  12. namespace MediaBrowser.Providers
  13. {
  14. public class CollectionFolderImageProvider : ImageFromMediaLocationProvider
  15. {
  16. public CollectionFolderImageProvider(ILogManager logManager, IServerConfigurationManager configurationManager, IFileSystem fileSystem)
  17. : base(logManager, configurationManager, fileSystem)
  18. {
  19. }
  20. public override bool Supports(BaseItem item)
  21. {
  22. return item is CollectionFolder && item.LocationType == LocationType.FileSystem;
  23. }
  24. public override MetadataProviderPriority Priority
  25. {
  26. get { return MetadataProviderPriority.Second; }
  27. }
  28. protected override FileSystemInfo GetImage(BaseItem item, ItemResolveArgs args, string filenameWithoutExtension)
  29. {
  30. return item.ResolveArgs.PhysicalLocations
  31. .Select(i => GetImageFromLocation(i, filenameWithoutExtension))
  32. .FirstOrDefault(i => i != null);
  33. }
  34. protected override Guid GetFileSystemStamp(IEnumerable<BaseItem> items)
  35. {
  36. var files = items.SelectMany(i => i.ResolveArgs.PhysicalLocations)
  37. .Select(i => new DirectoryInfo(i))
  38. .SelectMany(i => i.EnumerateFiles("*", SearchOption.TopDirectoryOnly))
  39. .Where(i =>
  40. {
  41. var ext = i.Extension;
  42. return !string.IsNullOrEmpty(ext) &&
  43. BaseItem.SupportedImageExtensions.Contains(ext, StringComparer.OrdinalIgnoreCase);
  44. })
  45. .ToList();
  46. return GetFileSystemStamp(files);
  47. }
  48. }
  49. }