EpisodeImageFromMediaLocationProvider.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. using System;
  2. using System.ComponentModel.Composition;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Threading.Tasks;
  6. using MediaBrowser.Controller.Events;
  7. using MediaBrowser.Controller.Providers;
  8. using MediaBrowser.Model.Entities;
  9. using MediaBrowser.TV.Entities;
  10. namespace MediaBrowser.TV.Providers
  11. {
  12. [Export(typeof(BaseMetadataProvider))]
  13. public class EpisodeImageFromMediaLocationProvider : BaseMetadataProvider
  14. {
  15. public override bool Supports(BaseEntity item)
  16. {
  17. return item is Episode;
  18. }
  19. public override Task Fetch(BaseEntity item, ItemResolveEventArgs args)
  20. {
  21. return Task.Run(() =>
  22. {
  23. Episode episode = item as Episode;
  24. string metadataFolder = Path.Combine(args.Parent.Path, "metadata");
  25. string episodeFileName = Path.GetFileName(episode.Path);
  26. Season season = args.Parent as Season;
  27. SetPrimaryImagePath(episode, season, metadataFolder, episodeFileName);
  28. });
  29. }
  30. private void SetPrimaryImagePath(Episode item, Season season, string metadataFolder, string episodeFileName)
  31. {
  32. string[] imageFiles = new string[] {
  33. Path.Combine(metadataFolder, Path.ChangeExtension(episodeFileName, ".jpg")),
  34. Path.Combine(metadataFolder, Path.ChangeExtension(episodeFileName, ".png"))
  35. };
  36. if (season == null)
  37. {
  38. // Gotta do this the slow way
  39. item.PrimaryImagePath = imageFiles.FirstOrDefault(f => File.Exists(f));
  40. }
  41. else
  42. {
  43. item.PrimaryImagePath = imageFiles.FirstOrDefault(f => season.MetadataFiles.Any(s => s.Equals(f, StringComparison.OrdinalIgnoreCase)));
  44. }
  45. }
  46. }
  47. }