EpisodeProviderFromXml.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. using System.ComponentModel.Composition;
  2. using System.IO;
  3. using System.Threading.Tasks;
  4. using MediaBrowser.Controller.Events;
  5. using MediaBrowser.Controller.Providers;
  6. using MediaBrowser.Model.Entities;
  7. using MediaBrowser.TV.Entities;
  8. using MediaBrowser.TV.Metadata;
  9. namespace MediaBrowser.TV.Providers
  10. {
  11. [Export(typeof(BaseMetadataProvider))]
  12. public class EpisodeProviderFromXml : BaseMetadataProvider
  13. {
  14. public override bool Supports(BaseEntity item)
  15. {
  16. return item is Episode;
  17. }
  18. public override MetadataProviderPriority Priority
  19. {
  20. get { return MetadataProviderPriority.First; }
  21. }
  22. public override Task FetchAsync(BaseEntity item, ItemResolveEventArgs args)
  23. {
  24. return Fetch(item, args);
  25. }
  26. private Task Fetch(BaseEntity item, ItemResolveEventArgs args)
  27. {
  28. string metadataFolder = Path.Combine(args.Parent.Path, "metadata");
  29. string metadataFile = Path.Combine(metadataFolder, Path.ChangeExtension(Path.GetFileName(args.Path), ".xml"));
  30. return FetchMetadata(item as Episode, args.Parent as Season, metadataFile);
  31. }
  32. private Task FetchMetadata(Episode item, Season season, string metadataFile)
  33. {
  34. if (season == null)
  35. {
  36. // Episode directly in Series folder
  37. // Need to validate it the slow way
  38. if (!File.Exists(metadataFile))
  39. {
  40. return Task.FromResult<object>(null);
  41. }
  42. }
  43. else
  44. {
  45. if (!season.ContainsMetadataFile(metadataFile))
  46. {
  47. return Task.FromResult<object>(null);
  48. }
  49. }
  50. return Task.Run(() => { new EpisodeXmlParser().Fetch(item, metadataFile); });
  51. }
  52. }
  53. }