SeriesResolver.cs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. using MediaBrowser.Controller.Entities.TV;
  2. using MediaBrowser.Controller.Library;
  3. using MediaBrowser.Model.Entities;
  4. using System;
  5. using System.ComponentModel.Composition;
  6. using System.IO;
  7. namespace MediaBrowser.Controller.Resolvers.TV
  8. {
  9. [Export(typeof(IBaseItemResolver))]
  10. public class SeriesResolver : BaseFolderResolver<Series>
  11. {
  12. protected override Series Resolve(ItemResolveEventArgs args)
  13. {
  14. if (args.IsDirectory)
  15. {
  16. // Optimization to avoid running all these tests against VF's
  17. if (args.Parent != null && args.Parent.IsRoot)
  18. {
  19. return null;
  20. }
  21. // Optimization to avoid running these tests against Seasons
  22. if (args.Parent is Series)
  23. {
  24. return null;
  25. }
  26. // It's a Series if any of the following conditions are met:
  27. // series.xml exists
  28. // [tvdbid= is present in the path
  29. // TVUtils.IsSeriesFolder returns true
  30. if (args.ContainsFile("series.xml") || Path.GetFileName(args.Path).IndexOf("[tvdbid=", StringComparison.OrdinalIgnoreCase) != -1 || TVUtils.IsSeriesFolder(args.Path, args.FileSystemChildren))
  31. {
  32. return new Series();
  33. }
  34. }
  35. return null;
  36. }
  37. protected override void SetInitialItemValues(Series item, ItemResolveEventArgs args)
  38. {
  39. base.SetInitialItemValues(item, args);
  40. SetProviderIdFromPath(item);
  41. }
  42. private void SetProviderIdFromPath(Series item)
  43. {
  44. const string srch = "[tvdbid=";
  45. int index = item.Path.IndexOf(srch, StringComparison.OrdinalIgnoreCase);
  46. if (index != -1)
  47. {
  48. string id = item.Path.Substring(index + srch.Length);
  49. id = id.Substring(0, id.IndexOf(']'));
  50. item.SetProviderId(MetadataProviders.Tvdb, id);
  51. }
  52. }
  53. }
  54. }