EpisodeImageFromMediaLocationProvider.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. using MediaBrowser.Controller.Entities;
  2. using MediaBrowser.Controller.Entities.TV;
  3. using MediaBrowser.Controller.Library;
  4. using System.ComponentModel.Composition;
  5. using System.IO;
  6. using System.Linq;
  7. using System.Threading.Tasks;
  8. namespace MediaBrowser.Controller.Providers.TV
  9. {
  10. [Export(typeof(BaseMetadataProvider))]
  11. public class EpisodeImageFromMediaLocationProvider : BaseMetadataProvider
  12. {
  13. public override bool Supports(BaseEntity item)
  14. {
  15. return item is Episode;
  16. }
  17. public override MetadataProviderPriority Priority
  18. {
  19. get { return MetadataProviderPriority.First; }
  20. }
  21. public override Task FetchAsync(BaseEntity item, ItemResolveEventArgs args)
  22. {
  23. return Task.Run(() =>
  24. {
  25. var episode = item as Episode;
  26. string metadataFolder = Path.Combine(args.Parent.Path, "metadata");
  27. string episodeFileName = Path.GetFileName(episode.Path);
  28. var season = args.Parent as Season;
  29. SetPrimaryImagePath(episode, season, metadataFolder, episodeFileName);
  30. });
  31. }
  32. private void SetPrimaryImagePath(Episode item, Season season, string metadataFolder, string episodeFileName)
  33. {
  34. // Look for the image file in the metadata folder, and if found, set PrimaryImagePath
  35. var imageFiles = new string[] {
  36. Path.Combine(metadataFolder, Path.ChangeExtension(episodeFileName, ".jpg")),
  37. Path.Combine(metadataFolder, Path.ChangeExtension(episodeFileName, ".png"))
  38. };
  39. string image;
  40. if (season == null)
  41. {
  42. // Epsiode directly in Series folder. Gotta do this the slow way
  43. image = imageFiles.FirstOrDefault(f => File.Exists(f));
  44. }
  45. else
  46. {
  47. image = imageFiles.FirstOrDefault(f => season.ContainsMetadataFile(f));
  48. }
  49. // If we found something, set PrimaryImagePath
  50. if (!string.IsNullOrEmpty(image))
  51. {
  52. item.PrimaryImagePath = image;
  53. }
  54. }
  55. }
  56. }