From 8b548fff38641e0de6ea2870a5d37c6bc76a6a90 Mon Sep 17 00:00:00 2001 From: ebr11 Eric Reed spam Date: Mon, 17 Sep 2012 20:06:31 -0400 Subject: Provider Data on item and NeedsRefresh functionality for providers --- .../Providers/BaseMetadataProvider.cs | 55 ++++++++++++++++++++++ 1 file changed, 55 insertions(+) (limited to 'MediaBrowser.Controller/Providers/BaseMetadataProvider.cs') diff --git a/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs b/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs index bae1ff0f9c..80a264af27 100644 --- a/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs +++ b/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs @@ -1,11 +1,23 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; +using MediaBrowser.Common.Extensions; using System.Threading.Tasks; +using System; namespace MediaBrowser.Controller.Providers { public abstract class BaseMetadataProvider { + protected Guid _id; + public virtual Guid Id + { + get + { + if (_id == null) _id = this.GetType().FullName.GetMD5(); + return _id; + } + } + public abstract bool Supports(BaseEntity item); public virtual bool RequiresInternet @@ -16,6 +28,49 @@ namespace MediaBrowser.Controller.Providers } } + /// + /// Returns the last refresh time of this provider for this item. Providers that care should + /// call SetLastRefreshed to update this value. + /// + /// + /// + protected virtual DateTime LastRefreshed(BaseEntity item) + { + return (item.ProviderData[this.Id] ?? new BaseProviderInfo()).LastRefreshed; + } + + /// + /// Sets the persisted last refresh date on the item for this provider. + /// + /// + /// + protected virtual void SetLastRefreshed(BaseEntity item, DateTime value) + { + var data = item.ProviderData[this.Id] ?? new BaseProviderInfo(); + data.LastRefreshed = value; + item.ProviderData[this.Id] = data; + } + + /// + /// Returns whether or not this provider should be re-fetched. Default functionality can + /// compare a provided date with a last refresh time. This can be overridden for more complex + /// determinations. + /// + /// + public virtual bool NeedsRefresh(BaseEntity item) + { + return CompareDate(item) > LastRefreshed(item); + } + + /// + /// Override this to return the date that should be compared to the last refresh date + /// to determine if this provider should be re-fetched. + /// + protected virtual DateTime CompareDate(BaseEntity item) + { + return DateTime.MinValue; + } + public abstract Task FetchAsync(BaseEntity item, ItemResolveEventArgs args); public abstract MetadataProviderPriority Priority { get; } -- cgit v1.2.3