From 63c9104e624d0d22e6c5baf79db2d7bb9deb74d0 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 6 Dec 2013 15:07:34 -0500 Subject: Pull ProviderData out of memory --- MediaBrowser.Controller/Entities/BaseItem.cs | 23 ------------- .../Persistence/IItemRepository.cs | 17 ++++++++++ .../Providers/BaseMetadataProvider.cs | 39 ++++++++-------------- .../Providers/BaseProviderInfo.cs | 1 + 4 files changed, 31 insertions(+), 49 deletions(-) (limited to 'MediaBrowser.Controller') diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index 7022dad7fd..541887598d 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -201,29 +201,6 @@ namespace MediaBrowser.Controller.Entities } } - /// - /// The _provider data - /// - private Dictionary _providerData; - /// - /// Holds persistent data for providers like last refresh date. - /// Providers can use this to determine if they need to refresh. - /// The BaseProviderInfo class can be extended to hold anything a provider may need. - /// Keyed by a unique provider ID. - /// - /// The provider data. - public Dictionary ProviderData - { - get - { - return _providerData ?? (_providerData = new Dictionary()); - } - set - { - _providerData = value; - } - } - /// /// Gets the type of the media. /// diff --git a/MediaBrowser.Controller/Persistence/IItemRepository.cs b/MediaBrowser.Controller/Persistence/IItemRepository.cs index 3a5cb4e870..3affe48e74 100644 --- a/MediaBrowser.Controller/Persistence/IItemRepository.cs +++ b/MediaBrowser.Controller/Persistence/IItemRepository.cs @@ -1,4 +1,5 @@ using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using System; using System.Collections.Generic; @@ -111,6 +112,22 @@ namespace MediaBrowser.Controller.Persistence /// The cancellation token. /// Task. Task SaveMediaStreams(Guid id, IEnumerable streams, CancellationToken cancellationToken); + + /// + /// Gets the provider history. + /// + /// The item identifier. + /// IEnumerable{BaseProviderInfo}. + IEnumerable GetProviderHistory(Guid itemId); + + /// + /// Saves the provider history. + /// + /// The identifier. + /// The history. + /// The cancellation token. + /// Task. + Task SaveProviderHistory(Guid id, IEnumerable history, CancellationToken cancellationToken); } } diff --git a/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs b/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs index 07bb7d5b20..40afe0b544 100644 --- a/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs +++ b/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs @@ -36,7 +36,7 @@ namespace MediaBrowser.Controller.Providers /// /// The _id /// - protected readonly Guid Id; + public readonly Guid Id; /// /// The true task result @@ -132,41 +132,33 @@ namespace MediaBrowser.Controller.Providers /// The item. /// The value. /// The provider version. + /// The provider information. /// The status. /// item public virtual void SetLastRefreshed(BaseItem item, DateTime value, string providerVersion, - ProviderRefreshStatus status = ProviderRefreshStatus.Success) + BaseProviderInfo providerInfo, ProviderRefreshStatus status = ProviderRefreshStatus.Success) { if (item == null) { throw new ArgumentNullException("item"); } - BaseProviderInfo data; - - if (!item.ProviderData.TryGetValue(Id, out data)) - { - data = new BaseProviderInfo(); - } - - data.LastRefreshed = value; - data.LastRefreshStatus = status; - data.ProviderVersion = providerVersion; + providerInfo.LastRefreshed = value; + providerInfo.LastRefreshStatus = status; + providerInfo.ProviderVersion = providerVersion; // Save the file system stamp for future comparisons if (RefreshOnFileSystemStampChange && item.LocationType == LocationType.FileSystem) { try { - data.FileStamp = GetCurrentFileSystemStamp(item); + providerInfo.FileStamp = GetCurrentFileSystemStamp(item); } catch (IOException ex) { Logger.ErrorException("Error getting file stamp for {0}", ex, item.Path); } } - - item.ProviderData[Id] = data; } /// @@ -174,11 +166,12 @@ namespace MediaBrowser.Controller.Providers /// /// The item. /// The value. + /// The provider information. /// The status. public void SetLastRefreshed(BaseItem item, DateTime value, - ProviderRefreshStatus status = ProviderRefreshStatus.Success) + BaseProviderInfo providerInfo, ProviderRefreshStatus status = ProviderRefreshStatus.Success) { - SetLastRefreshed(item, value, ProviderVersion, status); + SetLastRefreshed(item, value, ProviderVersion, providerInfo, status); } /// @@ -189,20 +182,13 @@ namespace MediaBrowser.Controller.Providers /// The item. /// true if XXXX, false otherwise /// - public bool NeedsRefresh(BaseItem item) + public bool NeedsRefresh(BaseItem item, BaseProviderInfo data) { if (item == null) { throw new ArgumentNullException(); } - BaseProviderInfo data; - - if (!item.ProviderData.TryGetValue(Id, out data)) - { - data = new BaseProviderInfo(); - } - return NeedsRefreshInternal(item, data); } @@ -299,10 +285,11 @@ namespace MediaBrowser.Controller.Providers /// /// The item. /// if set to true [force]. + /// The provider information. /// The cancellation token. /// Task{System.Boolean}. /// - public abstract Task FetchAsync(BaseItem item, bool force, CancellationToken cancellationToken); + public abstract Task FetchAsync(BaseItem item, bool force, BaseProviderInfo providerInfo, CancellationToken cancellationToken); /// /// Gets the priority. diff --git a/MediaBrowser.Controller/Providers/BaseProviderInfo.cs b/MediaBrowser.Controller/Providers/BaseProviderInfo.cs index 243ce32af6..829dd34c8e 100644 --- a/MediaBrowser.Controller/Providers/BaseProviderInfo.cs +++ b/MediaBrowser.Controller/Providers/BaseProviderInfo.cs @@ -7,6 +7,7 @@ namespace MediaBrowser.Controller.Providers /// public class BaseProviderInfo { + public Guid ProviderId { get; set; } /// /// Gets or sets the last refreshed. /// -- cgit v1.2.3