EpisodeIndexNumberProvider.cs 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using MediaBrowser.Controller.Configuration;
  2. using MediaBrowser.Controller.Entities;
  3. using MediaBrowser.Controller.Entities.TV;
  4. using MediaBrowser.Controller.Library;
  5. using MediaBrowser.Controller.Providers;
  6. using MediaBrowser.Model.Entities;
  7. using MediaBrowser.Model.Logging;
  8. using System;
  9. using System.Threading;
  10. using System.Threading.Tasks;
  11. namespace MediaBrowser.Providers.TV
  12. {
  13. /// <summary>
  14. /// Making this a provider because of how slow it is
  15. /// It only ever needs to run once
  16. /// </summary>
  17. public class EpisodeIndexNumberProvider : BaseMetadataProvider
  18. {
  19. /// <summary>
  20. /// Initializes a new instance of the <see cref="BaseMetadataProvider" /> class.
  21. /// </summary>
  22. /// <param name="logManager">The log manager.</param>
  23. /// <param name="configurationManager">The configuration manager.</param>
  24. public EpisodeIndexNumberProvider(ILogManager logManager, IServerConfigurationManager configurationManager)
  25. : base(logManager, configurationManager)
  26. {
  27. }
  28. protected override bool RefreshOnVersionChange
  29. {
  30. get
  31. {
  32. return true;
  33. }
  34. }
  35. protected override string ProviderVersion
  36. {
  37. get
  38. {
  39. return "2";
  40. }
  41. }
  42. /// <summary>
  43. /// Supportses the specified item.
  44. /// </summary>
  45. /// <param name="item">The item.</param>
  46. /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns>
  47. public override bool Supports(BaseItem item)
  48. {
  49. return item is Episode && item.LocationType != LocationType.Virtual && item.LocationType != LocationType.Remote;
  50. }
  51. /// <summary>
  52. /// Fetches metadata and returns true or false indicating if any work that requires persistence was done
  53. /// </summary>
  54. /// <param name="item">The item.</param>
  55. /// <param name="force">if set to <c>true</c> [force].</param>
  56. /// <param name="cancellationToken">The cancellation token.</param>
  57. /// <returns>Task{System.Boolean}.</returns>
  58. public override Task<bool> FetchAsync(BaseItem item, bool force, BaseProviderInfo providerInfo, CancellationToken cancellationToken)
  59. {
  60. var episode = (Episode)item;
  61. episode.IndexNumber = TVUtils.GetEpisodeNumberFromFile(item.Path, item.Parent is Season);
  62. episode.IndexNumberEnd = TVUtils.GetEndingEpisodeNumberFromFile(item.Path);
  63. if (!episode.ParentIndexNumber.HasValue)
  64. {
  65. var season = episode.Parent as Season;
  66. if (season != null)
  67. {
  68. episode.ParentIndexNumber = season.IndexNumber;
  69. }
  70. }
  71. SetLastRefreshed(item, DateTime.UtcNow, providerInfo);
  72. return TrueTaskResult;
  73. }
  74. /// <summary>
  75. /// Gets the priority.
  76. /// </summary>
  77. /// <value>The priority.</value>
  78. public override MetadataProviderPriority Priority
  79. {
  80. get { return MetadataProviderPriority.First; }
  81. }
  82. }
  83. }