using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; using System; using System.Threading; using System.Threading.Tasks; namespace MediaBrowser.Controller.Providers.MediaInfo { /// /// Uses ffmpeg to create video images /// public class AudioImageProvider : BaseMetadataProvider { /// /// Initializes a new instance of the class. /// /// The log manager. /// The configuration manager. public AudioImageProvider(ILogManager logManager, IServerConfigurationManager configurationManager) : base(logManager, configurationManager) { } /// /// The true task result /// protected static readonly Task TrueTaskResult = Task.FromResult(true); /// /// Supportses the specified item. /// /// The item. /// true if XXXX, false otherwise public override bool Supports(BaseItem item) { return item.LocationType == LocationType.FileSystem && item is Audio; } /// /// Override this to return the date that should be compared to the last refresh date /// to determine if this provider should be re-fetched. /// /// The item. /// DateTime. protected override DateTime CompareDate(BaseItem item) { return item.DateModified; } /// /// Gets the priority. /// /// The priority. public override MetadataProviderPriority Priority { get { return MetadataProviderPriority.Last; } } /// /// Needses the refresh internal. /// /// The item. /// The provider info. /// true if XXXX, false otherwise protected override bool NeedsRefreshInternal(BaseItem item, BaseProviderInfo providerInfo) { if (!string.IsNullOrEmpty(item.PrimaryImagePath)) { return false; } return base.NeedsRefreshInternal(item, providerInfo); } /// /// Fetches metadata and returns true or false indicating if any work that requires persistence was done /// /// The item. /// if set to true [force]. /// The cancellation token. /// Task{System.Boolean}. public override Task FetchAsync(BaseItem item, bool force, CancellationToken cancellationToken) { if (force || string.IsNullOrEmpty(item.PrimaryImagePath)) { var album = item.ResolveArgs.Parent as MusicAlbum; if (album != null) { // First try to use the parent's image item.PrimaryImagePath = item.ResolveArgs.Parent.PrimaryImagePath; } } SetLastRefreshed(item, DateTime.UtcNow); return TrueTaskResult; } } }