EpisodeProviderFromXml.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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 async 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. await Task.FromResult<object>(null).ConfigureAwait(false);
  41. return;
  42. }
  43. }
  44. else
  45. {
  46. if (!season.ContainsMetadataFile(metadataFile))
  47. {
  48. await Task.FromResult<object>(null).ConfigureAwait(false);
  49. return;
  50. }
  51. }
  52. await Task.Run(() => { new EpisodeXmlParser().Fetch(item, metadataFile); }).ConfigureAwait(false);
  53. }
  54. }
  55. }