AudioImageProvider.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. using MediaBrowser.Controller.Configuration;
  2. using MediaBrowser.Controller.Entities;
  3. using MediaBrowser.Controller.Entities.Audio;
  4. using MediaBrowser.Model.Entities;
  5. using MediaBrowser.Model.Logging;
  6. using System;
  7. using System.Threading;
  8. using System.Threading.Tasks;
  9. namespace MediaBrowser.Controller.Providers.MediaInfo
  10. {
  11. /// <summary>
  12. /// Uses ffmpeg to create video images
  13. /// </summary>
  14. public class AudioImageProvider : BaseMetadataProvider
  15. {
  16. /// <summary>
  17. /// Initializes a new instance of the <see cref="BaseMetadataProvider" /> class.
  18. /// </summary>
  19. /// <param name="logManager">The log manager.</param>
  20. /// <param name="configurationManager">The configuration manager.</param>
  21. public AudioImageProvider(ILogManager logManager, IServerConfigurationManager configurationManager)
  22. : base(logManager, configurationManager)
  23. {
  24. }
  25. /// <summary>
  26. /// The true task result
  27. /// </summary>
  28. protected static readonly Task<bool> TrueTaskResult = Task.FromResult(true);
  29. /// <summary>
  30. /// Supportses the specified item.
  31. /// </summary>
  32. /// <param name="item">The item.</param>
  33. /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns>
  34. public override bool Supports(BaseItem item)
  35. {
  36. return item.LocationType == LocationType.FileSystem && item is Audio;
  37. }
  38. /// <summary>
  39. /// Override this to return the date that should be compared to the last refresh date
  40. /// to determine if this provider should be re-fetched.
  41. /// </summary>
  42. /// <param name="item">The item.</param>
  43. /// <returns>DateTime.</returns>
  44. protected override DateTime CompareDate(BaseItem item)
  45. {
  46. return item.DateModified;
  47. }
  48. /// <summary>
  49. /// Gets the priority.
  50. /// </summary>
  51. /// <value>The priority.</value>
  52. public override MetadataProviderPriority Priority
  53. {
  54. get { return MetadataProviderPriority.Last; }
  55. }
  56. /// <summary>
  57. /// Needses the refresh internal.
  58. /// </summary>
  59. /// <param name="item">The item.</param>
  60. /// <param name="providerInfo">The provider info.</param>
  61. /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns>
  62. protected override bool NeedsRefreshInternal(BaseItem item, BaseProviderInfo providerInfo)
  63. {
  64. if (!string.IsNullOrEmpty(item.PrimaryImagePath))
  65. {
  66. return false;
  67. }
  68. return base.NeedsRefreshInternal(item, providerInfo);
  69. }
  70. /// <summary>
  71. /// Fetches metadata and returns true or false indicating if any work that requires persistence was done
  72. /// </summary>
  73. /// <param name="item">The item.</param>
  74. /// <param name="force">if set to <c>true</c> [force].</param>
  75. /// <param name="cancellationToken">The cancellation token.</param>
  76. /// <returns>Task{System.Boolean}.</returns>
  77. public override Task<bool> FetchAsync(BaseItem item, bool force, CancellationToken cancellationToken)
  78. {
  79. if (force || string.IsNullOrEmpty(item.PrimaryImagePath))
  80. {
  81. var album = item.ResolveArgs.Parent as MusicAlbum;
  82. if (album != null)
  83. {
  84. // First try to use the parent's image
  85. item.PrimaryImagePath = item.ResolveArgs.Parent.PrimaryImagePath;
  86. }
  87. }
  88. SetLastRefreshed(item, DateTime.UtcNow);
  89. return TrueTaskResult;
  90. }
  91. }
  92. }