EpisodeImageFromMediaLocationProvider.cs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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 MetadataProviderPriority Priority
  20. {
  21. get { return MetadataProviderPriority.First; }
  22. }
  23. public override Task Fetch(BaseEntity item, ItemResolveEventArgs args)
  24. {
  25. return Task.Run(() =>
  26. {
  27. Episode episode = item as Episode;
  28. string metadataFolder = Path.Combine(args.Parent.Path, "metadata");
  29. string episodeFileName = Path.GetFileName(episode.Path);
  30. Season season = args.Parent as Season;
  31. SetPrimaryImagePath(episode, season, metadataFolder, episodeFileName);
  32. });
  33. }
  34. private void SetPrimaryImagePath(Episode item, Season season, string metadataFolder, string episodeFileName)
  35. {
  36. string[] imageFiles = new string[] {
  37. Path.Combine(metadataFolder, Path.ChangeExtension(episodeFileName, ".jpg")),
  38. Path.Combine(metadataFolder, Path.ChangeExtension(episodeFileName, ".png"))
  39. };
  40. if (season == null)
  41. {
  42. // Gotta do this the slow way
  43. item.PrimaryImagePath = imageFiles.FirstOrDefault(f => File.Exists(f));
  44. }
  45. else
  46. {
  47. item.PrimaryImagePath = imageFiles.FirstOrDefault(f => season.ContainsMetadataFile(f));
  48. }
  49. }
  50. }
  51. }