EpisodeProviderFromXml.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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. using MediaBrowser.TV.Metadata;
  11. namespace MediaBrowser.TV.Providers
  12. {
  13. [Export(typeof(BaseMetadataProvider))]
  14. public class EpisodeProviderFromXml : BaseMetadataProvider
  15. {
  16. public override bool Supports(BaseEntity item)
  17. {
  18. return item is Episode;
  19. }
  20. public async override Task Fetch(BaseEntity item, ItemResolveEventArgs args)
  21. {
  22. string metadataFolder = Path.Combine(args.Parent.Path, "metadata");
  23. Episode episode = item as Episode;
  24. string episodeFileName = Path.GetFileName(episode.Path);
  25. string metadataFile = Path.Combine(metadataFolder, Path.ChangeExtension(episodeFileName, ".xml"));
  26. await FetchMetadata(episode, args.Parent as Season, metadataFile);
  27. }
  28. private async Task FetchMetadata(Episode item, Season season, string metadataFile)
  29. {
  30. if (season == null)
  31. {
  32. // Episode directly in Series folder
  33. // Need to validate it the slow way
  34. if (!File.Exists(metadataFile))
  35. {
  36. return;
  37. }
  38. }
  39. else
  40. {
  41. if (!season.MetadataFiles.Any(s => s.Equals(metadataFile, StringComparison.OrdinalIgnoreCase)))
  42. {
  43. return;
  44. }
  45. }
  46. await new EpisodeXmlParser().Fetch(item, metadataFile);
  47. }
  48. }
  49. }