InternalMetadataFolderImageProvider.cs 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. using System.Collections.Generic;
  2. using System.IO;
  3. using System.Linq;
  4. using MediaBrowser.Controller.Configuration;
  5. using MediaBrowser.Controller.Entities;
  6. using MediaBrowser.Controller.Entities.Audio;
  7. using MediaBrowser.Controller.Providers;
  8. using MediaBrowser.Model.IO;
  9. using Microsoft.Extensions.Logging;
  10. namespace MediaBrowser.LocalMetadata.Images
  11. {
  12. /// <summary>
  13. /// Internal metadata folder image provider.
  14. /// </summary>
  15. public class InternalMetadataFolderImageProvider : ILocalImageProvider, IHasOrder
  16. {
  17. private readonly IFileSystem _fileSystem;
  18. private readonly ILogger<InternalMetadataFolderImageProvider> _logger;
  19. /// <summary>
  20. /// Initializes a new instance of the <see cref="InternalMetadataFolderImageProvider"/> class.
  21. /// </summary>
  22. /// <param name="fileSystem">Instance of the <see cref="IFileSystem"/> interface.</param>
  23. /// <param name="logger">Instance of the <see cref="ILogger{InternalMetadataFolderImageProvider}"/> interface.</param>
  24. public InternalMetadataFolderImageProvider(
  25. IFileSystem fileSystem,
  26. ILogger<InternalMetadataFolderImageProvider> logger)
  27. {
  28. _fileSystem = fileSystem;
  29. _logger = logger;
  30. }
  31. /// Make sure this is last so that all other locations are scanned first
  32. /// <inheritdoc />
  33. public int Order => 1000;
  34. /// <inheritdoc />
  35. public string Name => "Internal Images";
  36. /// <inheritdoc />
  37. public bool Supports(BaseItem item)
  38. {
  39. if (item is Photo)
  40. {
  41. return false;
  42. }
  43. if (!item.IsSaveLocalMetadataEnabled())
  44. {
  45. return true;
  46. }
  47. // Extracted images will be saved in here
  48. if (item is Audio)
  49. {
  50. return true;
  51. }
  52. if (item.SupportsLocalMetadata && !item.AlwaysScanInternalMetadataPath)
  53. {
  54. return false;
  55. }
  56. return true;
  57. }
  58. /// <inheritdoc />
  59. public IEnumerable<LocalImageInfo> GetImages(BaseItem item, IDirectoryService directoryService)
  60. {
  61. var path = item.GetInternalMetadataPath();
  62. if (!Directory.Exists(path))
  63. {
  64. return Enumerable.Empty<LocalImageInfo>();
  65. }
  66. try
  67. {
  68. return new LocalImageProvider(_fileSystem).GetImages(item, path, directoryService);
  69. }
  70. catch (IOException ex)
  71. {
  72. _logger.LogError(ex, "Error while getting images for {Library}", item.Name);
  73. return Enumerable.Empty<LocalImageInfo>();
  74. }
  75. }
  76. }
  77. }